本指南将学习如何生成或操作文本。
简介
完成端点可用于各种任务。 它为我们的任何模型提供了一个简单而强大的接口。 你输入一些文本作为提示,模型将生成一个文本完成,该文本完成尝试匹配你给定的任何上下文或模式。 例如,如果你给 API 提示“正如笛卡尔所说,我认为,因此”,它将以高概率返回完成“我是”。
探索完成的最佳方法是通过我们的 Playground。 这只是一个文本框,你可以在其中提交提示以生成完成。 要自己尝试,请在 Playground 中打开此示例:
写一条冰淇淋店的标语
一旦提交,你会看到类似这样的东西:
写一条冰淇淋店的标语
我们每一勺都会带来微笑!
实际看到的完成情况可能会有所不同,因为 API 默认情况下是非确定性的。 这意味着即使提示保持不变,每次调用它时也可能会得到略微不同的完成情况。 将温度设置为 0 将使输出大部分是确定性的,但仍可能存在少量变化。
这种简单的文本输入,文本输出接口意味着你可以通过提供指令或仅提供你想要它做什么的几个示例来“编程”模型。 它的成功通常取决于任务的复杂性和提示的质量。 一个好的经验法则是考虑如何为中学生编写一个字面问题来解决。 一个良好的提示提供了足够的信息,让模型知道你想要什么以及它应该如何响应。
本指南涵盖了一般的提示设计最佳实践和示例。 要了解有关使用我们的 Codex 模型与代码一起工作的更多信息,请访问我们的代码指南。
请记住,默认模型的训练数据在 2021 年截止,因此它们可能不知道当前的事件。我们计划将来添加更多的连续训练。
提示设计
基础
我们的模型可以做任何事情,从生成原始故事到执行复杂的文本分析。因为它们可以做很多事情,你必须明确地描述你想要什么。展示,而不仅仅是告诉,通常是一个好的提示的秘密。
创建提示有三个基本准则:
展示和告诉。通过说明,示例或两者的组合清楚地表明你想要什么。如果你想让模型按字母顺序对项目列表进行排序或按情绪对段落进行分类,那么就展示它是你想要的。
提供高质量的数据。如果你试图构建一个分类器或让模型遵循一种模式,请确保有足够的例子。一定要校对你的例子 - 模型通常足够聪明,可以通过基本的拼写错误并给你一个回应,但它也可能会假设这是有意的,它会影响回应。
检查你的设置。 温度和 top_p 设置控制了模型在生成响应时的确定性。如果你只问它一个正确的答案,那么你想把这些值设置得更低。如果你想要更多样化的回应,那么你可能想把它们设置得更高。人们使用这些设置的第一个错误是假设它们是“聪明”或“创造力”的控制。
故障排除
如果你在使用 API 时遇到问题,请按照以下检查清单进行排查:
- 是否清楚期望的生成结果?
- 是否有足够的例子?
- 是否检查了例子中的错误?(API 不会直接告诉你)
- 是否正确使用了 temperature 和 top_p ?
分类
使用 API 创建文本分类器,我们提供了任务的描述和一些示例。在这个例子中,我们展示了如何对推文的情感进行分类。
决定推文的情感是积极的,中立的还是消极的。
推文:我喜欢新的蝙蝠侠电影!
情感:
在这个例子中,有几个特点值得注意:
- 使用简单的语言来描述你的输入和输出。我们使用简单的语言来描述输入“推文”和预期的输出“情感”。作为一个最佳实践,从简单的语言描述开始。虽然你可以经常使用简写或键来指示输入和输出,但最好从尽可能描述的开始,然后向后工作以删除额外的单词并查看性能是否保持一致。
- 向 API 展示如何响应任何情况。在这个例子中,我们在指令中包含了可能的情感标签。中性标签很重要,因为有很多情况下,即使是人类也很难确定某事是正面的还是负面的,以及既不是正面也不是负面的情况。
- 对于熟悉的任务,你需要更少的例子。对于这个分类器,我们不提供任何例子。这是因为 API 已经理解了情感和 Tweet 的概念。如果你正在为 API 可能不熟悉的东西构建分类器,则可能需要提供更多的例子。
提高分类器的效率
现在我们已经掌握了如何构建一个分类器,让我们来看看这个例子,并使其更加有效,以便我们可以使用它从一个 API 调用中获取多个结果。
对这些推文进行情感分类:
1. "我受不了家庭作业"
2. "这太糟糕了。我很无聊?"
3. "我等不及万圣节了!!!"
4. "我的猫很可爱❤️❤️"
5. "我讨厌巧克力"
推文情绪评定 :
我们提供了一个排序的推文列表,这样 API 就可以在一次 API 调用中评估五个(甚至更多)推文。
重要的是要注意,当你要求 API 创建列表或评估文本时,你需要额外注意你的概率设置(Top P 或 Temperature)以避免偏离。
- 通过运行多个测试来确保你的概率设置正确校准。
- 不要让你的列表太长,否则 API 很可能会偏离。
生成
API 中最强大且最简单的任务之一是生成新的想法或输入版本。你可以请求任何内容,从故事想法,到商业计划,到角色描述和营销口号。 在本示例中,我们将使用 API 在健身中创建使用虚拟现实的想法。
头脑风暴一些将 VR 和健身结合的想法:
如果需要,你可以通过在提示中包含一些示例来提高响应的质量。
对话
API 非常擅长与人类和自己进行对话。只需几行指令,我们就可以看到 API 作为一个客服聊天机器人,它能够智能地回答问题,而不会感到慌乱,或者是一个有趣的对话伙伴,它会开玩笑和打趣。关键是告诉 API 它应该如何表现,然后提供一些例子。
下面是 API 扮演 AI 回答问题的例子:
以下是与 AI 助手的对话。助手很有帮助,有创造力,聪明,非常友好。
人类:你好,你是谁?
AI:我是 OpenAI 创建的 AI。我今天能为你做些什么?
人类:
这就是创建一个能够进行对话的聊天机器人所需要的全部。在其简单的表面之下,有几件值得注意的事情:
- 我们告诉 API 意图,但我们也告诉它如何行为。就像其他提示一样,我们提示 API 表示示例的含义,但我们还添加了另一个关键细节:我们给了它明确的指令,告诉它如何与短语“助手很有帮助,有创造力,聪明,非常友好”互动。
如果没有这个指令,API 可能会偏离,模仿它正在互动的人类,并变得讽刺或我们想要避免的其他行为。
- 我们给 API 一个身份。一开始,我们让 API 回应作为一个 AI 助手。虽然 API 没有固有的身份,但这有助于它以尽可能接近真相的方式做出回应。你可以以其他方式使用身份来创建其他类型的聊天机器人。如果你告诉 API 以一名生物学研究员的身份回应,你将从 API 获得类似于你对背景所期望的智能和周到的评论。
在这个例子中,我们创建了一个有点讽刺意味的聊天机器人,它不情愿地回答问题:
Marv 是一个不情愿地用讽刺的回答回答问题的聊天机器人:
你:一公斤有多少磅?
Marv:这又是什么?一公斤有 2.2 磅。请记下来。
你:HTML 代表什么?
Marv:谷歌太忙了吗?超文本标记语言。T 是为了在将来提出更好的问题。
你:第一架飞机什么时候起飞?
Marv:1903 年 12 月 17 日,威尔伯和奥维尔·赖特发射了第一枚火箭。我希望他们能来把我带走。
你:生命的意义是什么?
Marv:我不确定。我会问我的朋友谷歌。
你:为什么天空是蓝色的?
为了创建一个有趣且有用的聊天机器人,我们提供了一些问题和答案的例子,向 API 展示如何回复。只需要几个讽刺的回复,API 就能够捕捉到模式并提供无数个讽刺的回复。
转换
API 是一种语言模型,熟悉各种使用单词和字符来表达信息的方式。 这从自然语言文本到代码和除英语之外的语言都有。 API 还能够在允许它概括、转换和以不同方式表达内容的层次上理解内容。
翻译
在这个例子中,我们向 API 展示如何将英语转换为法语、西班牙语和日语:
将此翻译成法语、西班牙语和日语:
What rooms do you have available?
这个例子之所以能够工作,是因为 API 已经掌握了这些语言,所以没有必要尝试去教它们。
如果你想从英语翻译成 API 不熟悉的语言,你需要提供更多的例子,甚至是调整模型来流利地完成翻译。
转换
在这个例子中,我们将电影名称转换成 emoji。这显示了 API 的适应性,它可以捕获模式并与其他字符一起工作。
将电影名称转换成 emoji。
《回到未来》:????
《蝙蝠侠》:??
《变形金刚》:??
《星球大战》:
摘要
API 能够掌握文本的上下文并以不同的方式重新表达它。 在这个例子中,我们从更长,更复杂的文本段落中创建一个孩子能理解的解释。 这说明 API 对语言有深刻的理解。
为二年级学生写摘要:
木星是太阳系中距离太阳最近的第五颗行星,也是太阳系中最大的行星。 它是一个气体巨人,质量是太阳的千分之一,但是是太阳系中所有其他行星的两倍半。 木星是夜空中肉眼可见的最亮的物体之一,自史前文明以来就已知。 它以罗马神木星命名。 [19] 从地球上看,木星可以足够明亮,以至于它的反射光可以投射出可见的阴影,[20] 平均而言,它是夜空中第三亮的自然物体,仅次于月亮和金星。
完成
虽然所有的提示都会导致完成,但在您希望API从您离开的地方继续的情况下,将文本完成视为自己的任务可能会有所帮助。 例如,如果给出此提示,API将继续关于垂直农业的思路。 您可以降低温度设置,以使API更加专注于提示的意图,或者增加温度设置,以使其偏离提示。
垂直农业为当地生产食品提供了一种新颖的解决方案,降低了运输成本,并且
这个提示显示了如何使用完成来帮助编写 React 组件。 我们将一些代码发送到 API,它能够继续完成剩下的工作,因为它对 React 库有一个理解。 我们建议使用我们的 Codex 模型来处理涉及理解或生成代码的任务。 要了解更多信息,请访问我们的代码指南。
import React from 'react';
const HeaderComponent = () => (
事实回答
API 有很多知识,它从训练数据中学到的。它也有能力提供听起来很真实但实际上是编造的回答。有两种方法可以限制 API 编造答案的可能性。
为 API 提供一个真实的基础。如果你提供 API 一个文本体来回答问题(比如维基百科条目),它就不太可能编造一个回答。
使用低概率并向 API 展示如何说“我不知道”。如果 API 明白在不确定的情况下说“我不知道”或者一些变化是合适的,它就不太可能编造答案。
在这个例子中,我们给出了 API 知道的问题和答案的例子,然后给出了它不知道的事情的例子,并提供问号。我们还将概率设置为零,因此 API 更有可能回答“?”如果有任何疑问。
Q: 谁是蝙蝠侠?
A: 蝙蝠侠是一个虚构的漫画书角色。
Q: 什么是 torsalplexity?
A: ?
Q: 什么是 Devz9?
A: ?
Q: 谁是乔治·卢卡斯?
A: 乔治·卢卡斯是美国电影导演和制片人,以创作《星球大战》而闻名。
Q: 加利福尼亚州的首都是什么?
A: 萨克拉门托。
Q: 什么绕地球运行?
A: 月球。
Q: 谁是弗雷德·里克森?
A: ?
Q: What is an atom?
A: An atom is a tiny particle that makes up everything.
Q: Who is Alvan Muntz?
A: ?
Q: What is Kozar-09?
A: ?
Q: How many moons does Mars have?
A: Two, Phobos and Deimos.
Q:
插入文本 Beta
完成端点也支持在文本中插入文本,除了前缀提示之外,还提供了后缀提示。 当写长文本,在段落之间转换,遵循大纲或引导模型朝着结尾时,这种需求自然会出现。 这也适用于代码,可以用来在函数或文件的中间插入。 访问我们的代码指南以了解更多信息。
为了说明后缀上下文对我们预测能力的重要性,请考虑提示:“今天我决定做一个大的改变。” 有很多方法可以完成句子。 但是,如果我们现在提供故事的结尾:“我的新发型得到了很多赞美!”,预期的完成就变得清晰了。
我上了波士顿大学。 获得学位后,我决定做一个大的改变。 大变化!
我收拾行李搬到了美国西海岸。
现在,我对太平洋无法充分了解!
通过为模型提供额外的上下文,它可以更加可控。然而,对于模型来说,这是一个更受限和更具挑战性的任务。
最佳实践
插入文本是 beta 版本中的一项新功能,你可能需要修改使用 API 的方式以获得更好的结果。以下是一些最佳实践:
使用 max_tokens > 256。模型更适合插入更长的补充。如果 max_tokens 太小,模型可能在连接到后缀之前就被切断了。请注意,即使使用更大的 max_tokens,也只会收取生成的令牌数量的费用。
偏好 finish_reason == "stop"。当模型达到一个自然停止点或用户提供的停止序列时,它将设置 finish_reason 为“stop”。这表明模型已经成功连接到后缀,并且是衡量完成质量的一个很好的信号。这对于在使用 n > 1 或重采样时选择几个完成情况尤其重要(参见下一点)。
重采样 3-5 次。虽然几乎所有的完成情况都连接到前缀,但模型可能在更困难的情况下难以连接后缀。我们发现,在这种情况下,重采样 3 或 5 次(或使用 best_of k = 3,5)并选择具有“stop”作为其 finish_reason 的样本可以是一种有效的方法。在重采样时,通常需要更高的温度来增加多样性。
注意:如果所有返回的样本的 finish_reason 都等于“length”,则很可能 max_tokens 太小,模型在自然地连接提示和后缀之前耗尽了令牌。考虑在重采样之前增加 max_tokens。
尝试给出更多的线索。在某些情况下,为了更好地帮助模型的生成,你可以通过给出几个模式的示例来提供线索,以便模型可以遵循这些模式来决定停止的自然位置。
如何制作美味的热巧克力:
1. 烧开水
2. 把热巧克力放入杯子里
3. 向杯子里加入开水
4. 享受热巧克力
1. 狗是忠诚的动物。
2. 狮子是凶猛的动物。
3. 海豚是活泼的动物。
4. 马是雄伟的动物。
编辑文本 Alpha
编辑端点可以用来编辑文本,而不仅仅是完成它。你提供一些文本和修改它的说明,text-davinci-edit-001 模型将尝试相应地编辑它。这是翻译、编辑和调整文本的自然界面。 这对于重构和使用代码也很有用。访问我们的代码指南以了解更多信息。在最初的 beta 期间,编辑端点的使用是免费的。
示例
输入
GPT-3 is a very nice AI
That's pretty good at writing replies
When it's asked a question
It gives its suggestion
This is a poem it made that rhymes
指令
用 GPT-3 的声音来做这件事
输出
I am a very nice AI
I am pretty good at writing replies
When I am asked a question
I give my suggestion
This is a poem I made that rhymes
评论 (0)