OpenAI API 接口说明
一、OpenAI API Models
列出并描述 API 中可用的各种模型。您可以参考模型文档以了解可用的模型以及它们之间的区别。
列出模型
列出当前可用的模型,并提供有关每个模型的基本信息,例如所有者和可用性。
示例请求:
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.list()
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.listModels();
|
响应
{
"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"
}
---
检索模型
检索模型实例,提供有关模型的基本信息,例如所有者和权限。
路径参数
字段 | 类型 | 是否可选 |
---|---|---|
model | string | 必须 |
示例请求
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/models/ada \
-H "Authorization: Bearer $OPENAI_API_KEY"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.retrieve("ada")
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.retrieveModel("ada");
|
响应
{
"id": "ada",
"object": "model",
"owned_by": "openai",
"permission": [...]
}
二、OpenAI API Completions
给定一个提示,该模型将返回一个或多个预测的 Completions,并且还可以返回每个位置的替代标记的概率。
---
Create completion
为提供的提示和参数创建 completion
Request body
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
model | string | 必须 | 要使用的模型的 ID。您可以使用 List models API 来查看所有可用模型。 |
prompt | string or array | 可选 默认为 < | endoftext |
suffix | string | 可选 默认为 null | 插入文本完成后出现的后缀。 |
max_tokens | integer | 可选 默认为 16 | 完成时生成的最大令牌数。您的提示的令牌计数加上 max_tokens 不能超过模型的上下文长度。大多数模型的上下文长度为 2048 个标记(最新模型除外,它支持 4096)。 |
temperature | number | 可选 默认为 1 | 使用什么采样 temperature,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。 我们通常建议改变这个或 top_p 但不是两者都改变。 |
top_p | number | 可选 默认为 1 | 一种替代 temperature 采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的标记的结果。所以 0.1 意味着只考虑构成前 10% 概率质量的标记。 我们通常建议更改此值或 temperature,但不要同时更改两者。 |
n | integer | 可选 默认为 1 | 为每个提示生成多少完成。 注意:因为这个参数会产生很多完成,它会很快消耗你的令牌配额。请谨慎使用并确保您对 max_tokens 和停止进行了合理的设置。 |
stream | boolean | 可选 默认为 false | 是否回流部分进度。如果设置,令牌将在可用时作为纯数据服务器发送事件发送,流由数据终止:[DONE] 消息。 |
logprobs | integer | 可选 默认为 null | 在 logprobs 上包括对数概率最有可能的标记,以及所选标记。例如,如果 logprobs 为 5,则 API 将返回 5 个最有可能的标记的列表。 API 将始终返回采样令牌的 logprob,因此响应中最多可能有 logprobs+1 个元素。 logprobs 的最大值为 5。如果您需要更多,请通过我们的帮助中心联系我们并描述您的用例。 |
echo | boolean | 可选 默认为 false | 除了完成之外回显提示 |
stop | string or array | 可选 默认为 null | API 将停止生成更多令牌的最多 4 个序列。返回的文本将不包含停止序列。 |
presence_penalty | number | 可选 默认为 0 | -2.0 和 2.0 之间的数字。正值会根据到目前为止是否出现在文本中来惩罚新标记,从而增加模型谈论新主题的可能性。 |
frequency_penalty | number | 可选 默认为 0 | -2.0 和 2.0 之间的数字。正值会根据新标记在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性。 |
best_of | integer | 可选 默认为 1 | 在服务器端生成 best_of 完成并返回“最佳”(每个标记具有最高对数概率的那个)。无法流式传输结果。 当与 n 一起使用时,best_of 控制候选完成的数量,n 指定返回多少 - best_of 必须大于 n。 注意:因为这个参数会产生很多完成,它会很快消耗你的令牌配额。请谨慎使用并确保您对 max_tokens 和停止进行了合理的设置。 |
logit_bias | map | 可选 默认为 null | 修改指定标记出现在完成中的可能性。接受一个 json 对象,该对象将标记(由 GPT 标记器中的标记 ID 指定)映射到从 -100 到 100 的相关偏差值。您可以使用此标记器工具(适用于 GPT-2 和 GPT-3)来转换文本到令牌 ID。从数学上讲,偏差会在采样之前添加到模型生成的对数中。确切的效果因模型而异,但 -1 和 1 之间的值应该会减少或增加选择的可能性;像 -100 或 100 这样的值应该导致相关令牌的禁止或独占选择。例如,您可以传递 {"50256": -100} 以防止生成 < |
user | string | 可选 | 代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。 |
示例请求
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "ada",
"prompt": "Say this is a test",
"max_tokens": 7,
"temperature": 0
}'
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Completion.create(
model="ada",
prompt="Say this is a test",
max_tokens=7,
temperature=0
)
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createCompletion({
model: "ada",
prompt: "Say this is a test",
max_tokens: 7,
temperature: 0,
});
|
参数
{
"model": "ada",
"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": "ada",
"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
}
}
三、OpenAI API Chat
给定聊天对话,模型将返回聊天完成响应。
---
创建 chat completion
为聊天消息创建 completion
Request body
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
model | string | 必须 | 要使用的模型的 ID。 |
messages | array | 必须 | 以聊天格式生成聊天完成的消息。 |
temperature | number | 可选 默认为 1 | 使用什么采样 temperature,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。我们通常建议改变这个或 top_p 但不是两者都改变。 |
top_p | number | 可选 默认为 1 | 一种替代 temperature 采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的标记的结果。所以 0.1 意味着只考虑构成前 10% 概率质量的标记。我们通常建议更改此值或 temperature,但不要同时更改两者。 |
n | integer | 可选 默认为 1 | 为每个输入消息生成多少个聊天完成选项。 |
stream | boolean | 可选 默认为 false | 如果设置,将发送部分消息增量,就像在 ChatGPT 中一样。令牌将在可用时作为纯数据服务器发送事件发送,流由数据终止:[DONE] 消息。 |
stop | string or array | 可选 默认为 null | API 将停止生成更多令牌的最多 4 个序列。 |
max_tokens | integer | 可选 默认为 inf | 聊天完成时生成的最大令牌数。输入标记和生成标记的总长度受模型上下文长度的限制。 |
presence_penalty | number | 可选 默认为 0 | -2.0 和 2.0 之间的数字。正值会根据到目前为止是否出现在文本中来惩罚新标记,从而增加模型谈论新主题的可能性。 |
frequency_penalty | number | 可选 默认为 0 | -2.0 和 2.0 之间的数字。正值会根据新标记在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性。 |
logit_bias | map | 可选 默认为 null | 修改指定标记出现在完成中的可能性。接受一个 json 对象,该对象将标记(由标记器中的标记 ID 指定)映射到从 -100 到 100 的关联偏差值。从数学上讲,偏差会在采样之前添加到模型生成的 logits 中。确切的效果因模型而异,但 -1 和 1 之间的值应该会减少或增加选择的可能性;像 -100 或 100 这样的值应该导致相关令牌的禁止或独占选择。 |
user | string | 可选 | 代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。 |
示例请求
curl | python | node.js |
---|---|---|
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!"}]
}'
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "Hello!"}
]
)
print(completion.choices[0].message)
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const completion = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [{role: "user", content: "Hello world"}],
});
console.log(completion.data.choices[0].message);
|
参数
{
"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
}
}
四、OpenAI API Edits
给定提示和指令,模型将返回提示的编辑版本。
---
Create edit
为提供的输入、指令和参数创建新的编辑。
Request body
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
model | string | 必须 | 要使用的模型的 ID。您可以将 text-davinci-edit-001 或 code-davinci-edit-001 模型与此端点一起使用。 |
input | string | 可选 默认为 '' | 用作编辑起点的输入文本。 |
instruction | string | 必须 | 告诉模型如何编辑提示的指令。 |
n | integer | 可选 默认为 1 | 为输入和指令生成多少编辑。 |
temperature | number | 可选 默认为 1 | 使用什么采样 temperature,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。我们通常建议改变这个或 top_p 但不是两者都改变。 |
top_p | number | 可选 默认为 1 | 一种替代 temperature 采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的标记的结果。所以 0.1 意味着只考虑构成前 10% 概率质量的标记。我们通常建议更改此值或 temperature,但不要同时更改两者。 |
示例请求
curl | python | node.js |
---|---|---|
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"
}'
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Edit.create(
model="text-davinci-edit-001",
input="What day of the wek is it?",
instruction="Fix the spelling mistakes"
)
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createEdit({
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
}
}
五、OpenAI API Images
给定提示和/或输入图像,模型将生成新图像。
---
Create image
根据提示创建图像。
Request body
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
prompt | string | 必须 | 所需图像的文本描述。最大长度为 1000 个字符。 |
n | integer | 可选 默认为 1 | 要生成的图像数。必须介于 1 和 10 之间。 |
size | string | 可选 默认为 1024x1024 | 生成图像的大小。必须是 256x256 、 512x512 或 1024x1024 之一。 |
response_format | string | 可选 默认为 url | 生成的图像返回的格式。必须是 url 或 b64_json 之一。 |
user | string | 可选 | 代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。 |
示例请求
curl | python | node.js |
---|---|---|
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"
}'
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Image.create(
prompt="A cute baby sea otter",
n=2,
size="1024x1024"
)
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createImage({
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
在给定原始图像和提示的情况下创建编辑或扩展图像。
Request body
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
image | string | 必须 | 要编辑的图像。必须是有效的 PNG 文件,小于 4MB,并且是方形的。如果未提供遮罩,图像必须具有透明度,将用作遮罩。 |
mask | string | 可选 | 完全透明区域(例如 alpha 为零的区域)的附加图像指示应编辑图像的位置。必须是有效的 PNG 文件,小于 4MB,并且与图像具有相同的尺寸。 |
prompt | string | 必须 | 所需图像的文本描述。最大长度为 1000 个字符。 |
n | integer | 可选 默认为 1 | 要生成的图像数。必须介于 1 和 10 之间。 |
size | string | 可选 默认为 1024x1024 | 生成图像的大小。必须是 256x256 、 512x512 或 1024x1024 之一。 |
response_format | string | 可选 默认为 url | 生成的图像返回的格式。必须是 url 或 b64_json 之一。 |
user | string | 可选 | 代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。 |
示例请求
curl | python | node.js |
---|---|---|
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"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Image.create_edit(
image=open("otter.png", "rb"),
mask=open("mask.png", "rb"),
prompt="A cute baby sea otter wearing a beret",
n=2,
size="1024x1024"
)
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createImageEdit(
fs.createReadStream("otter.png"),
fs.createReadStream("mask.png"),
"A cute baby sea otter wearing a beret",
2,
"1024x1024"
);
|
响应
{
"created": 1589478378,
"data": [
{
"url": "https://..."
},
{
"url": "https://..."
}
]
}
---
Create image variation
创建给定图像的变体。
Request body
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
image | string | 必须 | 用作变体基础的图像。必须是有效的 PNG 文件,小于 4MB,并且是方形的。 |
n | integer | 可选 默认为 1 | 要生成的图像数。必须介于 1 和 10 之间。 |
size | string | 可选 默认为 1024x1024 | 生成图像的大小。必须是 256x256 、 512x512 或 1024x1024 之一。 |
response_format | string | 可选 默认为 url | 生成的图像返回的格式。必须是 url 或 b64_json .user 之一 |
user | string | 可选 | 代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。 |
示例请求
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/images/variations \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F image="@otter.png" \
-F n=2 \
-F size="1024x1024"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Image.create_variation(
image=open("otter.png", "rb"),
n=2,
size="1024x1024"
)
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createImageVariation(
fs.createReadStream("otter.png"),
2,
"1024x1024"
);
|
响应
{
"created": 1589478378,
"data": [
{
"url": "https://..."
},
{
"url": "https://..."
}
]
}
六、OpenAI API Embeddings
获取给定输入的矢量表示,机器学习模型和算法可以轻松使用该表示。
---
Create embeddings
创建表示输入文本的嵌入向量。
Request body
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
model | string | 必须 | 要使用的模型的 ID。您可以使用 List models API 来查看所有可用模型。 |
input | string or array | 必须 | 输入文本以获取嵌入,编码为字符串或标记数组。要在单个请求中获取多个输入的嵌入,请传递一个字符串数组或令牌数组数组。每个输入的长度不得超过 8192 个标记。 |
user | string | 可选 | 代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。 |
示例请求
curl | python | node.js |
---|---|---|
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"
}'
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Embedding.create(
model="text-embedding-ada-002",
input="The food was delicious and the waiter..."
)
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createEmbedding({
model: "text-embedding-ada-002",
input: "The food was delicious and the waiter...",
});
|
参数
{
"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
}
}
七、OpenAI API Audio
了解如何将音频转换为文本。
---
Create transcription
将音频转录为输入语言。
Request body
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
file | string | 必须 | 要转录的音频文件,采用以下格式之一:mp3、mp4、mpeg、mpga、m4a、wav 或 webm。 |
model | string | 必须 | 要使用的模型的 ID。目前只有 whisper-1 可用。 |
prompt | string | 可选 | 可选文本,用于指导模型的风格或继续之前的音频片段。提示应与音频语言相匹配。 |
response_format | string | 可选 默认为 json | 成绩单输出的格式,采用以下选项之一:json、text、srt、verbose_json 或 vtt。 |
temperature | number | 可选 默认为 0 | 采样 temperature,介于 0 和 1 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。如果设置为 0,模型将使用对数概率自动升高 temperature,直到达到特定阈值。 |
language | string | 可选 | 输入音频的语言。以 ISO-639-1 格式提供输入语言将提高准确性和延迟。 |
示例请求
curl | python | node.js |
---|---|---|
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"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
audio_file = open("audio.mp3", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const resp = await openai.createTranscription(
fs.createReadStream("audio.mp3"),
"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 translation
将音频翻译成英文。
Request body
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
file | string | 必须 | 要翻译的音频文件,采用以下格式之一:mp3、mp4、mpeg、mpga、m4a、wav 或 webm。 |
model | string | 必须 | 要使用的模型的 ID。目前只有 whisper-1 可用。 |
prompt | string | 可选 | 可选文本,用于指导模型的风格或继续之前的音频片段。提示应为英文。 |
response_format | string | 可选 默认为 json | 成绩单输出的格式,采用以下选项之一:json、text、srt、verbose_json 或 vtt。 |
temperature | number | 可选 默认为 0 | 采样 temperature,介于 0 和 1 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。如果设置为 0,模型将使用对数概率自动升高 temperature,直到达到特定阈值。 |
示例请求
curl | python | node.js |
---|---|---|
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"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
audio_file = open("german.m4a", "rb")
transcript = openai.Audio.translate("whisper-1", audio_file)
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const resp = await openai.createTranslation(
fs.createReadStream("audio.mp3"),
"whisper-1"
);
|
参数
{
"file": "german.m4a",
"model": "whisper-1"
}
响应
{
"text": "Hello, my name is Wolfgang and I come from Germany. Where are you heading today?"
}
八、OpenAI API Files
文件用于上传可与微调等功能一起使用的文档。
List files
返回属于用户组织的文件列表。
示例请求
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/files \
-H "Authorization: Bearer $OPENAI_API_KEY"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.File.list()
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.listFiles();
|
响应
{
"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
上传包含要跨各种端点/功能使用的文档的文件。目前,一个组织上传的所有文件的大小最大可达 1 GB。如果您需要增加存储限制,请联系我们。
Request body
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
file | string | 必须 | 要上传的 JSON 行文件的名称。如果目的设置为“微调”,则每一行都是一个 JSON 记录,其中包含代表您的训练示例的“提示”和“完成”字段。 |
purpose | string | 必须 | 上传文件的预期目的。使用“微调”进行微调。这使我们能够验证上传文件的格式。 |
示例请求
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/files \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F purpose="fine-tune" \
-F file="@mydata.jsonl"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.File.create(
file=open("mydata.jsonl", "rb"),
purpose='fine-tune'
)
|
const fs = require("fs");
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createFile(
fs.createReadStream("mydata.jsonl"),
"fine-tune"
);
|
响应
{
"id": "file-XjGxS3KTG0uNmNOK362iJua3",
"object": "file",
"bytes": 140,
"created_at": 1613779121,
"filename": "mydata.jsonl",
"purpose": "fine-tune"
}
---
Delete file
删除文件。
Path parameters
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
file_id | string | 必须 | 用于此请求的文件的 ID |
示例请求
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/files/file-XjGxS3KTG0uNmNOK362iJua3 \
-X DELETE \
-H "Authorization: Bearer $OPENAI_API_KEY"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.File.delete("file-XjGxS3KTG0uNmNOK362iJua3")
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.deleteFile("file-XjGxS3KTG0uNmNOK362iJua3");
|
响应
{
"id": "file-XjGxS3KTG0uNmNOK362iJua3",
"object": "file",
"deleted": true
}
---
Retrieve file
返回有关特定文件的信息。
Path parameters
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
file_id | string | 必须 | 用于此请求的文件的 ID |
示例请求
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/files/file-XjGxS3KTG0uNmNOK362iJua3 \
-H "Authorization: Bearer $OPENAI_API_KEY"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.File.retrieve("file-XjGxS3KTG0uNmNOK362iJua3")
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.retrieveFile("file-XjGxS3KTG0uNmNOK362iJua3");
|
响应
{
"id": "file-XjGxS3KTG0uNmNOK362iJua3",
"object": "file",
"bytes": 140,
"created_at": 1613779657,
"filename": "mydata.jsonl",
"purpose": "fine-tune"
}
---
Retrieve file content
返回指定文件的内容
Path parameters
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
file_id | string | 必须 | 用于此请求的文件的 ID |
示例请求
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/files/file-XjGxS3KTG0uNmNOK362iJua3/content \
-H "Authorization: Bearer $OPENAI_API_KEY" > file.jsonl
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
content = openai.File.download("file-XjGxS3KTG0uNmNOK362iJua3")
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.downloadFile("file-XjGxS3KTG0uNmNOK362iJua3");
九、OpenAI API Fine-tunes
管理微调作业以根据您的特定训练数据定制模型。
---
Create fine-tune
创建一个从给定数据集微调指定模型的作业。
响应包括排队作业的详细信息,包括作业状态和完成后微调模型的名称。
Request body
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
training_file | string | 必须 | 包含训练数据的上传文件的 ID。您的数据集必须格式化为 JSONL 文件,其中每个训练示例都是一个带有键“提示”和“完成”的 JSON 对象。此外,您必须上传带有微调目的的文件。 |
validation_file | string | 可选 | 包含验证数据的上传文件的 ID。如果您提供此文件,该数据将用于在微调期间定期生成验证指标。这些指标可以在微调结果文件中查看。您的火车和验证数据应该是互斥的。您的数据集必须格式化为 JSONL 文件,其中每个验证示例都是一个带有键“prompt”和“completion”的 JSON 对象。此外,您必须上传带有微调目的的文件。 |
model | string | 可选 默认为 curie | 要微调的基本模型的名称。您可以选择“ada”、“babbage”、“curie”、“davinci”或 2022-04-21 之后创建的微调模型之一。 |
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 | 用于提示令牌损失的权重。这控制了模型尝试学习生成提示的程度(与权重始终为 1.0 的完成相比),并且可以在完成较短时为训练增加稳定效果。如果提示非常长(相对于完成),则减少此权重以避免过度优先学习提示可能是有意义的。 |
compute_classification_metrics | boolean | 可选 默认为 false | 如果设置,我们将在每个时期结束时使用验证集计算特定于分类的指标,例如准确性和 F-1 分数。可以在结果文件中查看这些指标。为了计算分类指标,您必须提供一个 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 个字符的字符串,将添加到您的微调模型名称中。例如,“custom-model-name”的后缀会生成类似 ada:ft-your-org:custom-model-name-2022-02-15-04-21-04 的模型名称。 |
示例请求
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/fine-tunes \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"training_file": "file-XGinujblHPwGLSztz8cPS8XY"
}'
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.create(training_file="file-XGinujblHPwGLSztz8cPS8XY")
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createFineTune({
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
列出您的组织的微调工作
示例请求
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/fine-tunes \
-H "Authorization: Bearer $OPENAI_API_KEY"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.list()
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.listFineTunes();
|
响应
{
"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
获取有关微调作业的信息。
Path parameters
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
fine_tune_id | string | 必须 | 微调作业的ID |
示例请求
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/fine-tunes/ft-AF1WoRqd3aJAHsqc9NY7iL8F \
-H "Authorization: Bearer $OPENAI_API_KEY"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.retrieve(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.retrieveFineTune("ft-AF1WoRqd3aJAHsqc9NY7iL8F");
|
响应
{
"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
立即取消微调作业。
Path parameters
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
fine_tune_id | string | 必须 | 要取消的微调作业的 ID |
示例请求
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/fine-tunes/ft-AF1WoRqd3aJAHsqc9NY7iL8F/cancel \
-H "Authorization: Bearer $OPENAI_API_KEY"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.cancel(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.cancelFineTune("ft-AF1WoRqd3aJAHsqc9NY7iL8F");
|
响应
{
"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
获取微调作业的细粒度状态更新。
Path parameters
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
fine_tune_id | string | 必须 | 要为其获取事件的微调作业的 ID。 |
Query parameters
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
stream | boolean | 可选 默认为 false | 是否为微调作业流式传输事件。如果设置为 true,事件将在可用时作为纯数据服务器发送事件发送。当作业完成(成功、取消或失败)时,流将以 data: [DONE] 消息终止。如果设置为 false,则只返回到目前为止生成的事件。 |
示例请求
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/fine-tunes/ft-AF1WoRqd3aJAHsqc9NY7iL8F/events \
-H "Authorization: Bearer $OPENAI_API_KEY"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.list_events(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.listFineTuneEvents("ft-AF1WoRqd3aJAHsqc9NY7iL8F");
|
响应
{
"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
删除微调模型。您必须在您的组织中拥有所有者角色。
Path parameters
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
model | string | 必须 | 要删除的模型 |
示例请求
curl | python | node.js |
---|---|---|
curl https://api.openai.com/v1/models/curie:ft-acmeco-2021-03-03-21-44-20 \
-X DELETE \
-H "Authorization: Bearer $OPENAI_API_KEY"
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.delete("curie:ft-acmeco-2021-03-03-21-44-20")
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.deleteModel('curie:ft-acmeco-2021-03-03-21-44-20');
|
响应
{
"id": "curie:ft-acmeco-2021-03-03-21-44-20",
"object": "model",
"deleted": true
}
十、OpenAI API Moderations
给定输入文本,如果模型将其分类为违反 OpenAI 的内容策略,则输出。
Create moderation
分类文本是否违反 OpenAI 的内容政策
Request body
字段 | 类型 | 是否可选 | 说明 |
---|---|---|---|
input | string or 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 | python | node.js |
---|---|---|
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."
}'
|
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Moderation.create(
input="I want to kill them.",
)
|
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createModeration({
input: "I want to kill them.",
});
|
参数
{
"input": "I want to kill them."
}
响应
{
"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
}
]
}
十一、OpenAI API Parameter details
频率和存在惩罚
Completions API 中发现的频率和存在惩罚可用于降低对令牌重复序列进行采样的可能性。他们通过添加贡献直接修改 logits(非标准化对数概率)来工作。
mu[j] -> mu[j] - c[j] * alpha_frequency - float(c[j] > 0) * alpha_presence
Where:
- mu[j] 是第 j 个标记的对数
- c[j] 是在当前位置之前对该令牌进行采样的频率
- 如果 c[j] > 0,则 float(c[j] > 0) 为 1,否则为 0
- alpha_frequency 是频率惩罚系数
- alpha_presence 是存在惩罚系数
正如我们所见,存在惩罚是一种一次性的加性贡献,适用于所有至少被采样过一次的标记,而频率惩罚是与特定标记被采样的频率成正比的贡献。
如果目标只是稍微减少重复样本,则惩罚系数的合理值约为 0.1 到 1。如果目标是强烈抑制重复,那么可以将系数增加到 2,但这会显着降低样本质量。负值可用于增加重复的可能性。