OpenAI API 中文教程
OpenAI API 介绍
概述
OpenAI API 几乎可以应用于任何涉及理解或生成自然语言、代码或图像的任务。我们提供一系列具有不同功率级别的模型,适用于不同的任务,并且能够微调您自己的自定义模型。这些模型可用于从内容生成到语义搜索和分类的所有领域。
Prompts
设计提示本质上是您“编程”模型的方式,通常是通过提供一些说明或一些示例。这不同于为单一任务设计的大多数其他 NLP 服务,例如情感分类或命名实体识别。相反,完成和聊天完成端点可用于几乎任何任务,包括内容或代码生成、摘要、扩展、对话、创意写作、风格转换等。
Tokens
我们的模型通过将文本分解为标记来理解和处理文本。标记可以是单词或只是字符块。例如,单词“hamburger”被分解为标记“ham”、“bur”和“ger”,而像“pear”这样的短而常见的单词是一个标记。许多标记以空格开头,例如“hello”和“bye”。
在给定的 API 请求中处理的令牌数量取决于输入和输出的长度。根据粗略的经验法则,对于英文文本,1 个标记大约为 4 个字符或 0.75 个单词。要记住的一个限制是,您的文本提示和生成的完成组合不能超过模型的最大上下文长度(对于大多数模型,这是 2048 个标记,或大约 1500 个单词)。查看我们的分词器工具,了解有关文本如何转换为分词的更多信息。
Models
API 由一组具有不同功能和价位的模型提供支持。 GPT-4 是我们最新、最强大的模型。 GPT-3.5-Turbo 是为 ChatGPT 提供支持的模型,并针对对话格式进行了优化。
OpenAI API 快速开始
OpenAI 训练了非常擅长理解和生成文本的尖端语言模型。我们的 API 提供对这些模型的访问,可用于解决几乎任何涉及处理语言的任务。
在本快速入门教程中,您将构建一个简单的示例应用程序。在此过程中,您将学习使用 API 完成任何任务的关键概念和技术,包括:
- 内容生成
- 归纳
- 分类、分类和情感分析
- 数据提取
- 翻译
- 更多
介绍
完成端点是我们 API 的核心,它提供了一个非常灵活和强大的简单接口。您输入一些文本作为提示,API 将返回一个文本完成,试图匹配您提供的任何指令或上下文。
您可以将其视为非常高级的自动完成——模型处理您的文本提示并尝试预测接下来最有可能出现的内容。
从指令开始
假设您想创建一个宠物名字生成器。从头开始想出名字很难!
首先,您需要一个明确说明您想要什么的提示。让我们从一个指令开始。提交此提示以生成您的第一个完成。
不错!现在,试着让你的指示更具体。
如您所见,在我们的提示中添加一个简单的形容词会改变生成的完成。设计提示本质上就是您“编程”模型的方式。
添加一些例子
制定好的说明对于取得好的结果很重要,但有时它们还不够。让我们试着让你的指令更复杂。
这个完成并不是我们想要的。这些名称非常通用,而且模型似乎没有接受我们指令中的马匹部分。让我们看看能否让它提出一些更相关的建议。
在许多情况下,向模型展示和告诉模型您想要什么是很有帮助的。在您的提示中添加示例可以帮助传达模式或细微差别。尝试提交此提示,其中包含几个示例。
好的!添加我们期望给定输入的输出示例有助于模型提供我们正在寻找的名称类型。
调整您的设置
提示设计并不是您可以使用的唯一工具。您还可以通过调整设置来控制完成。最重要的设置之一称为温度。
您可能已经注意到,如果您在上面的示例中多次提交相同的提示,模型将始终返回相同或非常相似的完成。这是因为您的温度设置为 0。
尝试将温度设置为 1 重新提交几次相同的提示。
看看发生了什么?当温度高于 0 时,每次提交相同的提示会导致不同的完成。
请记住,该模型预测哪个文本最有可能跟在它前面的文本之后。温度是一个介于 0 和 1 之间的值,基本上可以让您控制模型在进行这些预测时的置信度。降低温度意味着它将承担更少的风险,并且完成将更加准确和确定。升高温度将导致更多样化的完成。
了解 tokens 和 probabilities
我们的模型通过将文本分解为更小的单元(称为标记)来处理文本。标记可以是单词、单词块或单个字符。编辑下面的文本以查看它是如何被标记化的。
I have an orange cat named Butterscotch.
像“猫”这样的常用词是单个标记,而不太常用的词通常被分解成多个标记。例如,“Butterscotch”翻译成四个标记:“But”、“ters”、“cot”和“ch”。许多标记以空格开头,例如“hello”和“bye”。
给定一些文本,该模型确定下一个最有可能出现的标记。例如,文本“Horses are my favorite”最有可能跟随标记“animal”。
这是 **temperature **发挥作用的地方。如果您在 **temperature **为 0 的情况下提交此提示 4 次,则模型将始终在下一个返回“animal”,因为它的概率最高。如果你提高 temperature ,它会承担更多的风险,并考虑概率较低的 tokens。
通常最好为所需输出明确定义的任务设置低 temperature。较高的 temperature 对于需要多样性或创造力的任务可能很有用,或者如果您想为最终用户或人类专家生成一些变化以供选择。
对于您的昵称生成器,您可能希望能够生成很多名字创意。 0.6 的适中 temperature 应该可以正常工作。
构建您的应用程序
- Node.JS
现在你已经找到了一个好的提示和设置,你已经准备好构建你的宠物名称生成器了!我们已经编写了一些代码来帮助您入门——按照下面的说明下载代码并运行应用程序。
设置
确保已经安装 Node.js。然后克隆该仓库
git clone https://github.com/openai/openai-quickstart-node.git
如果您不想使用 git,您也可以使用此 zip 文件下载代码。
添加您的 API 密钥
导航到项目目录并复制示例环境变量文件。
cd openai-quickstart-node
cp .env.example .env
复制您的 API 密钥并将其设置为新创建的 .env 文件中的 OPENAI_API_KEY。
重要说明:使用 Javascript 时,所有 API 调用都应仅在服务器端进行,因为在客户端浏览器代码中进行调用会暴露您的 API 密钥。
运行应用
在项目目录下运行以下命令安装依赖并运行应用程序。
npm install
npm run dev
在浏览器中打开 http://localhost:3000,您应该会看到宠物名称生成器!
理解代码
在 openai-quickstart-node/pages/api 文件夹中打开 generate.js。在底部,您会看到生成我们在上面使用的提示的函数。由于用户将输入他们宠物的动物类型,因此它会动态换出指定动物的提示部分。
function generatePrompt(animal) {
const capitalizedAnimal = animal[0].toUpperCase() + animal.slice(1).toLowerCase();
return `Suggest three names for an animal that is a superhero.
Animal: Cat
Names: Captain Sharpclaw, Agent Fluffball, The Incredible Feline
Animal: Dog
Names: Ruff the Protector, Wonder Canine, Sir Barks-a-Lot
Animal: ${capitalizedAnimal}
Names:`;
}
在 generate.js 的第 9 行,您将看到发送实际 API 请求的代码。如上所述,它使用 temperature 为 0.6 的完成端点。
const completion = await openai.createCompletion({
model: "text-davinci-003",
prompt: generatePrompt(req.body.animal),
temperature: 0.6,
});
就是这样!您现在应该完全了解您的宠物名称生成器如何使用 OpenAI API!
- PYTHON(FLASK)
设置
确保已经安装 Python。然后克隆该仓库
git clone https://github.com/openai/openai-quickstart-python.git
如果您不想使用 git,您也可以使用此 zip 文件下载代码。
添加您的 API 密钥
导航到项目目录并复制示例环境变量文件。
cd openai-quickstart-python
cp .env.example .env
复制您的 API 密钥并将其设置为新创建的 .env 文件中的 OPENAI_API_KEY。
运行应用
在项目目录下运行以下命令安装依赖并运行应用程序。运行命令时,您可能需要键入 python3/pip3 而不是 python/pip,具体取决于您的设置。
python -m venv venv
. venv/bin/activate
pip install -r requirements.txt
flask run
在浏览器中打开 http://localhost:5000,您应该会看到宠物名称生成器!
理解代码
在 openai-quickstart-python 文件夹中打开 app.py。在底部,您会看到生成我们在上面使用的提示的函数。由于用户将输入他们宠物的动物类型,因此它会动态换出指定动物的提示部分。
def generate_prompt(animal):
return """Suggest three names for an animal that is a superhero.
Animal: Cat
Names: Captain Sharpclaw, Agent Fluffball, The Incredible Feline
Animal: Dog
Names: Ruff the Protector, Wonder Canine, Sir Barks-a-Lot
Animal: {}
Names:""".format(animal.capitalize())
在 app.py 的第 14 行,您将看到发送实际 API 请求的代码。如上所述,它使用 temperature 为 0.6 的完成端点。
response = openai.Completion.create(
model="text-davinci-003",
prompt=generate_prompt(animal),
temperature=0.6
)
就是这样!您现在应该完全了解您的宠物名称生成器如何使用 OpenAI API!
Closing
这些概念和技术将大大有助于您构建自己的应用程序。也就是说,这个简单的例子只是展示了可能性的一小部分!完成端点非常灵活,几乎可以解决任何语言处理任务,包括内容生成、摘要、语义搜索、主题标记、情感分析等等。
要记住的一个限制是,对于大多数模型,单个 API 请求在提示和完成之间最多只能处理 2,048 个标记(大约 1,500 个单词)。
模型和价格
我们提供一系列具有不同功能和价位的型号。在本教程中,我们使用了我们最强大的自然语言模型 text-davinci-003。我们建议在试验时使用此模型,因为它会产生最佳结果。一旦一切正常,您就可以查看其他模型是否可以以更低的延迟和成本产生相同的结果。
单个请求(提示和完成)中处理的令牌总数不能超过模型的最大上下文长度。对于大多数模型,这是 2,048 个标记或大约 1,500 个单词。根据粗略的经验法则,对于英文文本,1 个标记大约为 4 个字符或 0.75 个单词。
对于更高级的任务,您可能会发现自己希望能够提供更多的示例或上下文,而不是单个提示中的内容。fine-tuning API 是执行此类更高级任务的绝佳选择。微调允许您提供数百甚至数千个示例来为您的特定用例定制模型。
OpenAI API 库
Python 库
我们提供了一个 Python 库,您可以按如下方式安装它:
$ pip install openai
安装后,您可以使用绑定和您的密钥运行以下命令:
import os
import openai
# Load your API key from an environment variable or secret management service
openai.api_key = os.getenv("OPENAI_API_KEY")
response = openai.Completion.create(model="text-davinci-003", prompt="Say this is a test", temperature=0, max_tokens=7)
绑定还将安装一个命令行实用程序,您可以按如下方式使用:
$ openai api completions.create -m text-davinci-003 -p "Say this is a test" -t 0 -M 7 --stream
Node.js 库
我们还有一个 Node.js 库,您可以通过在 Node.js 项目目录中运行以下命令来安装它:
$ npm install openai
安装后,您可以使用该库和您的密钥运行以下命令:
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: "text-davinci-003",
prompt: "Say this is a test",
temperature: 0,
max_tokens: 7,
});
社区库
下面的库由更广泛的开发人员社区构建和维护。如果您想在此处添加新库,请按照我们帮助中心文章中有关添加社区库的说明进行操作。
请注意,OpenAI 不会验证这些项目的正确性或安全性。
C# / .NET
Crystal
Go
Java
Kotlin
Node.js
- openai-api by Njerschow
- openai-api-node by erlapso
- gpt-x by ceifa
- gpt3 by poteat
- gpts by thencc
- @dalenguyen/openai by dalenguyen
- tectalic/openai by tectalic
PHP
Python
R
Ruby
Scala
Swift
Unity
Unreal Engine
OpenAI API 模型
概述
OpenAI API 由具有不同功能和价位的多种模型提供支持。您还可以通过 fine-tuning 针对您的特定用例对我们的原始基础模型进行有限的定制。
模型 | 描述 |
---|---|
GPT-4 | 一组在 GPT-3.5 上改进的模型,可以理解并生成自然语言或代码 |
GPT-3.5 | 一组在 GPT-3 上改进的模型,可以理解并生成自然语言或代码 |
DALL·E | 可以在给定自然语言提示的情况下生成和编辑图像的模型 |
Whisper | 一种可以将音频转换为文本的模型 |
Embeddings | 一组可以将文本转换为数字形式的模型 |
Codex | 一组可以理解和生成代码的模型,包括将自然语言翻译成代码 |
Moderation | 可以检测文本是否敏感或不安全的 fine-tuning 模型 |
GPT-3 | 一组可以理解和生成自然语言的模型 |
我们还发布了开源模型,包括 Point-E、Whisper、Jukebox 和 CLIP。
GPT-4
GPT-4 是一个大型多模态模型(今天接受文本输入并发出文本输出,将来会出现图像输入),由于其更广泛的常识和高级推理,它可以比我们以前的任何模型更准确地解决难题能力。与 gpt-3.5-turbo 一样,GPT-4 针对聊天进行了优化,但也适用于传统的补全任务。
GPT-4 目前处于有限测试阶段,只有获得访问权限的人才能访问。请加入候补名单,以便在容量可用时获得访问权限。
最新模型 | 描述 | 最大 TOKENS | 训练日期 |
---|---|---|---|
gpt-4 | 比任何 GPT-3.5 模型都更强大,能够执行更复杂的任务,并针对聊天进行了优化。将使用我们最新的模型迭代进行更新。 | 8,192 tokens | Up to Sep 2021 |
gpt-4-0314 | 2023 年 3 月 14 日的 gpt-4 快照。与 gpt-4 不同,该模型不会收到更新,并且仅在 2023 年 6 月 14 日结束的三个月内提供支持。 | 8,192 tokens | Up to Sep 2021 |
gpt-4-32k | 与基本 gpt-4 模式相同的功能,但上下文长度是其 4 倍。将使用我们最新的模型迭代进行更新。 | 32,768 tokens | Up to Sep 2021 |
gpt-4-32k-0314 | 2023 年 3 月 14 日的 gpt-4-32 快照。与 gpt-4-32k 不同,此模型不会收到更新,并且仅在 2023 年 6 月 14 日结束的三个月内提供支持。 | 32,768 tokens | Up to Sep 2021 |
对于许多基本任务,GPT-4 和 GPT-3.5 模型之间的差异并不显着。然而,在更复杂的推理情况下,GPT-4 比我们之前的任何模型都更有能力。
GPT-3.5
GPT-3.5 模型可以理解并生成自然语言或代码。我们在 GPT-3.5 系列中功能最强大且最具成本效益的模型是 gpt-3.5-turbo,它已针对聊天进行了优化,但也适用于传统的完成任务。
最新模型 | 描述 | 最大 TOKENS | 训练日期 |
---|---|---|---|
gpt-3.5-turbo | 功能最强大的 GPT-3.5 模型并针对聊天进行了优化,成本仅为 text-davinci-003 的 1/10。将使用我们最新的模型迭代进行更新。 | 4,096 tokens | Up to Sep 2021 |
gpt-3.5-turbo-0301 | 2023 年 3 月 1 日的 gpt-3.5-turbo 快照。与 gpt-3.5-turbo 不同,此模型不会收到更新,并且仅在 2023 年 6 月 1 日结束的三个月内提供支持。 | 4,096 tokens | Up to Sep 2021 |
text-davinci-003 | 可以比 curie、babbage或 ada 模型更好的质量、更长的输出和一致的指令遵循来完成任何语言任务。还支持在文本中插入补全。 | 4,097 tokens | Up to Jun 2021 |
text-davinci-002 | 与 text-davinci-003 类似的功能,但使用supervised fine-tuning而不是强化学习进行训练 | 4,097 tokens | Up to Jun 2021 |
code-davinci-002 | 针对代码完成任务进行了优化 | 8,001 tokens | Up to Jun 2021 |
我们建议使用 gpt-3.5-turbo 而不是其他 GPT-3.5 模型,因为它的成本更低。
OpenAI 模型是不确定的,这意味着相同的输入可以产生不同的输出。将 temperature 设置为 0 将使输出大部分具有确定性,但可能会保留少量可变性。
基于特定功能的模型
虽然新的 gpt-3.5-turbo 模型针对聊天进行了优化,但它非常适合传统的完成任务。原始 GPT-3.5 模型针对文本补全进行了优化。
我们用于创建嵌入和编辑文本的端点使用它们自己的一组专用模型。
找到合适的模型
试用 gpt-3.5-turbo 是了解 API 功能的好方法。在您了解要完成的任务后,您可以继续使用 gpt-3.5-turbo 或其他模型并尝试围绕其功能进行优化。
您可以使用 GPT 比较工具,让您并排运行不同的模型来比较输出、设置和响应时间,然后将数据下载到 Excel 电子表格中。
DALL·E
DALL·E 是一个人工智能系统,可以根据自然语言的描述创建逼真的图像和艺术作品。我们目前支持在提示的情况下创建具有特定大小的新图像、编辑现有图像或创建用户提供的图像的变体的能力。
通过我们的 API 提供的当前 DALL·E 模型是 DALL·E 的第 2 次迭代,具有比原始模型更逼真、更准确且分辨率高 4 倍的图像。
Whisper
Whisper 是一种通用的语音识别模型。它在不同音频的大型数据集上进行训练,也是一个多任务模型,可以执行多语言语音识别以及语音翻译和语言识别。 Whisper v2-large 模型目前可通过我们的 API 使用 whisper-1 模型名称获得。
目前,Whisper 的开源版本与通过我们的 API 提供的版本之间没有区别。然而,通过我们的 API,我们提供了一个优化的推理过程,这使得通过我们的 API 运行 Whisper 比通过其他方式运行要快得多。
Embeddings
嵌入是文本的数字表示,可用于衡量两段文本之间的相关性。我们的第二代嵌入模型 text-embedding-ada-002 旨在以一小部分成本取代之前的 16 种第一代嵌入模型。嵌入可用于搜索、聚类、推荐、异常检测和分类任务。
Codex
Codex 模型是我们可以理解和生成代码的 GPT-3 模型的后代。他们的训练数据包含自然语言和来自 GitHub 的数十亿行公共代码。
他们最擅长 Python,精通 JavaScript、Go、Perl、PHP、Ruby、Swift、TypeScript、SQL,甚至 Shell 等十几种语言。
我们目前提供两种 Codex 型号:
最新模型 | 描述 | 最大 TOKENS | 训练日期 |
---|---|---|---|
code-davinci-002 | 功能最强大的 Codex 型号。特别擅长将自然语言翻译成代码。除了补全代码,还支持在代码中插入补全。 | 8,001 tokens | Up to Jun 2021 |
code-cushman-001 | 几乎与 Davinci Codex 一样强大,但速度稍快。这种速度优势可能使其成为实时应用程序的首选。 | Up to 2,048 tokens |
Codex 模型在有限的测试版期间可以免费使用,并且会降低速率限制。当我们了解使用情况时,我们将寻求提供定价以支持广泛的应用程序。
在此期间,只要符合我们的使用政策,欢迎您使用您的应用程序。我们欢迎在早期使用这些模型时提供任何反馈,并期待与社区互动。
特定功能模型
主要的 Codex 模型旨在与文本完成端点一起使用。我们还提供专门用于我们的端点以创建嵌入和编辑代码的模型。
审核
审核模型旨在检查内容是否符合 OpenAI 的使用政策。这些模型提供了查找以下类别内容的分类功能:仇恨/威胁、自残、性/未成年人、暴力图片。
审核模型接受任意大小的输入,该输入会自动分解以修复模型特定的上下文窗口。
模型 | 描述 |
---|---|
text-moderation-latest | 最有能力的审核模型。精度会比稳定模型略高 |
text-moderation-stable | 几乎与最新型号一样强大,但稍旧一些。 |
GPT-3
GPT-3 模型可以理解和生成自然语言。这些模型被更强大的 GPT-3.5 代模型所取代。然而,最初的 GPT-3 基础模型(davinci、curie、ada 和 babbage)是目前唯一可用于微调的模型。
最新模型 | 描述 | 最大 TOKENS | 训练日期 |
---|---|---|---|
text-curie-001 | 非常有能力,比 Davinci 更快,成本更低。 | 2,049 tokens | Up to Oct 2019 |
text-babbage-001 | 能够执行简单的任务,速度非常快,成本更低。 | 2,049 tokens | Up to Oct 2019 |
text-ada-001 | 能够执行非常简单的任务,通常是 GPT-3 系列中最快的型号,而且成本最低。 | 2,049 tokens | Up to Oct 2019 |
davinci | 功能最强大的 GPT-3 模型。可以完成其他模型可以完成的任何任务,而且通常质量更高。 | 2,049 tokens | Up to Oct 2019 |
curie | 能力很强,但比 Davinci 更快,成本更低。 | 2,049 tokens | Up to Oct 2019 |
babbage | 能够执行简单的任务,速度非常快,成本更低。 | 2,049 tokens | Up to Oct 2019 |
ada | 能够执行非常简单的任务,通常是 GPT-3 系列中最快的型号,而且成本最低。 | 2,049 tokens | Up to Oct 2019 |
模型端点兼容性
端点 | 模型名称 |
---|---|
/v1/chat/completions | gpt-4, gpt-4-0314, gpt-4-32k, gpt-4-32k-0314, gpt-3.5-turbo, gpt-3.5-turbo-0301 |
/v1/completions | text-davinci-003, text-davinci-002, text-curie-001, text-babbage-001, text-ada-001, davinci, curie, babbage, ada |
/v1/edits text-davinci-edit-001 | text-davinci-edit-001, code-davinci-edit-001 |
/v1/audio/transcriptions | whisper-1 |
/v1/audio/translations | whisper-1 |
/v1/fine-tunes | davinci, curie, babbage, ada |
/v1/embeddings | text-embedding-ada-002, text-search-ada-doc-001 |
/v1/moderations | text-moderation-stable, text-moderation-latest |
此列表不包括我们的第一代嵌入模型和我们的 DALL·E 模型。
持续的模型升级
随着 gpt-3.5-turbo 的发布,我们的一些模型现在正在不断更新。为了减少模型更改以意外方式影响我们用户的可能性,我们还提供将在 3 个月内保持静态的模型版本。随着模型更新的新节奏,我们还让人们能够贡献评估,以帮助我们针对不同的用例改进模型。
以下模型是将在指定日期弃用的临时快照。如果您想使用最新的模型版本,请使用标准模型名称,如 gpt-4 或 gpt-3.5-turbo。
模型名称 | 弃用日期 |
---|---|
gpt-3.5-turbo-0301 | June 1st, 2023 |
gpt-4-0314 | June 14th, 2023 |
gpt-4-32k-0314 | June 14th, 2023 |
转自 https://m.w3cschool.cn/openai_api/openai-api-introduction.html