介绍
概述
OpenAI API 可应用于几乎涉及自然语言、代码或图像的任何任务。我们提供不同功率级别的模型,适用于不同的任务,同时还能够微调您自己的定制模型。这些模型可用于从内容生成到语义搜索和分类等各种用途。
关键概念
我们建议完成我们的快速入门教程,通过互动式的实例来了解关键概念。
提示 prompts
设计提示本质上就是“编程”模型,通常是通过提供一些指令或几个示例来实现的。这与大多数其他自然语言处理服务不同,它们设计用于单一任务,例如情感分类或命名实体识别。相反,完成和聊天完成端点可用于几乎任何任务,包括内容或代码生成、摘要、扩展、对话、创意写作、风格转移等。
标记 tokens
我们的模型通过将文本分解为标记来理解和处理文本。标记可以是单词,也可以是字符块。例如,“汉堡包”被分解为标记“ham”、“bur”和“ger”,而像“梨”这样的短且常见的词是一个标记。许多标记以空格开头,例如“ hello”和“ bye”。
在给定的 API 请求中处理的标记数量取决于您的输入和输出长度。粗略地说,对于英文文本,1 个标记约为 4 个字符或 0.75 个单词。需要注意的一个限制是,您的文本提示和生成的完成组合必须不超过该模型的最大上下文长度(对于大多数模型,这是 2048 个标记或约 1500 个单词)。查看我们的分词器工具,了解有关文本如何转换为标记的更多信息。
模型 Models
该 API 由一组具有不同能力和价格点的模型驱动。 GPT-4 是我们最新、最强大的模型。 GPT-3.5-Turbo 是 ChatGPT 的模型,专为对话格式进行了优化。要了解有关这些模型及其他内容的详细信息,请访问我们的模型文档。
快速入门
OpenAI 训练了先进的语言模型,非常擅长理解和生成文本。我们的 API 提供对这些模型的访问,并可用于解决几乎涉及处理语言的任何任务。
在这个快速入门教程中,您将构建一个简单的示例应用程序。在此过程中,您将学习关键概念和技术,这些技术是使用 API 处理任何任务(包括内容生成、摘要、分类、情感分析、数据提取、翻译等)的基础。
介绍
完成端点是我们 API 的核心,提供一个极其灵活和强大的简单接口。您输入一些文本作为提示,API 将返回一个文本完成,尝试匹配您给出的任何指令或上下文。
prompt 提示 为一家冰淇淋店写一个标语。 ompletion 完成 我们每勺都送上微笑!
您可以将此视为非常先进的自动完成-模型处理您的文本提示,并尝试预测最有可能出现的内容。
从一条指令开始
想象一下,您想创建一个宠物名称生成器。从零开始想出名称很困难!
首先,您需要一个清晰表明您想要什么的提示。让我们从一条指令开始。提交此提示以生成您的第一个完成。
建议一匹马的名字。
不错!现在,请尝试使您的指令更具体。
建议一匹黑马的名字。 正如您所看到的,将一个简单的形容词添加到我们的提示中会改变生成的完成结果。设计您的提示本质上就是“编程”模型。
添加一些示例
制作好的指令对于获得良好的结果非常重要,但有时这还不够。让我们试着使您的指令更复杂一些。
建议三个马超级英雄的名字。 这个完成并不完全符合我们的要求。这些名称相当通用,似乎模型没有领会我们指令中马的部分。让我们看看是否可以让它提出一些更相关的建议。
在许多情况下,向模型展示和告诉您想要的内容都是有帮助的。将示例添加到提示中可以帮助传达模式或细微差别。尝试提交包括几个示例的此提示,以帮助模型理解您的要求。
建议三个超级动物的名字。
动物:猫 名称:Captain Sharpclaw, Agent Fluffball, The Incredible Feline 动物:狗 名称:Ruff the Protector, Wonder Canine, Sir Barks-a-Lot 动物:马 名称: 不错!为给定的输入添加预期输出的示例有助于模型提供我们正在寻找的类型的名称。
调整您的设置
提示设计不是您可以使用的唯一工具。您还可以通过调整设置来控制完成。最重要的设置之一称为温度。
您可能已经注意到,如果在上面的示例中多次提交相同的提示,则模型总是返回相同或非常相似的完成。这是因为您的温度设置为 0。
尝试将温度设置为 1,并重新多次提交相同的提示。
建议三个超级动物的名字。
动物:猫 名称:Captain Sharpclaw, Agent Fluffball, The Incredible Feline 动物:狗 名称:Ruff the Protector, Wonder Canine, Sir Barks-a-Lot 动物:马 名称: 温度 1 看看发生了什么?当温度大于 0 时,提交相同的提示每次都会产生不同的完成结果。
请记住,模型会预测哪些文本最有可能跟随前面的文本。温度是介于 0 和 1 之间的值,实际上让您控制模型在进行这些预测时应该有多大的信心。降低温度意味着它将冒更少的风险,完成将更准确和确定。增加温度将导致更多样化的完成。
深入了解 理解标记和概率 对于宠物名称生成器,您可能希望能够生成许多名称想法。适度的温度为 0.6 应该很好。
构建应用(略)
定价(略)
结束语(略)
库
官方库 社区库 platform.openai.com/docs/librar…
模型Models
概览
OpenAI API 是由不同功能和价格点的多样化模型驱动的。您还可以通过微调对我们最初的基础模型进行有限的自定义,以适应您的特定用例。
模型端点兼容性
在 OpenAI API 中,不同模型的端点之间可能会有向后不兼容性。这意味着,如果您将一个旧版本的模型端点更新到新版本,您的代码可能需要进行更改以适应新的 API 行为。我们建议您在升级时查看最近的变更日志,并仔细阅读 API 文档中关于每个模型端点的详细信息和参数设置。
GPT-4
platform.openai.com/docs/models…
不同的模型介绍省略
教程 (重点)
通过逐步构建真实的 AI 应用程序来开始使用 OpenAI API。 网站 Q&A with Embeddings 学习如何构建一个可以回答有关您的网站问题的 AI。 即将推出 学习如何构建和部署一个可以回答有关本地文件问题的 AI。 即将推出 学习如何构建和部署一个可以理解多个知识库的 AI 聊天机器人。 寻找更多想法?请查看我们的示例库或 GitHub 上的 OpenAI Cookbook。
指南
文本补全
简介
学习如何生成或操作文本
简介 完成端点可以用于各种任务。它为我们的任何模型提供了一个简单但强大的接口。您将一些文本作为提示输入,模型将生成一个文本补全,试图匹配您给出的任何上下文或模式。例如,如果您给 API 提供提示“正如笛卡尔所说,我思故我在”,它将以高概率返回完成“我在” 。
开始探索完形图最好的方法是通过我们的 Playground。这只是一个文本框,您可以提交提示来生成完形图。您可以从以下示例开始:
为一家冰激凌店写一个标语。
提交后,您会看到以下内容:
为一家冰激凌店写一个标语。 我们用每一勺都带着微笑的方式为您服务!
实际的完成可能会有所不同,因为默认情况下 API 是非确定性的。这意味着,即使您的提示保持不变,每次调用它时您可能会得到稍微不同的完成。将温度设置为 0 将使输出基本确定,但仍可能存在一些小的变化。
这个简单的文本输入输出界面意味着您可以通过提供指令或仅提供一些示例来“编程”模型。它的成功通常取决于任务的复杂性和提示的质量。一个好的经验法则是考虑如何为初中生编写一个单词问题来解决。一个写得好的提示提供足够的信息,让模型知道您想要什么以及它应该如何回应。
本指南涵盖了通用提示设计最佳实践和示例。要了解有关使用我们的 Codex 模型进行代码工作的更多信息,请访问我们的代码指南。
提示设计
基础知识 我们的模型可以从生成原创故事到执行复杂的文本分析等各种任务。由于它们可以做很多事情,所以您必须明确描述您想要什么。通常,展示而不仅仅是告诉,是一个好的提示的秘诀。
创建提示有三个基本准则:
指明要求。通过说明、示例或两者结合来明确您想要什么。如果您希望模型按字母顺序排列项目列表或将段落按情感分类,请明确告诉它。
提供高质量的数据。如果您尝试构建分类器或让模型遵循一种模式,请确保有足够的示例。一定要校对您的示例 - 模型通常聪明到足以看穿基本拼写错误并给出回应,但它也可能认为这是有意的,并影响回应。
检查您的设置。温度和 top_p 设置控制模型在生成响应时的确定性。如果您要求它回应只有一个正确答案的问题,则需要将这些设置较低。如果您正在寻找更多不同的响应,则可能需要将它们设得更高。人们使用这些设置的最大错误就是认为它们是“聪明”或“创造力”的控制器。
故障排除 如果您无法使 API 如预期执行,请按照以下检查清单进行操作:
是否明确了预期的生成要求? 是否有足够的示例? 您是否检查示例是否有误?(API 不会直接告诉您) 您是否正确使用了温度和 top_p?
插入文本
完成端点还支持通过提供后缀提示来在文本中插入文本,除了前缀提示。当撰写长篇文本、在段落之间转换、遵循大纲或引导模型走向结尾时,自然需要这种功能。它也适用于代码,并可用于在函数或文件的中间插入文本。访问我们的代码指南以了解更多信息。
为了说明后缀上下文对我们预测能力的重要性,请考虑提示“今天我决定做出一个重大的改变”。有很多方式可以想象完成这个句子。但是,如果我们现在提供故事的结局:“我的新发型得到了很多赞美!”,那么预期的补全就变得清晰了。
我上大学去了波士顿大学。毕业后,我决定做出改变。一个很大的改变!
我收拾好行李,搬到了美国西海岸。
现在,我无法喜欢太平洋!
通过为模型提供额外的上下文,它可以更容易地被控制。然而,这对于模型来说是一个更加受限制和具有挑战性的任务。
编辑文本
聊天补全
使用 OpenAI 聊天 API,您可以构建自己的应用程序,使用 gpt-3.5-turbo 和 gpt-4 等模型来完成以下任务:
起草电子邮件或其他写作 编写 Python 代码 回答关于一组文档的问题 创建对话代理 为您的软件提供自然语言界面 在各种学科中进行教学 翻译语言 为视频游戏模拟角色等等
本指南解释了如何调用基于聊天的语言模型的 API,并分享了获取良好结果的技巧。您还可以在 OpenAI Playground 中尝试新的。
介绍
聊天模型将一系列消息作为输入,并返回由模型生成的消息作为输出。
虽然聊天格式旨在使多轮对话变得简单,但它也适用于没有任何对话的单次任务(例如以前由指令跟随模型如 text-davinci-003 提供服务的任务)。
一个示例 API 调用如下所示:
import openai
openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
主要输入是消息参数。消息必须是一个消息对象数组,其中每个对象都有一个角色(“system”、“user”或“assistant”)和内容(消息内容)。对话可以只有一个消息,也可以填满许多页面。
通常,会先以系统消息格式化对话,然后是交替的用户和助手消息。
系统消息有助于设置助手的行为。在上面的示例中,助手被指示为“您是一个有帮助的助手”。
用户消息有助于指导助手。它们可以由应用程序的最终用户生成,也可以由开发人员设置为指令。
助手消息有助于存储先前的响应。它们还可以由开发人员编写,以帮助提供所需行为的示例。
包括对话历史记录有助于当用户指令涉及先前的消息时。在上面的示例中,用户的最后一个问题“它在哪里播放?”只有在关于 2020 年世界大赛的先前消息的情况下才有意义。因为模型没有过去请求的记忆,所有相关信息都必须通过对话提供。如果一个对话不能适合模型的令牌限制,它将需要以某种方式缩短。
响应格式
一个示例的 API 响应如下所示:
{
'id': 'chatcmpl-6p9XYPYSTTRi0xEviKjjilqrWU2Ve',
'object': 'chat.completion',
'created': 1677649420,
'model': 'gpt-3.5-turbo',
'usage': {'prompt_tokens': 56, 'completion_tokens': 31, 'total_tokens': 87},
'choices': [
{
'message': {
'role': 'assistant',
'content': 'The 2020 World Series was played in Arlington, Texas at the Globe Life Field, which was the new home stadium for the Texas Rangers.'},
'finish_reason': 'stop',
'index': 0
}
]
}
在 Python 中,可以使用 response['choices'][0]['message']['content'] 提取助手的回复。
每个响应都将包括一个 finish_reason。finish_reason 的可能值有:
stop:API 返回完整的模型输出。 length:由于 max_tokens 参数或令牌限制而导致不完整的模型输出。 content_filter:由于我们内容过滤器的标志而省略的内容。 null:API 响应仍在进行中或不完整。
令牌管理
语言模型以称为令牌的块读取文本。在英语中,令牌可以短至一个字符或长至一个单词(例如 a 或 apple),在某些语言中,令牌甚至可以比一个字符更短或比一个单词更长。
例如,字符串“ChatGPT is great!”编码成六个令牌:["Chat", "G", "PT", " is", " great", "!"]。
API 调用中的总令牌数会影响以下内容:
您的 API 调用费用,因为您按每个令牌支付费用。 您的 API 调用时间,因为编写更多的令牌需要更多时间。 您的 API 调用是否起作用,因为总令牌必须低于模型的最大限制(gpt-3.5-turbo-0301 的最大限制为 4096 个令牌)。 输入和输出令牌都计入这些数量。例如,如果您的 API 调用在消息输入中使用了 10 个令牌,并且您在消息输出中收到了 20 个令牌,您将被收取 30 个令牌的费用。
要查看 API 调用使用了多少令牌,请检查 API 响应中的 usage 字段(例如 response['usage']['total_tokens'])。
像 gpt-3.5-turbo 和 gpt-4 这样的聊天模型以与其他模型相同的方式使用令牌,但由于它们是基于消息格式化的,因此更难计算会话使用了多少个令牌。
要在不进行 API 调用的情况下查看文本字符串中有多少个令牌,请使用 OpenAI 的 tiktoken Python 库。可以在 OpenAI Cookbook 的计数带有 tiktoken 的令牌的指南中找到示例代码。
传递给 API 的每个消息都消耗内容、角色和其他字段中的令牌数量,以及一些额外的幕后格式化令牌。这可能会在未来稍微改变。
如果对话中的令牌数量过多无法适应模型的最大限制(例如 gpt-3.5-turbo 的 4096 个令牌),则必须将文本截断、省略或缩小,直至符合要求。请注意,如果从消息输入中删除消息,则模型将失去对它的所有知识。
还要注意,非常长的对话更有可能收到不完整的回复。例如,一个长度为 4090 个令牌的 gpt-3.5-turbo 对话只能在回复了 6 个令牌后被截断。
指导聊天模型
指导模型的最佳实践可能会随着模型版本的更改而改变。下面的建议适用于 gpt-3.5-turbo-0301,可能不适用于未来的模型。
许多对话以系统消息开始,以温和地指导助手。例如,以下是 ChatGPT 使用的其中一条系统消息:
You are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible. Knowledge cutoff: {knowledge_cutoff} Current date: {current_date}
总的来说,gpt-3.5-turbo-0301 并不会过于关注系统消息,因此重要的指令通常最好放在用户消息中。
如果模型没有生成您想要的输出,请随时进行迭代并尝试潜在的改进。您可以尝试以下方法:
使您的指令更加明确。 指定您想要的答案格式。 要求模型在确定答案之前逐步思考或辩论利弊。 有关更多提示工程方面的想法,请阅读 OpenAI Cookbook 关于提高可靠性的技术指南。
除了系统消息外,温度和最大令牌数是开发人员影响聊天模型输出的众多选项之一。对于温度,更高的值(如 0.8)会使输出更随机,而更低的值(如 0.2)会使其更加集中和确定性。在最大令牌数的情况下,如果您想将响应限制为某个长度,则可以将最大令牌数设置为任意数字。例如,如果您将最大令牌数值设置为 5,则可能会出现问题,因为输出将被截断,结果对用户来说没有意义。
图像生成(略)
学习如何使用我们的 DALL·E 模型生成或操作图像。
微调
学习如何为您的应用程序定制模型。