介绍
您可以通过来自任何语言的 HTTP 请求、我们的官方 Python 绑定、我们的官方 Node.js 库或社区维护的库与 API 进行交互。
若要安装官方 Python 绑定,请运行以下命令:
pip install openai
要安装官方的 Node.js 库,请在 Node.js 项目目录中运行以下命令:
npm install openai
身份认证
OpenAI API 使用 API 密钥进行身份验证。访问您的 API 密钥页面,检索您将在请求中使用的 API 密钥。
请记住,您的API密钥是一个秘密!不要与他人共享或在任何客户端代码(浏览器、应用程序)中公开它。生产请求必须通过您自己的后端服务器进行路由,在该服务器上,可以从环境变量或密钥管理服务安全地加载 API 密钥。
所有 API 请求都应在 Authorization HTTP 标头中包含您的 API 密钥,如下所示:
Authorization: Bearer YOUR_API_KEY
请求组织
对于属于多个组织的用户,您可以传递标头以指定用于 API 请求的组织。这些 API 请求的使用量将计入指定组织的订阅配额。
示例 curl 命令:
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "OpenAI-Organization: YOUR_ORG_ID"
Python 包的openai示例:
import os
import openai
openai.organization = "YOUR_ORG_ID"
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.list()
Node.js 包的openai示例:
import {
Configuration, OpenAIApi } from "openai";
const configuration = new Configuration({
organization: "YOUR_ORG_ID",
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.listEngines();
可以在组织设置页面上找到组织 ID。
提出请求
您可以将以下命令粘贴到终端中以运行您的第一个 API 请求。请确保将 $OPENAI_API_KEY 替换为您的密钥。
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{
"role": "user", "content": "Say this is a test!"}],
"temperature": 0.7
}'
此请求使用 “gpt-3.5-turbo” 模型来完成以 “Say this is a test” 为提示的文本。您将收到一个类似以下的响应:
{
"id":"chatcmpl-abc123",
"object":"chat.completion",
"created":1677858242,
"model":"gpt-3.5-turbo-0301",
"usage":{
"prompt_tokens":13,
"completion_tokens":7,
"total_tokens":20
},
"choices":[
{
"message":{
"role":"assistant",
"content":"\n\nThis is a test!"
},
"finish_reason":"stop",
"index":0
}
]
}
现在您已经生成了第一个聊天完成。我们可以看到 finish_reason 是 stop,这意味着 API 返回了模型生成的完整完成结果。在上述请求中,我们只生成了一条消息,但您可以通过设置 n 参数来生成多个消息选择。
模型
列出并描述 API 中可用的各种模型。您可以参考模型文档以了解可用的模型以及它们之间的差异。
API 中可用的各种模型及其描述:
text-davinci-003: 这是一个基于文本的模型,适用于广泛的自然语言处理任务。它可以生成高质量的文本,但需要更长的推理时间。
text-davinci-002: 这也是一个基于文本的模型,适用于各种自然语言处理任务。它在速度和质量之间取得了平衡。
text-davinci-001: 这是一个基于文本的模型,适用于常见的自然语言处理任务。它在速度方面更快,但可能牺牲一些质量。
gpt-3.5-turbo: 这是一个强大的模型,适用于生成文本、回答问题、完成任务等多种任务。它是最先进的模型之一,具有出色的质量和速度。
每个模型都有不同的特点和用途,具体选择取决于您的需求和偏好。您可以参考「Models」文档以了解可用模型之间的区别和适用场景。
列出模型
GET https://api.openai.com/v1/models
示例请求
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.list()
响应
{
"data": [
{
"id": "model-id-0",
"object": "model",
"owned_by": "organization-owner",
"permission": [...]
},
{
"id": "model-id-1",
"object": "model",
"owned_by": "organization-owner",
"permission": [...]
},
{
"id": "model-id-2",
"object": "model",
"owned_by": "openai",
"permission": [...]
},
],
"object": "list"
}
模型获取
GET https://api.openai.com/v1/models/{model}
获取模型实例,提供有关模型的基本信息,例如所有者和权限。
路径参数 model string Required
用于此请求的模型 ID
示例请求:
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.retrieve("text-davinci-003")
响应
{
"id": "text-davinci-003",
"object": "model",
"owned_by": "openai",
"permission": [...]
}
Chat(聊天):
给定一个包含对话的消息列表,模型将返回一个响应
创建完成
POST https://api.openai.com/v1/completions
创建给定聊天对话的模型响应:
请求 body
model string Required
要使用的模型的ID。有关哪些模型适用于 Chat API 的详细信息,请参阅模型端点兼容性表。
messages array Required
以下是一个示例的 Python 代码,其中包含一个消息列表,表示到目前为止的对话:
role string Required
消息作者的角色。可以是以下之一:system(系统)、user(用户)、assistant(助手)或function(函数)。
content string Optional
消息的内容。除了助手消息中的函数调用外,所有消息都需要提供内容(content)。
name string Optional
消息作者的名称。如果角色(role)是 function,则需要提供名称(name),它应该是内容(content)中响应的函数的名称。名称可以包含 a-z、A-Z、0-9 和下划线,最大长度为 64 个字符。
function_call object Optional
由模型生成的应调用的函数的名称和参数。
functions array Optional
模型可能为其生成 JSON 输入的函数列表。
name string Required
要调用的函数的名称。名称必须由 a-z、A-Z、0-9 组成,可以包含下划线和破折号,最大长度为 64。
description string Optional
函数的描述,即函数的功能说明。
parameters object Optional
函数接受的参数,以 JSON Schema 对象的形式进行描述。请参阅指南中的示例,以及 JSON Schema 参考文档,了解有关格式的详细信息。
function_call string or object Optional
控制模型对函数调用的响应方式。“none” 表示模型不调用函数,而是直接响应给最终用户。“auto” 表示模型可以在最终用户和调用函数之间进行选择。通过 {“name”: “my_function”} 指定特定函数会强制模型调用该函数。当没有函数存在时,默认值为 “none”。当存在函数时,默认值为 “auto”。
temperature number Optional Defaults to 1
要使用的采样温度,取值范围为 0 到 2 之间。较高的值(例如 0.8)会使输出更加随机,而较低的值(例如 0.2)会使其更加集中和确定性。通常建议只修改其中一个参数,而不是同时修改两个参数(sampling temperature 和 top_p)。
top_p number Optional Defaults to 1
一种替代采用温度进行采样的方法是使用核心采样(nucleus sampling),其中模型考虑具有 top_p 概率质量的令牌的结果。因此,0.1 表示仅考虑组成前 10% 概率质量的令牌。通常建议只修改其中一个参数,而不是同时修改两个参数(核心采样和温度)。
n integer Optional Defaults to 1
为每个输入消息生成的聊天完成选项的数量。
Strea(流式传输) 布尔值 可选项,默认为 false
如果设置为 true,将发送部分消息增量,就像在 ChatGPT 中一样。令牌将作为数据的服务器推送事件在可用时发送,流式传输以 data: [DONE] 消息终止。stream 被设置为 True,表示启用了流式传输。
stop(停止标记) 字符串或数组 可选项,默认为 null
最多可以指定 4 个序列,当 API 生成这些序列后,将停止继续生成更多的令牌
max_tokens(最大令牌数) 整数 可选项,默认为 inf(无限)
聊天完成中要生成的最大令牌数。输入令牌和生成的令牌的总长度受模型上下文长度的限制。max_tokens 被设置为 100,表示在聊天完成中最多生成 100 个令牌。
presence_penalty 数字 可选项,默认为 0
取值范围为 -2.0 到 2.0 之间的数字。正值会根据新令牌是否在已生成的文本中出现来对其进行惩罚,增加模型谈论新话题的可能性。
frequency_penalty 数字 可选项,默认为 0
取值范围为 -2.0 到 2.0 之间的数字。正值会根据新令牌在已生成的文本中的频率对其进行惩罚,降低模型直接重复相同文本的可能性。
logit_bias 映射 可选项,默认为 null
修改特定令牌在生成结果中出现的可能性。接受一个 JSON 对象,将令牌(由其在分词器中的令牌 ID 指定)映射到 -100 到 100 之间的相关偏差值。在数学上,在采样之前,将偏差添加到模型生成的 logits 中。具体效果因模型而异,但 -1 到 1 之间的值应该会减少或增加选择的可能性;-100 或 100 这样的值应该会导致相关令牌的禁止或独占选择。
user 字符串 可选项
表示您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。
请求示例:
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{
"role": "system", "content": "You are a helpful assistant."},
{
"role": "user", "content": "Hello!"}
]
)
print(completion.choices[0].message)
参数:
{
"model": "gpt-3.5-turbo",
"messages": [{
"role": "system", "content": "You are a helpful assistant."}, {
"role": "user", "content": "Hello!"}]
}
响应:
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [