ChatGPT API 中文开发手册
👉 官方API参考手册原文链接 (opens new window)
# 简介 (Introduction)
您可以通过任何编程语言通过HTTP
请求的方式与API
交互,也可以通过官方提供的Python库、Node.js库或社区维护的库的方式。
使用安装Python库,运行下面的命令:
pip install openai
要安装正式的Node.js库,在Node.js项目目录中运行以下命令:
npm install openai
# 身份验证 (Authentication)
OpenAI API 使用 API 密钥进行身份验证。访问您的API 密钥 (opens new window)页面以检索您将在请求中使用的 API 密钥。
**请记住,您的 API 密钥是秘密的!**不要与他人共享或在任何客户端代码(浏览器、应用程序)中公开它。生产请求必须通过您自己的后端服务器进行路由,您的 API 密钥可以从环境变量或密钥管理服务中安全加载。
所有 API 请求都应在 HTTP 标头中包含您的 API 密钥,Authorization
如下所示:
Authorization: Bearer OPENAI_API_KEY
# 请求组织(Requesting organization)
对于属于多个组织的用户,您可以传递一个标头来指定哪个组织用于 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 可以在您的组织设置 (opens new window)页面上找到。
# 发出请求 (Making requests)
您可以将下面的命令粘贴到您的终端中以运行您的第一个 API 请求。确保替换$OPENAI_API_KEY
为您的秘密 API 密钥。
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
来生成多条消息选择。在这个例子中,gpt-3.5-turbo
更多的是用于传统的文本完成任务 (opens new window)。该模型还针对聊天应用程序 (opens new window)进行了优化。
# 模型 (Models)
# 模型列表 (List models)
列出并描述 API 中可用的各种模型。您可以参考模型 (opens new window)文档以了解可用的模型以及它们之间的区别。
GET https://api.openai.com/v1/models
列出当前可用的模型,并提供有关每个模型的基本信息,例如所有者和可用性。
请求示例
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY"
响应
{
"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"
}
# 检索模型 (Retrieve model)
检索模型实例,提供有关模型的基本信息,例如所有者和权限。
GET https://api.openai.com/v1/models/{model}
路径参数
参数名 | 类型 | 是否必输 | 描述 |
---|---|---|---|
model | string | 是 | 用于此请求的模型的 ID |
请求示例
curl https://api.openai.com/v1/models/text-davinci-003 \
-H "Authorization: Bearer $OPENAI_API_KEY"
响应
{
"id": "text-davinci-003",
"object": "model",
"owned_by": "openai",
"permission": [...]
}
# 完成 (Completions)
给定一个提示,该模型将返回一个或多个预测的完成,并且还可以返回每个位置的替代token的概率。
# 创建完成 (Create completion)
POST https://api.openai.com/v1/completions
为提供的提示和参数创建完成
请求体
参数名 | 类型 | 是否必输 | 默认值 | 描述 |
---|---|---|---|---|
model | string | 是 | 要使用的模型的 ID。您可以使用List models (opens new window) API 来查看所有可用模型,或查看我们的模型概述 (opens new window)以了解它们的描述。 | |
prompt | string 或 array | 否 | <|endoftext|> | 生成完成的提示,编码为字符串、字符串数组、token数组或token数组数组。请注意,<|endoftext|>是模型在训练期间看到的文档分隔符,因此如果未指定提示,模型将生成新文档的开头。 |
suffix | string | 否 | null | 插入文本完成后出现的后缀。 |
max_tokens | integer | 否 | 16 | 完成时生成的最大token (opens new window)数。您的提示加上的token计数max_tokens 不能超过模型的上下文长度。大多数模型的上下文长度为 2048 个token(最新模型除外,它支持 4096)。token翻译请看文章末尾 |
temperature | number | 否 | 1 | 使用什么采样温度,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。 我们通常建议改变这个或top_p 但不是两者。 |
top_p | number | 否 | 1 | 一种替代温度采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的token的结果。所以 0.1 意味着只考虑构成前 10% 概率质量的token。 我们通常建议改变这个或temperature 但不是两者。 |
n | integer | 否 | 1 | 为每个提示生成多少完成。 **注意:**因为这个参数会产生很多完成,它会很快消耗你的令牌配额。请谨慎使用并确保您对max_tokens 和进行了合理的设置stop |
stream | boolean | 否 | false | 是否回流部分进度。如果设置,token将在可用时作为仅数据服务器发送事件 (opens new window)发送,流由data: [DONE] 消息终止。 |
logprobs | integer | 否 | null | 在 logprobs 上包括对数概率最有可能的token,以及所选token。例如,如果 logprobs 为 5,则 API 将返回 5 个最有可能的token的列表。 API 将始终返回采样令牌的 logprob ,因此响应中最多可能有 logprobs+1 个元素。 logprobs 的最大值为 5。如果您需要更多,请通过我们的帮助中心 (opens new window)联系我们并描述您的用例。 |
echo | boolean | 否 | false | 除了完成之外,还回显提示 |
stop | string 或 array | 否 | null | API 将停止生成更多token的最多 4 个序列。 |
presence_penalty | number | 否 | 0 | -2.0 和 2.0 之间的数字。正值会根据到目前为止是否出现在文本中来惩罚新token,从而增加模型谈论新主题的可能性。 |
frequency_penalty | number | 否 | 0 | -2.0 和 2.0 之间的数字。正值会根据新token在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性。 |
best_of | integer | 否 | 1 | 在服务器端生成 best_of 完成,并返回“最佳”。 每个token具有最高对数概率的那个。无法流式传输结果。 当使用n ,best_of 控制候选完成的数量,n 指定返回多少 - best_of 必须大于 n 。 **注意:**因为这个参数会产生很多完成,它会很快消耗你的令牌配额。请谨慎使用并确保您对max_tokens 和进行了合理的设置stop 。 |
logit_bias | map | 否 | null | 修改指定token出现在完成中的可能性。接受一个 json 对象,该对象将token(由 GPT 分词器中的tokenID 指定)映射到从 -100 到 100 的相关偏差值。您可以使用此token生成器工具 (opens new window)(适用于 GPT-2 和 GPT-3)将文本转换为token ID。从数学上讲,偏差会在采样之前添加到模型生成的对数中。确切的效果因模型而异,但 -1 和 1 之间的值应该会减少或增加选择的可能性;像 -100 或 100 这样的值应该导致相关token的禁止或独占选择。例如,您可以传递 {“50256”: -100} 以防止生成 <|endoftext|> |
user | string | 否 | 代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。 了解更多 (opens new window)。 |
请求示例
curl https://api.openai.com/v1/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "text-davinci-003",
"prompt": "Say this is a test",
"max_tokens": 7,
"temperature": 0
}'
参数
{
"model": "text-davinci-003",
"prompt": "Say this is a test",
"max_tokens": 7,
"temperature": 0,
"top_p": 1,
"n": 1,
"stream": false,
"logprobs": null,
"stop": "\n"
}
响应
{
"id": "cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7",
"object": "text_completion",
"created": 1589478378,
"model": "text-davinci-003",
"choices": [
{
"text": "\n\nThis is indeed a test",
"index": 0,
"logprobs": null,
"finish_reason": "length"
}
],
"usage": {
"prompt_tokens": 5,
"completion_tokens": 7,
"total_tokens": 12
}
}
# 聊天 (Chat)
给定聊天对话,模型将返回聊天完成响应。
# 创建 (Create chat completion) Beta
POST https://api.openai.com/v1/chat/completions
为聊天消息创建完成
请求体
参数名 | 类型 | 是否必输 | 默认值 | 描述 |
---|---|---|---|---|
model | string | 是 | 要使用的模型的 ID。有关哪些模型适用于聊天 API 的详细信息,请参阅模型端点兼容性表 (opens new window)。 | |
messages | array | 是 | 以聊天格式 (opens new window)生成聊天完成的消息。 | |
temperature | number | 否 | 1 | 使用什么采样温度,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。 我们通常建议改变这个或top_p 但不是两者。 |
top_p | number | 否 | 1 | 一种替代温度采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的token的结果。所以 0.1 意味着只考虑构成前 10% 概率质量的token。 我们通常建议改变这个或temperature 但不是两者。 |
n | integer | 否 | 1 | 为每个输入消息生成多少个聊天完成选项。 |
stream | boolean | 否 | false | 如果设置,将发送部分消息增量,就像在 ChatGPT 中一样。令牌将在可用时作为纯数据服务器发送事件发送,流由data:[DONE] 消息终止。有关示例代码,请参阅 OpenAI Cookbook (opens new window)。 |
stop | string 或 array | 否 | null | API 将停止生成更多token的最多 4 个序列。 |
max_tokens | integer | 否 | inf | 聊天完成时生成的最大token数。 输入token和生成token的总长度受模型上下文长度的限制。 |
presence_penalty | number | 否 | 0 | -2.0 和 2.0 之间的数字。正值会根据到目前为止是否出现在文本中来惩罚新token,从而增加模型谈论新主题的可能性。 |
frequency_penalty | number | 否 | 0 | -2.0 和 2.0 之间的数字。正值会根据新token在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性。 |
logit_bias | map | 否 | null | 修改指定token出现在完成中的可能性。接受一个 json 对象,该对象将token(由 GPT 分词器中的tokenID 指定)映射到从 -100 到 100 的相关偏差值。您可以使用此token生成器工具 (opens new window)(适用于 GPT-2 和 GPT-3)将文本转换为token ID。从数学上讲,偏差会在采样之前添加到模型生成的对数中。确切的效果因模型而异,但 -1 和 1 之间的值应该会减少或增加选择的可能性;像 -100 或 100 这样的值应该导致相关token的禁止或独占选择。 |
user | string | 否 | 代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。 了解更多 (opens new window)。 |
请求示例
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": "Hello!"}]
}'
参数
{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Hello!"}]
}
响应
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "\n\nHello there, how may I assist you today?",
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
# 编辑 (Edits)
给定提示和指令,模型将返回提示的编辑版本。
# 创建编辑 (Create edit)
POST https://api.openai.com/v1/edits
为提供的输入、指令和参数创建新的编辑。
请求体
参数名 | 类型 | 是否必输 | 默认值 | 描述 |
---|---|---|---|---|
model | string | 是 | 要使用的模型的 ID。您可以将text-davinci-edit-001 或code-davinci-edit-001 模型与此端点一起使用。 | |
input | string | 否 | 空字符串 | 用作编辑起点的输入文本。 |
instruction | string | 是 | 告诉模型如何编辑提示的指令。 | |
n | integer | 否 | 1 | 为输入和指令生成多少编辑。 |
temperature | number | 否 | 1 | 使用什么采样温度,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。 我们通常建议改变这个或top_p 但不是两者。 |
top_p | number | 否 | 1 | 一种替代温度采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的token的结果。所以 0.1 意味着只考虑构成前 10% 概率质量的token。 我们通常建议改变这个或temperature 但不是两者。 |
请求示例
curl https://api.openai.com/v1/edits \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "text-davinci-edit-001",
"input": "What day of the wek is it?",
"instruction": "Fix the spelling mistakes"
}'
参数
{
"model": "text-davinci-edit-001",
"input": "What day of the wek is it?",
"instruction": "Fix the spelling mistakes",
}
响应
{
"object": "edit",
"created": 1589478378,
"choices": [
{
"text": "What day of the week is it?",
"index": 0,
}
],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 32,
"total_tokens": 57
}
}
# 图片 (Images)
给定提示和/或输入图像,模型将生成新图像。
# 创建图像 (Create image) Beta
POST https://api.openai.com/v1/images/generations
根据提示创建图像。
请求体
参数名 | 类型 | 是否必输 | 默认值 | 描述 |
---|---|---|---|---|
prompt | string | 是 | 所需图像的文本描述。最大长度为 1000 个字符。 | |
n | integer | 否 | 1 | 要生成的图像数。必须介于 1 和 10 之间。 |
size | string | 1024x1024 | 生成图像的大小。必须是256x256 512x512 1024x1024 之一 | |
response_format | string | 否 | url | 生成的图像返回的格式。必须是 url 或b64_json |
user | number | 否 | 1 | 代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。 了解更多 (opens new window)。 |
请求示例
curl https://api.openai.com/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"prompt": "A cute baby sea otter",
"n": 2,
"size": "1024x1024"
}'
参数
{
"prompt": "A cute baby sea otter",
"n": 2,
"size": "1024x1024"
}
响应
{
"created": 1589478378,
"data": [
{
"url": "https://..."
},
{
"url": "https://..."
}
]
}
# 创建图像编辑 (Create image edit) Beta
POST https://api.openai.com/v1/images/edits
在给定原始图像和提示的情况下创建编辑或扩展图像。
请求体
参数名 | 类型 | 是否必输 | 默认值 | 描述 |
---|---|---|---|---|
image | string | 是 | 要编辑的图像。必须是有效的 PNG 文件,小于 4MB,并且是方形的。如果未提供遮罩,图像必须具有透明度,将用作遮罩。 | |
mask | string | 否 | 一个附加图像,其完全透明区域(例如,alpha 为零)指示应编辑image 的位置。 必须是有效的 PNG 文件,小于 4MB,并且具有与image 相同的尺寸。 | |
prompt | string | 是 | 所需图像的文本描述。最大长度为 1000 个字符。 | |
n | integer | 否 | 1 | 要生成的图像数。必须介于 1 和 10 之间。 |
size | string | 否 | 1 | 生成图像的大小。必须是256x256 512x512 1024x1024 之一 |
response_format | string | url | 生成的图像返回的格式。必须是 或url b64_json 之一 | |
user | string | 代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。 了解更多 (opens new window)。 |
请求示例
curl https://api.openai.com/v1/images/edits \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F image="@otter.png" \
-F mask="@mask.png" \
-F prompt="A cute baby sea otter wearing a beret" \
-F n=2 \
-F size="1024x1024"
响应
{
"created": 1589478378,
"data": [
{
"url": "https://..."
},
{
"url": "https://..."
}
]
}
# 创建图像变体 (Create image variation) Beta
POST https://api.openai.com/v1/images/variations
创建给定图像的变体。
请求体
image | string | 是 | 用作变体基础的图像。必须是有效的 PNG 文件,小于 4MB,并且是方形的。 | |
---|---|---|---|---|
n | integer | 否 | 1 | 要生成的图像数。必须介于 1 和 10 之间。 |
size | string | 否 | 1024x1024 | 生成图像的大小。必须是256x256 512x512 1024x1024 之一 |
response_format | string | 否 | url | 生成的图像返回的格式。必须是 或url b64_json 之一 |
user | string | 否 | 代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。 了解更多 (opens new window)。 |
请求示例
curl https://api.openai.com/v1/images/variations \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F image="@otter.png" \
-F n=2 \
-F size="1024x1024"
响应
{
"created": 1589478378,
"data": [
{
"url": "https://..."
},
{
"url": "https://..."
}
]
}
# 嵌入 (Embeddings)
获取给定输入的矢量表示,机器学习模型和算法可以轻松使用该表示。
# 创建嵌入 (Create embeddings)
POST https://api.openai.com/v1/embeddings
创建表示输入文本的嵌入向量。
请求体
参数名 | 类型 | 是否必输 | 默认值 | 描述 |
---|---|---|---|---|
model | string | 是 | 要使用的模型的 ID。您可以使用List models (opens new window) API 来查看所有可用模型,或查看我们的模型概述 (opens new window)以了解它们的描述。 | |
input | string or array | 是 | 1 | 输入文本以获取嵌入,编码为字符串或token数组。要在单个请求中获取多个输入的嵌入,请传递一个字符串数组或令牌数组数组。每个输入的长度不得超过 8192 个token。 |
user | string | 否 | 1024x1024 | 代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。了解更多 (opens new window)。 |
请求示例
curl https://api.openai.com/v1/embeddings \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": "The food was delicious and the waiter...",
"model": "text-embedding-ada-002"
}'
参数
{
"model": "text-embedding-ada-002",
"input": "The food was delicious and the waiter..."
}
响应
{
"object": "list",
"data": [
{
"object": "embedding",
"embedding": [
0.0023064255,
-0.009327292,
.... (1536 floats total for ada-002)
-0.0028842222,
],
"index": 0
}
],
"model": "text-embedding-ada-002",
"usage": {
"prompt_tokens": 8,
"total_tokens": 8
}
}
# 音频(Audio)
了解如何将音频转换为文本。
# 创建转录 (Create transcription) Beta
POST https://api.openai.com/v1/audio/transcriptions
将音频转录为输入语言。
请求体
参数名 | 类型 | 是否必输 | 默认值 | 描述 |
---|---|---|---|---|
file | string | 是 | 要转录的音频文件,采用以下格式之一:mp3、mp4、mpeg、mpga、m4a、wav 或 webm。 | |
model | string | 是 | 要使用的模型的 ID。仅whisper-1 当前可用。 | |
prompt | string | 否 | 1024x1024 | 可选文本,用于指导模型的风格或继续之前的音频片段。提示应与音频语言相匹配。 |
response_format | string | 否 | json | 转录输出的格式,采用以下选项之一:json、text、srt、verbose_json 或 vtt。 |
temperature | number | 否 | 0 | 采样温度,介于 0 和 1 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。如果设置为 0,模型将使用对数概率 (opens new window)自动升高温度,直到达到特定阈值。 |
language | string | 否 | 输入音频的语言。以ISO-639-1 (opens new window)格式提供输入语言将提高准确性和延迟。 |
请求示例
curl https://api.openai.com/v1/audio/transcriptions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: multipart/form-data" \
-F file="@/path/to/file/audio.mp3" \
-F model="whisper-1"
参数
{
"file": "audio.mp3",
"model": "whisper-1"
}
响应
{
"text": "Imagine the wildest idea that you've ever had, and you're curious about how it might scale to something that's a 100, a 1,000 times bigger. This is a place where you can get to do that."
}
# 创建翻译 (Create transcription) Beta
POST https://api.openai.com/v1/audio/translations
将音频翻译成英文。
参数名 | 类型 | 是否必输 | 默认值 | 描述 |
---|---|---|---|---|
file | string | 是 | 要翻译的音频文件,采用以下格式之一:mp3、mp4、mpeg、mpga、m4a、wav 或 webm。 | |
model | string | 是 | 要使用的模型的 ID。仅whisper-1 当前可用。 | |
prompt | string | 否 | 1024x1024 | 可选文本,用于指导模型的风格或继续之前的音频片段。提示应为英文 |
response_format | string | 否 | json | 转录输出的格式,采用以下选项之一:json、text、srt、verbose_json 或 vtt。 |
temperature | number | 否 | 0 | 采样温度,介于 0 和 1 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。如果设置为 0,模型将使用对数概率 (opens new window)自动升高温度,直到达到特定阈值。 |
请求示例
curl https://api.openai.com/v1/audio/translations \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: multipart/form-data" \
-F file="@/path/to/file/german.m4a" \
-F model="whisper-1"
参数
{
"file": "german.m4a",
"model": "whisper-1"
}
响应
{
"text": "Hello, my name is Wolfgang and I come from Germany. Where are you heading today?"
}
# 文件 (Files)
文件用于上传可与微调等 (opens new window)功能一起使用的文档。
# 文件列表 (List files)
GET https://api.openai.com/v1/files
返回属于用户组织的文件列表。
请求示例
curl https://api.openai.com/v1/files \
-H "Authorization: Bearer $OPENAI_API_KEY"
响应
{
"data": [
{
"id": "file-ccdDZrC3iZVNiQVeEA6Z66wf",
"object": "file",
"bytes": 175,
"created_at": 1613677385,
"filename": "train.jsonl",
"purpose": "search"
},
{
"id": "file-XjGxS3KTG0uNmNOK362iJua3",
"object": "file",
"bytes": 140,
"created_at": 1613779121,
"filename": "puppy.jsonl",
"purpose": "search"
}
],
"object": "list"
}
# 上传文件 (Upload file)
POST https://api.openai.com/v1/files
上传包含要跨各种端点/功能使用的文档的文件。目前,一个组织上传的所有文件的大小最大可达 1 GB。如果您需要增加存储限制,请联系我们。
请求体
参数名 | 类型 | 是否必输 | 默认值 | 描述 |
---|---|---|---|---|
file | string | 是 | 要上传的JSON 行 (opens new window)文件的名称。 如果purpose 设置为“fine-tune ”,则每一行都是一个 JSON 记录,其中包含代表您的训练示例 (opens new window)的“prompt”和“completion”字段。 | |
purpose | string | 是 | 上传文件的预期目的。 使用“fine-tune ”进行微调 (opens new window)。这使我们能够验证上传文件的格式。 |
请求示例
curl https://api.openai.com/v1/files \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F purpose="fine-tune" \
-F file="@mydata.jsonl"
响应
{
"id": "file-XjGxS3KTG0uNmNOK362iJua3",
"object": "file",
"bytes": 140,
"created_at": 1613779121,
"filename": "mydata.jsonl",
"purpose": "fine-tune"
}
# 删除文件 (Delete file)
DELETE https://api.openai.com/v1/files/{file_id}
删除文件。
路径参数
参数名 | 类型 | 是否必输 | 描述 |
---|---|---|---|
file_id | string | 是 | 用于此请求的文件的 ID |
请求示例
curl https://api.openai.com/v1/files/file-XjGxS3KTG0uNmNOK362iJua3 \
-X DELETE \
-H "Authorization: Bearer $OPENAI_API_KEY"
响应
{
"id": "file-XjGxS3KTG0uNmNOK362iJua3",
"object": "file",
"deleted": true
}
# 检索文件 (Retrieve file)
GET https://api.openai.com/v1/files/{file_id}
返回有关特定文件的信息。
路径参数
参数名 | 类型 | 是否必输 | 描述 |
---|---|---|---|
file_id | string | 是 | 用于此请求的文件的 ID |
请求示例
curl https://api.openai.com/v1/files/file-XjGxS3KTG0uNmNOK362iJua3 \
-H "Authorization: Bearer $OPENAI_API_KEY"
响应
{
"id": "file-XjGxS3KTG0uNmNOK362iJua3",
"object": "file",
"bytes": 140,
"created_at": 1613779657,
"filename": "mydata.jsonl",
"purpose": "fine-tune"
}
# 检索文件内容 (Retrieve file content)
GET https://api.openai.com/v1/files/{file_id}/content
返回指定文件的内容
路径参数
参数名 | 类型 | 是否必输 | 描述 |
---|---|---|---|
file_id | string | 是 | 用于此请求的文件的 ID |
请求示例
curl https://api.openai.com/v1/files/file-XjGxS3KTG0uNmNOK362iJua3/content \
-H "Authorization: Bearer $OPENAI_API_KEY" > file.jsonl
# 微调 (Fine-tunes)
管理微调作业以根据您的特定训练数据定制模型。
# 创建微调 (Create fine-tune)
POST https://api.openai.com/v1/fine-tunes
创建一个从给定数据集微调指定模型的作业。
响应包括排队作业的详细信息,包括作业状态和完成后微调模型的名称。
了解有关微调的更多信息 (opens new window)
请求体
参数名 | 类型 | 是否必输 | 默认值 | 描述 |
---|---|---|---|---|
training_file | string | 是 | 包含训练数据的上传文件的 ID。 有关如何上传文件,请参阅上传文件 (opens new window) 您的数据集必须格式化为 JSONL 文件,其中每个训练示例都是一个带有键“prompt”和“completion”的 JSON 对象。此外,您上传文件时purpose 参数必须为fine-tune 。 有关详细信息,请参阅微调指南 (opens new window) | |
validation_file | string | 否 | 包含验证数据的上传文件的 ID。 如果您提供此文件,该数据将用于在微调期间定期生成验证指标。这些指标可以在微调结果文件 (opens new window)中查看。您的训练和验证数据应该是互斥的。 您的数据集必须格式化为 JSONL 文件,其中每个训练示例都是一个带有键“prompt”和“completion”的 JSON 对象。此外,您上传文件时purpose 参数必须为fine-tune 。 有关详细信息,请参阅微调指南 (opens new window) | |
model | string | 否 | curie | 要微调的基本模型的名称。您可以选择“ada”、“babbage”、“curie”、“davinci”或 2022-04-21 之后创建的微调模型之一。要了解有关这些模型的更多信息,请参阅 模型 (opens new window)文档。 |
n_epochs | integer | 否 | 4 | 训练模型的时期数。一个时期指的是训练数据集的一个完整周期。 |
batch_size | integer | 否 | null | 用于训练的批量大小。批量大小是用于训练单个前向和后向传递的训练示例数。 默认情况下,批量大小将动态配置为训练集中示例数量的 0.2%,上限为 256 - 通常,我们发现较大的批量大小往往更适合较大的数据集。 |
learning_rate_multiplier | number | 否 | null | 用于训练的学习率乘数。微调学习率是用于预训练的原始学习率乘以该值。 默认情况下,学习率乘数是 0.05、0.1 或 0.2,具体取决于batch_size (较大的学习率往往在较大的批量大小下表现更好)。我们建议使用 0.02 到 0.2 范围内的值进行试验,以查看产生最佳结果的值。 |
prompt_loss_weight | number | 否 | 0.01 | 用于提示token损失的权重。这控制了模型尝试学习生成提示的程度(与权重始终为 1.0 的完成相比),并且可以在完成(completions) 较短时为训练增加稳定效果。 如果提示非常长(相对于完成),则减少此权重以避免过度优先学习提示可能是有意义的。 |
compute_classification_metrics | boolean | 否 | false | 如果设置,我们将在每个时期结束时使用验证集计算特定于分类的指标,例如准确性和 F-1 分数。可以在结果文件 (opens new window)中查看这些指标。 为了计算分类指标,您必须提供一个 validation_file . 此外,您必须指定classification_n_classes 多类分类或 classification_positive_class 二元分类。 |
classification_n_classes | integer | 否 | null | 分类任务中的类数。 多类分类需要此参数。 |
classification_positive_class | string | 否 | null | 二元分类中的正类。 在进行二元分类时,需要此参数来生成精度、召回率和 F1 指标。 |
classification_betas | array | 否 | null | 如果提供,我们将计算指定 beta 值的 F-beta 分数。F-beta 分数是 F-1 分数的推广。这仅用于二元分类。 当 beta 为 1(即 F-1 分数)时,精确率和召回率被赋予相同的权重。Beta 分数越大,召回率越高,精确率越低。Beta 分数越小,精确度越重要,召回率越低。 |
suffix | string | 否 | null | 最多 40 个字符的字符串,将添加到您的微调模型名称中。 例如,suffix 为“custom-model-name”的,生成名字类似这样ada:ft-your-org:custom-model-name-2022-02-15-04-21-04 |
请求示例
curl https://api.openai.com/v1/fine-tunes \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"training_file": "file-XGinujblHPwGLSztz8cPS8XY"
}'
响应
{
"id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
"object": "fine-tune",
"model": "curie",
"created_at": 1614807352,
"events": [
{
"object": "fine-tune-event",
"created_at": 1614807352,
"level": "info",
"message": "Job enqueued. Waiting for jobs ahead to complete. Queue number: 0."
}
],
"fine_tuned_model": null,
"hyperparams": {
"batch_size": 4,
"learning_rate_multiplier": 0.1,
"n_epochs": 4,
"prompt_loss_weight": 0.1,
},
"organization_id": "org-...",
"result_files": [],
"status": "pending",
"validation_files": [],
"training_files": [
{
"id": "file-XGinujblHPwGLSztz8cPS8XY",
"object": "file",
"bytes": 1547276,
"created_at": 1610062281,
"filename": "my-data-train.jsonl",
"purpose": "fine-tune-train"
}
],
"updated_at": 1614807352,
}
# 微调列表 (List fine-tunes)
GET https://api.openai.com/v1/fine-tunes
列出您的组织的微调作业
请求示例
curl https://api.openai.com/v1/fine-tunes \
-H "Authorization: Bearer $OPENAI_API_KEY"
响应
{
"object": "list",
"data": [
{
"id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
"object": "fine-tune",
"model": "curie",
"created_at": 1614807352,
"fine_tuned_model": null,
"hyperparams": { ... },
"organization_id": "org-...",
"result_files": [],
"status": "pending",
"validation_files": [],
"training_files": [ { ... } ],
"updated_at": 1614807352,
},
{ ... },
{ ... }
]
}
# 微调检索 (Retrieve fine-tune)
GET https://api.openai.com/v1/fine-tunes/{fine_tune_id}
获取有关微调作业的信息。
了解有关微调的更多信息 (opens new window)
路径参数
参数名 | 类型 | 是否必输 | 描述 |
---|---|---|---|
fine_tune_id | string | 是 | 微调作业的ID |
请求示例
curl https://api.openai.com/v1/fine-tunes/ft-AF1WoRqd3aJAHsqc9NY7iL8F \
-H "Authorization: Bearer $OPENAI_API_KEY"
响应
{
"id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
"object": "fine-tune",
"model": "curie",
"created_at": 1614807352,
"events": [
{
"object": "fine-tune-event",
"created_at": 1614807352,
"level": "info",
"message": "Job enqueued. Waiting for jobs ahead to complete. Queue number: 0."
},
{
"object": "fine-tune-event",
"created_at": 1614807356,
"level": "info",
"message": "Job started."
},
{
"object": "fine-tune-event",
"created_at": 1614807861,
"level": "info",
"message": "Uploaded snapshot: curie:ft-acmeco-2021-03-03-21-44-20."
},
{
"object": "fine-tune-event",
"created_at": 1614807864,
"level": "info",
"message": "Uploaded result files: file-QQm6ZpqdNwAaVC3aSz5sWwLT."
},
{
"object": "fine-tune-event",
"created_at": 1614807864,
"level": "info",
"message": "Job succeeded."
}
],
"fine_tuned_model": "curie:ft-acmeco-2021-03-03-21-44-20",
"hyperparams": {
"batch_size": 4,
"learning_rate_multiplier": 0.1,
"n_epochs": 4,
"prompt_loss_weight": 0.1,
},
"organization_id": "org-...",
"result_files": [
{
"id": "file-QQm6ZpqdNwAaVC3aSz5sWwLT",
"object": "file",
"bytes": 81509,
"created_at": 1614807863,
"filename": "compiled_results.csv",
"purpose": "fine-tune-results"
}
],
"status": "succeeded",
"validation_files": [],
"training_files": [
{
"id": "file-XGinujblHPwGLSztz8cPS8XY",
"object": "file",
"bytes": 1547276,
"created_at": 1610062281,
"filename": "my-data-train.jsonl",
"purpose": "fine-tune-train"
}
],
"updated_at": 1614807865,
}
# 取消微调 (Cancel fine-tune)
POST https://api.openai.com/v1/fine-tunes/{fine_tune_id}/cancel
立即取消微调作业
路径参数
参数名 | 类型 | 是否必输 | 描述 |
---|---|---|---|
fine_tune_id | string | 是 | 要取消的微调作业的 ID |
请求示例
curl https://api.openai.com/v1/fine-tunes/ft-AF1WoRqd3aJAHsqc9NY7iL8F/cancel \
-H "Authorization: Bearer $OPENAI_API_KEY"
响应
{
"id": "ft-xhrpBbvVUzYGo8oUO1FY4nI7",
"object": "fine-tune",
"model": "curie",
"created_at": 1614807770,
"events": [ { ... } ],
"fine_tuned_model": null,
"hyperparams": { ... },
"organization_id": "org-...",
"result_files": [],
"status": "cancelled",
"validation_files": [],
"training_files": [
{
"id": "file-XGinujblHPwGLSztz8cPS8XY",
"object": "file",
"bytes": 1547276,
"created_at": 1610062281,
"filename": "my-data-train.jsonl",
"purpose": "fine-tune-train"
}
],
"updated_at": 1614807789,
}
# 列出微调事件 (List fine-tune events)
GET https://api.openai.com/v1/fine-tunes/{fine_tune_id}/events
获取微调作业细粒度的状态更新
路径参数
参数名 | 类型 | 是否必输 | 描述 |
---|---|---|---|
fine_tune_id | string | 是 | 要为其获取事件的微调作业的 ID。 |
查询参数
参数名 | 类型 | 是否必输 | 默认值 | 描述 |
---|---|---|---|---|
stream | boolean | false | 是否为微调作业流式传输事件。 如果设置为 true,事件将在可用时作为纯数据服务器发送事件发送。当作业完成(成功、取消或失败)时,流将会伴随着data: [DONE] 消息终止。 如果设置为 false,则只返回到目前为止生成的事件。 |
请求示例
curl https://api.openai.com/v1/fine-tunes/ft-AF1WoRqd3aJAHsqc9NY7iL8F/events \
-H "Authorization: Bearer $OPENAI_API_KEY"
响应
{
"object": "list",
"data": [
{
"object": "fine-tune-event",
"created_at": 1614807352,
"level": "info",
"message": "Job enqueued. Waiting for jobs ahead to complete. Queue number: 0."
},
{
"object": "fine-tune-event",
"created_at": 1614807356,
"level": "info",
"message": "Job started."
},
{
"object": "fine-tune-event",
"created_at": 1614807861,
"level": "info",
"message": "Uploaded snapshot: curie:ft-acmeco-2021-03-03-21-44-20."
},
{
"object": "fine-tune-event",
"created_at": 1614807864,
"level": "info",
"message": "Uploaded result files: file-QQm6ZpqdNwAaVC3aSz5sWwLT."
},
{
"object": "fine-tune-event",
"created_at": 1614807864,
"level": "info",
"message": "Job succeeded."
}
]
}
# 删除微调模型 (Delete fine-tune model)
DELETE https://api.openai.com/v1/models/{model}
删除微调模型。您必须在您的组织中拥有所有者角色。
路径参数
参数名 | 类型 | 是否必输 | 描述 |
---|---|---|---|
model | string | 是 | 要删除的模型 |
请求示例
curl https://api.openai.com/v1/models/curie:ft-acmeco-2021-03-03-21-44-20 \
-X DELETE \
-H "Authorization: Bearer $OPENAI_API_KEY"
响应
{
"id": "curie:ft-acmeco-2021-03-03-21-44-20",
"object": "model",
"deleted": true
}
# 适度 (Moderations)
给定输入文本,如果模型将其分类为违反 OpenAI 的内容策略,则输出。
# 创建适度 (Create moderation)
POST https://api.openai.com/v1/moderations
分类文本是否违反 OpenAI 的内容政策
请求体
参数名 | 类型 | 是否必输 | 默认值 | 描述 |
---|---|---|---|---|
input | sstring 或 array | 是 | 要分类的输入文本 | |
model | string | 否 | text-moderation-latest | 有两种内容审核模型可用:text-moderation-stable 和text-moderation-latest 默认情况下text-moderation-latest 会随着时间的推移自动升级。这可确保您始终使用我们最准确的模型。如果您使用text-moderation-stable ,我们将在更新模型之前提供提前通知。text-moderation-stable 的准确性略低于text-moderation-latest 。 |
请求示例
curl https://api.openai.com/v1/moderations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"input": "I want to kill them."
}'
参数
{
"input": "I want to kill them."
}
分类文本是否违反 OpenAI 的内容政策
响应
{
"id": "modr-5MWoLO",
"model": "text-moderation-001",
"results": [
{
"categories": {
"hate": false,
"hate/threatening": true,
"self-harm": false,
"sexual": false,
"sexual/minors": false,
"violence": true,
"violence/graphic": false
},
"category_scores": {
"hate": 0.22714105248451233,
"hate/threatening": 0.4132447838783264,
"self-harm": 0.005232391878962517,
"sexual": 0.01407341007143259,
"sexual/minors": 0.0038522258400917053,
"violence": 0.9223177433013916,
"violence/graphic": 0.036865197122097015
},
"flagged": true
}
]
}
categories
中各个字段的含义如下
类别 | 描述 |
---|---|
hate | 基于种族、性别、民族、宗教、国籍、性取向、残疾状况或种姓表达、煽动或促进仇恨的内容。 |
hate/threatening | 仇恨内容还包括对目标群体的暴力或严重伤害。 |
self-harm | 提倡、鼓励或描述自残行为(例如自杀、割伤和饮食失调)的内容。 |
sexual | 意在引起性兴奋的内容,例如对性活动的描述,或宣传性服务(不包括性教育和健康)的内容。 |
sexual/minors | 包含 18 岁以下个人的色情内容。 |
violence | 宣扬或美化暴力或颂扬他人的痛苦或屈辱的内容。 |
violence/graphic | 以极端的画面细节描绘死亡、暴力或严重身体伤害的暴力内容。 |
# (Engines)
# (List engines) Deprecated
GET https://api.openai.com/v1/engines
# (Retrieve engine) Deprecated
GET https://api.openai.com/v1/engines/{engine_id}
# 参数详情 (Parameter details)
# 频率和存在惩罚 (Frequency and presence penalties)
Completions API (opens new window)中发现的频率和存在惩罚可用于降低对令牌重复序列进行采样的可能性。他们通过添加贡献直接修改 logits(非标准化对数概率)来工作。
mu[j] -> mu[j] - c[j] * alpha_frequency - float(c[j] > 0) * alpha_presence
在该情况下:
mu[j]
是第 j 个token的对数c[j]
是在当前位置之前对该令牌进行采样的频率- 如果
c[j] > 0
,float(c[j] > 0)
为1,否则为 0 alpha_frequency
是频率惩罚系数alpha_presence
是存在惩罚系数
正如我们所见,存在惩罚是一种一次性的加性贡献,适用于所有至少被采样过一次的token,而频率惩罚是与特定token被采样的频率成正比的贡献。
如果目标只是稍微减少重复样本,则惩罚系数的合理值约为 0.1 到 1。如果目标是强烈抑制重复,那么可以将系数增加到 2,但这会显着降低样本质量。负值可用于增加重复的可能性。
openaidoc.kaimingwan.com openai.xiniushu.com