OpenAI API 接口说明

  |   0 评论   |   0 浏览

一、OpenAI API Models

列出并描述 API 中可用的各种模型。您可以参考模型文档以了解可用的模型以及它们之间的区别。


列出模型

GET https://api.openai.com/v1/models

列出当前可用的模型,并提供有关每个模型的基本信息,例如所有者和可用性。

示例请求:

curlpythonnode.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"
}

---

检索模型

GET https://api.openai.com/v1/models/{model}

检索模型实例,提供有关模型的基本信息,例如所有者和权限。

路径参数

字段类型是否可选
modelstring必须

示例请求

curlpythonnode.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

POST https://api.openai.com/v1/completions

为提供的提示和参数创建 completion

Request body

字段类型是否可选说明
modelstring必须要使用的模型的 ID。您可以使用 List models API 来查看所有可用模型。
promptstring or array可选 默认为 <endoftext
suffixstring可选 默认为 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,但不要同时更改两者。
ninteger可选 默认为 1为每个提示生成多少完成。
注意:因为这个参数会产生很多完成,它会很快消耗你的令牌配额。请谨慎使用并确保您对 max_tokens 和停止进行了合理的设置。
streamboolean可选 默认为 false是否回流部分进度。如果设置,令牌将在可用时作为纯数据服务器发送事件发送,流由数据终止:[DONE] 消息。
logprobsinteger可选 默认为 null在 logprobs 上包括对数概率最有可能的标记,以及所选标记。例如,如果 logprobs 为 5,则 API 将返回 5 个最有可能的标记的列表。 API 将始终返回采样令牌的 logprob,因此响应中最多可能有 logprobs+1 个元素。
logprobs 的最大值为 5。如果您需要更多,请通过我们的帮助中心联系我们并描述您的用例。
echoboolean可选 默认为 false除了完成之外回显提示
stopstring or array可选 默认为 nullAPI 将停止生成更多令牌的最多 4 个序列。返回的文本将不包含停止序列。
presence_penaltynumber可选 默认为 0-2.0 和 2.0 之间的数字。正值会根据到目前为止是否出现在文本中来惩罚新标记,从而增加模型谈论新主题的可能性。
frequency_penaltynumber可选 默认为 0-2.0 和 2.0 之间的数字。正值会根据新标记在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性。
best_ofinteger可选 默认为 1在服务器端生成 best_of 完成并返回“最佳”(每个标记具有最高对数概率的那个)。无法流式传输结果。
当与 n 一起使用时,best_of 控制候选完成的数量,n 指定返回多少 - best_of 必须大于 n。
注意:因为这个参数会产生很多完成,它会很快消耗你的令牌配额。请谨慎使用并确保您对 max_tokens 和停止进行了合理的设置。
logit_biasmap可选 默认为 null修改指定标记出现在完成中的可能性。接受一个 json 对象,该对象将标记(由 GPT 标记器中的标记 ID 指定)映射到从 -100 到 100 的相关偏差值。您可以使用此标记器工具(适用于 GPT-2 和 GPT-3)来转换文本到令牌 ID。从数学上讲,偏差会在采样之前添加到模型生成的对数中。确切的效果因模型而异,但 -1 和 1 之间的值应该会减少或增加选择的可能性;像 -100 或 100 这样的值应该导致相关令牌的禁止或独占选择。例如,您可以传递 {"50256": -100} 以防止生成 <
user
string
可选代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。

示例请求

curlpythonnode.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

POST https://api.openai.com/v1/chat/completions

为聊天消息创建 completion

Request body

字段类型是否可选说明
modelstring必须要使用的模型的 ID。
messagesarray必须以聊天格式生成聊天完成的消息。
temperaturenumber可选 默认为 1使用什么采样 temperature,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。我们通常建议改变这个或 top_p 但不是两者都改变。
top_pnumber可选 默认为 1一种替代 temperature 采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的标记的结果。所以 0.1 意味着只考虑构成前 10% 概率质量的标记。我们通常建议更改此值或 temperature,但不要同时更改两者。
ninteger可选 默认为 1为每个输入消息生成多少个聊天完成选项。
streamboolean可选 默认为 false如果设置,将发送部分消息增量,就像在 ChatGPT 中一样。令牌将在可用时作为纯数据服务器发送事件发送,流由数据终止:[DONE] 消息。
stopstring or array可选 默认为 nullAPI 将停止生成更多令牌的最多 4 个序列。
max_tokensinteger可选 默认为 inf聊天完成时生成的最大令牌数。输入标记和生成标记的总长度受模型上下文长度的限制。
presence_penaltynumber可选 默认为 0-2.0 和 2.0 之间的数字。正值会根据到目前为止是否出现在文本中来惩罚新标记,从而增加模型谈论新主题的可能性。
frequency_penaltynumber可选 默认为 0-2.0 和 2.0 之间的数字。正值会根据新标记在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性。
logit_biasmap可选 默认为 null修改指定标记出现在完成中的可能性。接受一个 json 对象,该对象将标记(由标记器中的标记 ID 指定)映射到从 -100 到 100 的关联偏差值。从数学上讲,偏差会在采样之前添加到模型生成的 logits 中。确切的效果因模型而异,但 -1 和 1 之间的值应该会减少或增加选择的可能性;像 -100 或 100 这样的值应该导致相关令牌的禁止或独占选择。
userstring可选代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。

示例请求

curlpythonnode.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

POST https://api.openai.com/v1/edits

为提供的输入、指令和参数创建新的编辑。

Request body

字段类型是否可选说明
modelstring必须要使用的模型的 ID。您可以将 text-davinci-edit-001 或 code-davinci-edit-001 模型与此端点一起使用。
inputstring可选 默认为 ''用作编辑起点的输入文本。
instructionstring必须告诉模型如何编辑提示的指令。
ninteger可选 默认为 1为输入和指令生成多少编辑。
temperaturenumber可选 默认为 1使用什么采样 temperature,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。我们通常建议改变这个或 top_p 但不是两者都改变。
top_pnumber可选 默认为 1一种替代 temperature 采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的标记的结果。所以 0.1 意味着只考虑构成前 10% 概率质量的标记。我们通常建议更改此值或 temperature,但不要同时更改两者。

示例请求

curlpythonnode.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

POST https://api.openai.com/v1/images/generations

根据提示创建图像。

Request body

字段类型是否可选说明
promptstring必须所需图像的文本描述。最大长度为 1000 个字符。
ninteger可选 默认为 1要生成的图像数。必须介于 1 和 10 之间。
sizestring可选 默认为 1024x1024生成图像的大小。必须是 256x256 、 512x512 或 1024x1024 之一。
response_formatstring可选 默认为 url生成的图像返回的格式。必须是 url 或 b64_json 之一。
userstring可选代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。

示例请求

curlpythonnode.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

POST https://api.openai.com/v1/images/edits

在给定原始图像和提示的情况下创建编辑或扩展图像。

Request body

字段类型是否可选说明
imagestring必须要编辑的图像。必须是有效的 PNG 文件,小于 4MB,并且是方形的。如果未提供遮罩,图像必须具有透明度,将用作遮罩。
maskstring可选完全透明区域(例如 alpha 为零的区域)的附加图像指示应编辑图像的位置。必须是有效的 PNG 文件,小于 4MB,并且与图像具有相同的尺寸。
promptstring必须所需图像的文本描述。最大长度为 1000 个字符。
ninteger可选 默认为 1要生成的图像数。必须介于 1 和 10 之间。
sizestring可选 默认为 1024x1024生成图像的大小。必须是 256x256 、 512x512 或 1024x1024 之一。
response_formatstring可选 默认为 url生成的图像返回的格式。必须是 url 或 b64_json 之一。
userstring可选代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。

示例请求

curlpythonnode.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

POST https://api.openai.com/v1/images/variations

创建给定图像的变体。

Request body

字段类型是否可选说明
imagestring必须用作变体基础的图像。必须是有效的 PNG 文件,小于 4MB,并且是方形的。
ninteger可选 默认为 1要生成的图像数。必须介于 1 和 10 之间。
sizestring可选 默认为 1024x1024生成图像的大小。必须是 256x256 、 512x512 或 1024x1024 之一。
response_formatstring可选 默认为 url生成的图像返回的格式。必须是 url 或 b64_json .user 之一
userstring可选代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。

示例请求

curlpythonnode.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

POST https://api.openai.com/v1/embeddings

创建表示输入文本的嵌入向量。

Request body

字段类型是否可选说明
modelstring必须要使用的模型的 ID。您可以使用 List models API 来查看所有可用模型。
inputstring or array必须输入文本以获取嵌入,编码为字符串或标记数组。要在单个请求中获取多个输入的嵌入,请传递一个字符串数组或令牌数组数组。每个输入的长度不得超过 8192 个标记。
userstring可选代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。

示例请求

curlpythonnode.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

POST https://api.openai.com/v1/audio/transcriptions

将音频转录为输入语言。

Request body

字段类型是否可选说明
filestring必须要转录的音频文件,采用以下格式之一:mp3、mp4、mpeg、mpga、m4a、wav 或 webm。
modelstring必须要使用的模型的 ID。目前只有 whisper-1 可用。
promptstring可选可选文本,用于指导模型的风格或继续之前的音频片段。提示应与音频语言相匹配。
response_formatstring可选 默认为 json成绩单输出的格式,采用以下选项之一:json、text、srt、verbose_json 或 vtt。
temperaturenumber可选 默认为 0采样 temperature,介于 0 和 1 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。如果设置为 0,模型将使用对数概率自动升高 temperature,直到达到特定阈值。
languagestring可选输入音频的语言。以 ISO-639-1 格式提供输入语言将提高准确性和延迟。

示例请求

curlpythonnode.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

POST https://api.openai.com/v1/audio/translations

将音频翻译成英文。

Request body

字段类型是否可选说明
filestring必须要翻译的音频文件,采用以下格式之一:mp3、mp4、mpeg、mpga、m4a、wav 或 webm。
modelstring必须要使用的模型的 ID。目前只有 whisper-1 可用。
promptstring可选可选文本,用于指导模型的风格或继续之前的音频片段。提示应为英文。
response_formatstring可选 默认为 json成绩单输出的格式,采用以下选项之一:json、text、srt、verbose_json 或 vtt。
temperaturenumber可选 默认为 0采样 temperature,介于 0 和 1 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。如果设置为 0,模型将使用对数概率自动升高 temperature,直到达到特定阈值。

示例请求

curlpythonnode.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

GET https://api.openai.com/v1/files

返回属于用户组织的文件列表。

示例请求

curlpythonnode.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

POST https://api.openai.com/v1/files

上传包含要跨各种端点/功能使用的文档的文件。目前,一个组织上传的所有文件的大小最大可达 1 GB。如果您需要增加存储限制,请联系我们。

Request body

字段类型是否可选说明
filestring必须要上传的 JSON 行文件的名称。如果目的设置为“微调”,则每一行都是一个 JSON 记录,其中包含代表您的训练示例的“提示”和“完成”字段。
purposestring必须上传文件的预期目的。使用“微调”进行微调。这使我们能够验证上传文件的格式。

示例请求

curlpythonnode.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

DELETE https://api.openai.com/v1/files/{file_id}

删除文件。

Path parameters

字段类型是否可选说明
file_id
string
必须
用于此请求的文件的 ID

示例请求

curlpythonnode.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

GET https://api.openai.com/v1/files/{file_id}

返回有关特定文件的信息。

Path parameters

字段类型是否可选说明
file_id
string
必须
用于此请求的文件的 ID

示例请求

curlpythonnode.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

GET https://api.openai.com/v1/files/{file_id}/content

返回指定文件的内容

Path parameters

字段类型是否可选说明
file_id
string
必须
用于此请求的文件的 ID

示例请求

curlpythonnode.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

POST https://api.openai.com/v1/fine-tunes

创建一个从给定数据集微调指定模型的作业。

响应包括排队作业的详细信息,包括作业状态和完成后微调模型的名称。

Request body

字段类型是否可选说明
training_filestring必须包含训练数据的上传文件的 ID。您的数据集必须格式化为 JSONL 文件,其中每个训练示例都是一个带有键“提示”和“完成”的 JSON 对象。此外,您必须上传带有微调目的的文件。
validation_filestring可选包含验证数据的上传文件的 ID。如果您提供此文件,该数据将用于在微调期间定期生成验证指标。这些指标可以在微调结果文件中查看。您的火车和验证数据应该是互斥的。您的数据集必须格式化为 JSONL 文件,其中每个验证示例都是一个带有键“prompt”和“completion”的 JSON 对象。此外,您必须上传带有微调目的的文件。
modelstring可选 默认为 curie要微调的基本模型的名称。您可以选择“ada”、“babbage”、“curie”、“davinci”或 2022-04-21 之后创建的微调模型之一。
n_epochsinteger可选 默认为 4训练模型的时期数。一个纪元指的是训练数据集的一个完整周期。
batch_sizeinteger可选 默认为 null用于训练的批量大小。批量大小是用于训练单个前向和后向传递的训练示例数。默认情况下,批量大小将动态配置为训练集中示例数量的 0.2%,上限为 256 - 通常,我们发现较大的批量大小往往更适合较大的数据集。
learning_rate_multipliernumber可选 默认为 null用于训练的学习率乘数。微调学习率是用于预训练的原始学习率乘以该值。默认情况下,学习率乘数是 0.05、0.1 或 0.2,具体取决于最终的 batch_size(较大的学习率往往在较大的批量大小下表现更好)。我们建议使用 0.02 到 0.2 范围内的值进行试验,以查看产生最佳结果的值。
prompt_loss_weightnumber可选 默认为 0.01用于提示令牌损失的权重。这控制了模型尝试学习生成提示的程度(与权重始终为 1.0 的完成相比),并且可以在完成较短时为训练增加稳定效果。如果提示非常长(相对于完成),则减少此权重以避免过度优先学习提示可能是有意义的。
compute_classification_metricsboolean可选 默认为 false如果设置,我们将在每个时期结束时使用验证集计算特定于分类的指标,例如准确性和 F-1 分数。可以在结果文件中查看这些指标。为了计算分类指标,您必须提供一个 validation_file。此外,您必须为多类分类指定 classification_n_classes 或为二元分类指定 classification_positive_class。
classification_n_classesinteger可选 默认为 null分类任务中的类数。多类分类需要此参数。
classification_positive_classstring可选 默认为 null二元分类中的正类。在进行二元分类时,需要此参数来生成精度、召回率和 F1 指标。
classification_betasarray可选 默认为 null如果提供,我们将计算指定 beta 值的 F-beta 分数。 F-beta 分数是 F-1 分数的推广。这仅用于二进制分类。当 beta 为 1(即 F-1 分数)时,精确率和召回率被赋予相同的权重。 Beta 分数越大,召回率越高,精确率越低。 Beta 分数越小,精确度越重要,召回率越低。
suffixstring可选 默认为 null最多 40 个字符的字符串,将添加到您的微调模型名称中。例如,“custom-model-name”的后缀会生成类似 ada:ft-your-org:custom-model-name-2022-02-15-04-21-04 的模型名称。

示例请求

curlpythonnode.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

GET https://api.openai.com/v1/fine-tunes

列出您的组织的微调工作

示例请求

curlpythonnode.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

GET https://api.openai.com/v1/fine-tunes/{fine_tune_id}

获取有关微调作业的信息。

Path parameters

字段类型是否可选说明
fine_tune_id
string
必须
微调作业的ID

示例请求

curlpythonnode.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

示例请求

curlpythonnode.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,则只返回到目前为止生成的事件。

示例请求

curlpythonnode.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

DELETE https://api.openai.com/v1/models/{model}

删除微调模型。您必须在您的组织中拥有所有者角色。

Path parameters

字段类型是否可选说明
model
string
必须
要删除的模型

示例请求

curlpythonnode.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

POST https://api.openai.com/v1/moderations

分类文本是否违反 OpenAI 的内容政策

Request body

字段类型是否可选说明
inputstring or array必须要分类的输入文本
modelstring可选 默认为 text-moderation-latest有两种内容审核模型可用:text-moderation-stable 和 text-moderation-latest 。默认值是 text-moderation-latest,它将随着时间的推移自动升级。这可确保您始终使用我们最准确的模型。如果您使用 text-moderation-stable,我们将在更新模型之前提供提前通知。 text-moderation-stable 的准确性可能略低于 text-moderation-latest。

示例请求

curlpythonnode.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,但这会显着降低样本质量。负值可用于增加重复的可能性。


标题:OpenAI API 接口说明
作者:michael
地址:https://blog.junxworks.cn/articles/2023/04/28/1682658894858.html