一旦您创建了一个API、清单文件和您的API的OpenAPI规范,您现在就可以通过ChatGPT UI连接插件了。您的插件可能在两个不同的地方运行,要么在本地的开发环境中,要么在远程服务器上。
如果您有一个在本地运行的API版本,您可以将插件界面指向您的localhost服务器。要连接ChatGPT的插件,请导航到插件商店并选择“开发您自己的插件”。输入您的localhost和端口号(例如 localhost:3333)。请注意,目前只支持auth类型none用于localhost开发。
如果插件在远程服务器上运行,您首先需要选择“开发您自己的插件”来设置它,然后选择“安装一个未验证的插件”为自己安装它。您可以简单地将插件清单文件添加到yourdomain.com/.well-known/路径并开始测试您的API。但是,对于您的清单文件的后续更改,您将必须将新的更改部署到您的公共站点,这可能需要很长时间。在这种情况下,我们建议设置一个本地服务器作为您API的代理。这允许您快速原型化您的OpenAPI规范和清单文件的更改。
设置您公共API的本地代理
以下Python代码是一个示例,说明如何设置您面向公众的API的简单代理。
```
import requests
import osimport yaml
from flask import Flask, jsonify, Response, request, send_from_directory
from flask_cors import CORSapp = Flask(__name__)
PORT = 3333
# 注意:设置CORS以允许chat.openapi.com访问您的插件是必需的
CORS(app, origins=[f"http://localhost:{PORT}", "https://chat.openai.com"])api_url = 'https://example.com'
@app.route('/.well-known/ai-plugin.json')
def serve_manifest():
return send_from_directory(os.path.dirname(__file__), 'ai-plugin.json')@app.route('/openapi.yaml')
def serve_openapi_yaml():
with open(os.path.join(os.path.dirname(__file__), 'openapi.yaml'), 'r') as f:
yaml_data = f.read()
yaml_data = yaml.load(yaml_data, Loader=yaml.FullLoader)
return jsonify(yaml_data)@app.route('/openapi.json')
def serve_openapi_json():
return send_from_directory(os.path.dirname(__file__), 'openapi.json')@app.route('/<path:path>', methods=['GET', 'POST'])
def wrapper(path):headers = {
'Content-Type': 'application/json',
}url = f'{api_url}/{path}'
print(f'Forwarding call: {request.method} {path} -> {url}')if request.method == 'GET':
response = requests.get(url, headers=headers, params=request.args)
elif request.method == 'POST':
print(request.headers)
response = requests.post(url, headers=headers, params=request.args, json=request.json)
else:
raise NotImplementedError(f'Method {request.method} not implemented in wrapper for {path=}')
return response.contentif __name__ == '__main__':
app.run(port=PORT)
```
评论