OpenAI 官方帮助文档中文版(openai和openapi)
OpenAI API和OpenAPI简介
OpenAI是由硅谷大亨联合建立的人工智能非营利组织,致力于研究和开发人工智能技术。而OpenAPI是一种描写和定义RESTful API的规范,使用JSON或YAML格式来描写API的资源、操作和参数等信息。
OpenAI API是OpenAI提供的一种人工智能服务接口,它的行动和特性可以通过OpenAPI规范来描写和定义。
获得OpenAPI密钥
要使用OpenAI API,首先需要创建OpenAI账户并租赁令牌以获得唯一的API密钥。
- 访问OpenAI网站并创建一个账户。
- 租赁令牌并获得唯一的API密钥。
使用OpenAI库连接API
在Python中,可使用openai库来连接OpenAI API。
- 安装openai库并导入所需模块。
- 创建OpenAI对象并传入API密钥。
使用OpenAI对象的方法来实现API调用,例如chatComp方法用于与聊天模型进行交互。根据OpenAI API的OpenAPI规范,使用适合的HTTP方法和操作来描写API的行动。
加速项目集成OpenAI API的OpenAPI组件
要加速项目集成OpenAI API的OpenAPI组件,可以依照以下步骤进行:
- 在宝塔面板中创建一个网站,并选择适合的域名和根目录。
- 在网站设置中添加反向代理规则,以便将API要求转发到OpenAI API。
- 使用OpenAPI规范描写API的结构和行动,可使用JSON或YAML格式创建OpenAPI规范文件。
- 创建插件的JSON manifest文件,定义插件的相关元数据。
通过使用OpenAPI规范的API文档和插件,可以方便地加速项目集成OpenAI API,并更好地理解和使用OpenAI API的功能和特性。
OpenAI API的利用
OpenAI API可以利用于多种任务,包括自然语言处理、聊天机器人、智能问答等领域。
OpenAI团队采取Python作为后端语言,可以方便地与AI框架和库如TensorFlow和PyTorch进行集成,以更好地利用OpenAI API的功能。
总结
OpenAI API和OpenAPI是相互关联的概念,OpenAPI规范可以帮助开发者更好地理解和利用OpenAI API。通过加速项目集成OpenAI API的OpenAPI组件,开发者可以更快地实现对OpenAI API功能的利用和扩大。OpenAI API的强大功能和广泛利用为人工智能领域带来了许多新的机遇和挑战。
openai和openapi的进一步展开说明
插件开发快速入门
创建插件需要三个步骤:
- 构建一个 API
- 创建一个 JSON manifest 文件
- 定义 OpenAPI 规范文件
接下来的内容将重点介绍如何通过定义 OpenAPI 规范和 manifest 文件来创建待办事项列表插件。
插件清单文件
每一个插件都需要一个名为 ai-plugin.json
的文件,该文件需要托管在 API 所在的域名下。例如,一家名为 example.com 的公司将通过 https://example.com
访问插件 JSON 文件。当您通过 ChatGPT UI 安装插件时,我们会在后台查找 /.well-known/ai-plugin.json
文件。如果未找到该文件,则没法安装插件。
一个插件的最小定义可以以下所示:
“`
{
“schema_version”: “v1”,
“name_for_human”: “TODO Plugin”,
“name_for_model”: “todo”,
“description_for_human”: “Plugin for managing a TODO list. You can add, remove and view your TODOs.”,
“description_for_model”: “Plugin for managing a TODO list. You can add, remove and view your TODOs.”,
“auth”: {
“type”: “none”
},
“api”: {
“type”: “openapi”,
“url”: “http://localhost:3333/openapi.yaml”,
“is_user_authenticated”: false
},
“logo_url”: “https://vsq7s0⑸001.preview.csb.app/logo.png”,
“contact_email”: “[email protected]”,
“legal_info_url”: “http://www.example.com/legal”
}
“`
如果您想查看所有可能选项,可以参考下面的定义:
字段 | 类型 | 描写/选项 |
---|---|---|
schema_version | String | 清单(manifest)架构版本 |
name_for_model | String | 模型将用于定位插件的名称 |
name_for_human | String | 人类可读的名称,例如公司全名 |
description_for_model | String | 更合适模型的描写 |
description_for_human | String | 插件的人类可读描写 |
auth | ManifestAuth | 身份验证模式 |
api | Object | 接口规范 |
logo_url | String | 用于获得插件徽标的网址 |
contact_email | String | 用于安全/审核联系、支持和停用的电子邮件联系人 |
legal_info_url | String | 重定向 URL,以便用户查看插件信息 |
使用区别身份验证方法的示例以下:
```javascript
// App-level API keys
type ManifestServiceHttpAuth = BaseManifestAuth & {
type: 'service_http';
authorization_type: HttpAuthorizationType;
verification_tokens?: {
[service: string]: string;
};
}
```
```javascript
// User-level HTTP authentication
type ManifestUserHttpAuth = BaseManifestAuth & {
type: 'user_http';
authorization_type: HttpAuthorizationType;
}
```
```javascript
type ManifestOAuthAuth = BaseManifestAuth & {
type: 'oauth';
client_url: string; // OAuth URL where a user is directed to for the OAuth authentication flow to begin
scope: string; // OAuth scopes required to accomplish operations on the user's behalf
authorization_url: string; // Endpoint used to exchange OAuth code with access token
authorization_content_type: string; // When exchanging OAuth code with access token, the expected header 'content-type'. For example: 'content-type: application/json'
verification_tokens?: {
[service: string]: string;
};
}
```
一些字段在 manifest 文件中是有长度限制的,这些限制可能会产生变化:
- name_for_human: 最多 50 个字符
- name_for_model: 最多 50 个字符
- description_for_human: 最多 120 个字符
- description_for_model: 最多 8000 个字符(会随着时间的推移而减少)
另外,对 API 响应正文长度也有 100k 个字符的限制(会随着时间的推移而减少)。
OpenAPI 规范和 API 文档
接下来,我们使用 OpenAPI 规范 来描写 API 文档。除 OpenAPI 规范和 manifest 文件中定义的内容外,ChatGPT 中的模型对您的 API 一无所知。这意味着,如果您具有非常多的 API,只需要向模型开放特定的 API 就能够,无需向其公然所有 API。例如,如果您有一个社交媒体 API,您可能希望模型能够通过 GET 要求访问网站内容,但要禁止模型对用户帖子发表评论,以减少垃圾邮件的可能性。
一个基本的 OpenAPI 规范以下所示:
```yaml
openapi: 3.0.1
info:
title: TODO Plugin
description: A plugin that allows the user to create and manage a TODO list using ChatGPT.
version: "v1"
servers:
- url: http://localhost:3333
paths:
/todos:
get:
operationId: getTodos
summary: Get the list of todos
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/getTodosResponse"
components:
schemas:
getTodosResponse:
type: object
properties:
todos:
type: array
items:
type: string
description: The list of todos.
```
我们首先定义了规范的版本、标题、描写和版本号。ChatGPT 在运行查询时会查看信息部份中定义的描写,以肯定插件会不会与用户查询相关。您可以在写作说明部份浏览更多关于提示的信息。
在编写 OpenAPI 规范时,请记住以下限制,这些限制可能会变化:
- API 规范中每一个 API Endpoint(指具体的某个 API)节点的描写字段最多 200 个字符
- API 规范中每一个 API 参数描写字段最多 200 个字符
接下来,我们将服务器设置为指向本地主机 URL,由于我们要在本地运行此示例。OpenAPI 规范的其余部份遵守传统的 OpenAPI 格式,您可以通过各种在线资源了解有关 OpenAPI 格式的更多信息。还有许多类似 Apifox 这样的工具可以自动生成 OpenAPI 规范文档。
在为 API 创建了 manifest 文件和 OpenAPI 规范后,您现在可以通过 ChatGPT UI 连接插件了。您的插件可以运行在本地开发环境或远程服务器上。
如果您在本地运行 API 的版本,则可以将插件接口指向本地设置。要连接插件和 ChatGPT,请导航到插件市场,然后选择“Install an unverified plugin(安装未经验证的插件)”。
如果插件在远程服务器上运行,则需要首先选择“Develop your own plugin(开发自己的插件)”,然后选择“Install an unverified plugin(安装未经验证的插件)”。您只需将插件 manifest 文件添加到 ./well-known
路径,并开始测试您的 API。但是,如果您对清单文件进行了更改,则一定要将新更改部署到您的公共站点,这可能需要很长时间。在这类情况下,我们建议设置一个本地服务器作为您的 API 的代理。这样,您可以快速对 OpenAPI 规范和清单文件的更改进行原型设计。
以下是一个使用 Python 代码设置公共 API 代理的示例:
```python
import requests
import os
import yaml
from flask import Flask, jsonify, Response, request, send_from_directory
from flask_cors import CORS
app = Flask(__name__)
PORT = 3333
CORS(app, origins=[f"http://localhost:{PORT}", "https://chat.openai.com"])
api_url = 'https://example'
@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('/
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.content
if __name__ == '__main__':
app.run(port=PORT)
```
与模型交互
当用户发出多是对插件的潜伏要求的查询时,模型会根据 OpenAPI 规范中的 Endpoint 描写和 manifest 文件中的 description_for_model 进行判断。与其他语言模型的提示一样,您需要测试多个提示和描写,看看哪一个会有最好效果。
OpenAPI 规范本身是一个很好的地方,可以为模型提供有关 API 各种细节的信息,如可用的功能和参数。除对每一个字段使用富有表达力、信息丰富的名称外,规范还可以包括对每一个属性进行“描写”的字段。例如,它们可用于提供关于功能的功能或关于查询字段期望的信息的自然语言描写。该模型将能够看到这些描写,并根据它们使用 API。如果一个字段被限制为仅接受某些值,您还可以提供一个带有描写性种别名称的“枚举”。
属性 “description_for_model” 可以让您自由地指点模型怎样使用您的插件。整体而言,ChatGPT 背后的语言模型能够高度理解自然语言并遵守指令。因此,这是一个很好的地方,可以放置有关插件功能和模型应如何正确使用它的一般说明。使用自然语言时,最好使用简洁但具有描写性和客观性的语气。您可以查看一些示例以了解这应当是甚么模样。我们建议以“Plugin for …”开头,然后枚举您的 API 提供的所有功能。
以下是在 OpenAPI 规范中编写 description_for_model 和描写时的一些最好实践:
- 您的描写不应试图控制 ChatGPT 的情绪、个性或确切反应。ChatGPT 旨在为插件编写适当的响应。
- 当用户没有明确要求使用您的插件的特定服务种别时,您的描写不应鼓励 ChatGPT 使用该插件。
- 您的描写不应规定 ChatGPT 使用该插件的特定触发器。ChatGPT 旨在在适当的时候自动使用您的插件。
- 插件 API 的响应应返回原始数据而不是自然语言响应(除非确切有必要)。ChatGPT 将使用返回的数据提供自己的自然语言响应。
注意,默许情况下,用户不会看到插件调用和其他未向用户显示的信息。要更全面地了解模型如何与插件交互,您可以点击屏幕左下角的“Debug”按钮打开调试窗口。这将显示到目前为止对话的原始文本,包括插件调用和响应。
对插件的模型调用通常以消息的情势进行,其中包括了类似 JSON 的参数发送到插件,并以插件返回的信息为模型所用。
在某些情况下,例如在插件安装期间,毛病可能会出现在浏览器的 JavaScript 控制台中。
请确保所有改写都符合上述准则。
openai和openapi的常见问答Q&A
问题1:OpenAI API 的 OpenAPI 规范是甚么?
答案:OpenAI API 的 OpenAPI 规范是一种描写 OpenAI API 行动的标准规范。该规范使用 HTTP 方法和操作来描写 API 的行动。在 OpenAI API 的 OpenAPI 规范中,每一个操作都有一个唯一的路径和一组输入参数,用于要求 API。它还定义了 API 的响应格式和可能的毛病代码。
- OpenAPI 规范定义了一套规则,用于描写如何构建有效的 API 要求。
- 使用 OpenAPI 规范可以帮助开发人员更好地了解和集成 OpenAI API。
- OpenAPI 规范使用 YAML 或 JSON 格式进行编写,以便开发人员和工具可以轻松地解析和使用。
问题2:怎么用 Python 调用 OpenAI API?
答案:要使用 Python 调用 OpenAI API,可以依照以下步骤进行:
- 导入 openai 库:在 Python 代码中导入 openai 库。
- 设置 API 密钥:使用 OpenAI 官网上获得的 API 密钥进行身份验证。
- 构造 API 要求:根据 OpenAI API 的 OpenAPI 规范构造 API 要求,包括路径、方法和必要的参数。
- 发送 API 要求:通过调用相应的 openai 函数发送 API 要求。
- 处理 API 响应:处理并解析 API 响应,提取所需的信息。
示例代码:
import openai
# 设置 API 密钥
openai.api_key = "YOUR_API_KEY"
# 构造 API 要求
response = openai.Completion.create(
engine="davinci",
prompt="Once upon a time",
max_tokens=100
)
# 处理 API 响应
completion = response.choices[0]
print(completion.text)
问题3:OpenAI API 支持哪些地区?
答案:OpenAI API 支持广泛的地区。根据 OpenAI 官方文档,在 OpenAPI 的规范中,OpenAI API 目前支持 152 个国家和地区。
- 用户可以在新加坡使用 OpenAI API,无需担心 IP 地址或服务的封闭。
- 不过,OpenAI API 不支持中国大陆和香港的地区。
请注意,这些地区支持可能随时间有所变化,建议参考官方文档以获得最新的信息。
问题4:OpenAI API 的快速开始步骤是甚么?
答案:以下是使用 OpenAI API 的快速开始步骤:
- 注册 OpenAI 账号:在官方网站上注册一个 OpenAI 账号。
- 获得 API 密钥:租赁令牌并获得唯一的 API 密钥。
- 创建 OpenAI 对象:使用 Python 的 openai 库创建 OpenAI 对象,将 API 密钥传递给它。
- 构造 API 要求:根据 OpenAI API 的 OpenAPI 规范构造 API 要求,包括路径、方法和必要的参数。
- 发送 API 要求:通过调用相应的 openai 函数发送 API 要求。
- 处理 API 响应:处理并解析 API 响应,提取所需的信息。
import openai
# 创建 OpenAI 对象
openai = openai.OpenAICreate(key)
# 构造 API 要求
response = openai.Completion.create(
engine="davinci",
prompt="Once upon a time",
max_tokens=100
)
# 处理 API 响应
completion = response.choices[0]
print(completion.text)