跳转到内容

文本补全(Text completion)

学习如何生成或操作文本

简介

完成端点可以用于各种各样的任务。它提供了一个简单但功能强大的接口,可以连接到我们的任何模型。您将一些文本作为提示输入,模型将生成一个文本补全(Text completion),试图匹配您给它的任何上下文或模式。例如,如果您向API提供提示“如笛卡尔所说,我思故我在”,它将高概率返回完成“我是”。

开始探索完成的最佳方式是通过我们的Playground。它只是一个文本框,您可以在其中提交提示以生成一个完成。您可以从以下示例开始:

为一个冰激凌店写一个标语。 

一旦您提交,您将看到类似于以下内容的内容:

为一个冰激凌店写一个标语。 
我们用每一勺冰淇淋提供笑容!

您看到的实际完成可能会有所不同,因为API默认情况下是非确定性的。这意味着,即使您的提示保持不变,每次调用时您可能会得到稍微不同的完成。将温度设置为0将使输出大部分确定性,但可能仍会有一小部分变化。

这个简单的文本输入和输出界面意味着您可以通过提供指令或只提供一些您想让它完成的示例来“编程”模型。它的成功通常取决于任务的复杂性和您提示的质量。一个好的经验法则是想想如果您要为一个中学生写一个文字问题,让他们来解决。一个写得好的提示提供了足够的信息,让模型知道您想要什么以及它应该如何回应。

本指南涵盖了一般提示设计的最佳实践和示例。要了解有关使用我们的Codex模型进行代码工作的更多信息,请访问我们的代码指南。

请记住,默认模型的训练数据截止到2021年,因此它们可能不知道当前事件的情况。我们计划在未来添加更多的持续培训。

提示词(Prompt)设计

基础知识

我们的模型可以完成从生成原始故事到执行复杂文本分析的所有任务。因为它们可以完成许多事情,所以你必须明确描述你想要的内容。显示,而不是仅仅告诉,通常是一个好提示的秘诀。

创建提示的三个基本准则如下:

展示和告诉。通过说明、示例或两者的结合清楚地表明你想要什么。如果你想让模型按字母顺序对一系列项目进行排名,或者将段落按情感进行分类,请向它展示你想要的内容。

提供高质量数据。如果你试图构建分类器或让模型遵循某种模式,请确保有足够的示例。一定要校对你的示例——模型通常足够聪明,可以看穿基本的拼写错误并给出回答,但它也可能认为这是有意的,从而影响回答。

检查你的设置温度和top_p设置控制模型在生成响应时的确定性。如果你要求它生成只有一个正确答案的响应,那么你应该将这些设置较低。如果你想要更多样化的响应,那么你可能需要将它们设置得更高。人们在使用这些设置时犯的第一个错误是认为它们是“聪明度”或“创造力”控制。

故障排除

如果您无法如预期一般让API正常工作,请遵循以下清单:

  1. 是否清楚生成的预期结果?
  2. 是否提供足够的示例?
  3. 您是否检查示例中是否有错误?(API不会直接告诉您)
  4. 您是否正确使用温度和top_p?

分类

使用API创建文本分类器时,我们提供了任务描述和几个示例。在这个例子中,我们展示如何对推特的情感进行分类。

决定一条推特的情感是积极的,中性的还是消极的。
推特:我喜欢新的蝙蝠侠电影! 情感: 

在这个例子中,有几个需要注意的要点:

  1. 使用简明易懂的语言描述输入和输出。我们用简明易懂的语言描述了输入“推特”和预期输出“情感”。作为最佳实践,应该从最详细的描述开始。虽然您可以使用缩写或关键词表示输入和输出,但最好先尽可能详细地描述,然后逐步去除多余的词汇以检查性能是否保持一致。
  2. 向API展示如何应对任何情况。在这个例子中,我们在指令中包含了可能的情感标签。中性标签非常重要,因为即使是人类在某些情况下也很难确定某些事物是积极的还是消极的,或者既不积极也不消极。
  3. 对于熟悉的任务,您需要更少的示例。对于这个分类器,我们没有提供任何示例。这是因为API已经了解情感和推特的概念。如果您正在构建一个API可能不熟悉的分类器,可能需要提供更多示例。

提高分类器的效率

现在我们已经掌握了如何构建分类器,让我们以此为例,使其更加高效,以便我们可以在一个API调用中获取多个结果。

分类以下推特的情感:

“我受不了作业” 
“这太糟糕了,我很无聊 😠” 
“我迫不及待地等待万圣节!” 
“我的猫咪可爱 ❤️❤️” 
“我讨厌巧克力” 推特情感评级:

我们提供了一个带编号的推特列表,这样API就可以在一个API调用中评估五个(甚至更多)推特。

需要注意的是,当您要求API创建列表或评估文本时,需要特别注意您的概率设置(Top P或温度)以避免漂移。

  • 通过运行多个测试来确保您的概率设置已经正确校准。
  • 不要让列表过长,否则API可能会漂移。

生成

API最强大,同时也是最简单的任务之一,是生成输入的新思想或版本。您可以提出任何问题,从故事想法、业务计划,到角色描述和营销口号。在本示例中,我们将使用API创建使用虚拟现实进行健身的创意。

头脑风暴一些结合VR和健身的想法

如果需要,您可以通过在提示中包含一些示例来提高响应质量。

对话

API非常擅长与人类甚至自己进行对话。只需几行指令,我们就可以看到API作为智能客服聊天机器人,不会感到慌乱,而是能够智能地回答问题,或者作为一个机智的对话伙伴,制造笑话和双关语。关键在于告诉API它应该如何行事,然后提供一些例子。

以下是与AI助手进行的对话示例。助手是乐于助人,有创意,聪明且非常友好。
人类:你好,你是谁? AI:我是OpenAI创建的AI。我今天能帮你什么忙吗? 
人类:

这就是创建一个能够进行对话的聊天机器人所需的全部。在其简单性的背后,有几件值得关注的事情:

  1. 我们告诉API意图,但我们也告诉它如何行事。就像其他提示一样,我们提示API表示什么,但我们还添加了另一个关键细节:我们明确告诉它如何与短语“助手乐于助人,有创意,聪明且非常友好”交互。 如果没有这个指令,API可能会偏离轨道,模仿它正在与之交互的人,并变得讽刺或其他我们想要避免的行为。
  2. 我们给API赋予一个身份。在开始时,我们让API作为一个AI助手回答。虽然API没有内在的身份,但这有助于它以尽可能接近真相的方式进行回答。您可以在其他方面使用身份创建其他类型的聊天机器人。如果您告诉API以生物学研究科学家的身份回答,您将得到类似于该背景下所期望的智能和周到的评论。
Marv是一个聊天机器人,不情愿地用讽刺的回答来回答问题:
你:一公斤有多少磅?
Marv:又来了?一公斤等于2.2磅。请记下这个。 
你:HTML代表什么? 
Marv:Google太忙了吗?超文本标记语言。T代表着未来要问更好的问题。 
你:第一架飞机是什么时候飞行的? 
Marv:1903年12月17日,威尔伯和奥维尔·莱特进行了第一次试飞。我希望他们能过来把我带走。
你:生命的意义是什么?
Marv: 我不确定。我会问我的朋友谷歌。 
你: 为什么天空是蓝色的? 

为了创建一个有趣且有些有用的聊天机器人,我们提供几个问题和答案示例,向API展示如何回复。只需要几个讽刺性的回应,API就能掌握模式并提供无数挖苦人心的反应。

转换

API是一种语言模型,熟悉各种用于表达信息的单词和字符的方式。这包括自然语言文本、代码以及英语以外的其他语言。该API还能够理解内容,从而使其能够总结、转换并以不同的方式表达它。

翻译

在此示例中,我们展示了如何将API从英语转换为法语、西班牙语和日本语:

 将以下内容翻译成法语、西班牙语和日本語: What rooms do you have available? 

这个例子之所以有效,是因为API已经掌握了这些语言,所以无需尝试教授它们。 如果您想将英文翻译成API不熟悉的一种语言,则需要提供更多示例甚至微调模型才能流利地完成。

转换

在这个例子中,我们将电影的名称转换成表情符号。这展示了API适应捕捉模式和与其他字符一起工作的能力。

将电影标题转换为表情符号。 回到未来:👨👴🚗🕒 蝙蝠侠:🤵🦇 变形金刚:🚗🤖 星球大战: 

总结

该API能够理解文本的上下文并以不同方式重新表述它。在这个例子中,我们从一个更长、更复杂的文本段落中创建一个孩子可以理解的解释。这说明了该API对语言有深刻的理解。

 为二年级学生概括一下: 木星是距离太阳第五远且体积最大的行星。
 它是气态巨行星,质量仅相当于太阳质量千分之一,但比其他所有行星加起来还要多两倍半。
 木星是天空中肉眼可见度最高亮度物体之一,在记载历史之前就已被古代文明所知晓,
 并以罗马神话中众神之王朱庇特(Jupiter)命名[19] 。
 从地球上观察时,木星足以发出足以产生可见阴影反射光线,并且平均而言,
 在月亮和金星后是天空自然物体中第三亮的。

完成

虽然所有提示都会导致完成,但在您希望API接替您工作时,请考虑将文本补全(Text completion)视为其自身任务。例如,如果给定此提示,则API将继续关于垂直农业方面思路训练。您可以降低温度设置以使API更专注于提示意图或增加温度设置以使其偏离主题。

 垂直农业提供了一个新颖的解决方案来实现食品本地化生产、减少运输成本和... 

以下提示显示如何使用完整性帮助编写React组件。我们向API发送一些代码,并且由于它具有React库的理解而能够继续执行剩余部分。我们建议使用我们Codex模型处理涉及理解或生成代码等任务。欲了解详情,请访问我们 的代码指南 。

 import React from 'react'; const HeaderComponent = () => ( 

事实回答 该API具有从数据学习到很多知识点,并提供听起来非常真实但实际上是虚构答案的能力 。限制 API 制造答案可能性有两种方法:

  1. 为 API 提供基础事实信息, 如果你提供给 API 要回答问题(如 Wikipedia 条目) 的正文内容, 它就不那么容易胡说八道.
  2. 使用较低概率并告诉 API 如何说“我不知道”。如果 API理解在某些情况下对响应不确定性较小时说“我不知道”或某种变化合适,则会倾向于少制造答案. 在这个例子里面, 我们给出了 API 已经掌握问题和答案样例, 并举出无法得知问题样例并添加问号. 我们还把概率设定为零, 这样只要存在任何疑问, API 就更可能用 "?" 回复。
问:谁是蝙蝠侠?
答:蝙蝠侠是一个虚构的漫画人物。
问:什么是torsalplexity?
答:?
问:什么是Devz9?
答:?
问:乔治·卢卡斯(George Lucas)是谁?
答:乔治·卢卡斯(George Lucas)是美国电影导演和制片人,因创作《星球大战》而闻名。
问:“加利福尼亚州的首府是哪里?”
答:“萨克拉门托”。
问:“围绕地球运行的天体有哪些?”
答:“月亮”。
问: 谁是弗雷德·里克森逊(Fred Rickerson) ?
答: ?
问题: 什么是原子?
答案: 原子是组成一切事物的微小粒子。
问题: 阿尔万·芒茨(Alvan Muntz) 是谁?
等待回复
问题: Kozar-09 是什么?
等待回复
问题: 火星有几个卫星?
回答:火星有两个,分别为Phobos和Deimos。

插入文本(测试版)

完成端点还支持通过提供后缀提示来在文本中插入文本,除了前缀提示。当编写长篇文字、在段落之间转换、遵循大纲或引导模型走向结尾时,自然会出现这种需求。这也适用于代码,并且可以用于在函数或文件的中间进行插入。访问我们的代码指南以了解更多信息。

为了说明后缀上下文对我们预测能力的重要性,请考虑提示“今天我决定做出重大改变”。有很多方法可以想象完成句子。但是如果我们现在提供故事的结局:“我的新发型得到了很多赞美!”,那么意图就变得清晰明确。

我去波士顿大学读书。拿到学位后,我决定做出改变。
一个巨大的改变! 我收拾好行囊搬到了美国西海岸。 
现在,太平洋已经成为我的最爱! 

通过为模型提供额外的上下文,它可以更加可控和可操纵。然而,这对于模型来说是一项更加受限制和具有挑战性的任务。

最佳实践

插入文本是测试版中的新功能,您可能需要修改使用API的方式以获得更好的结果。以下是一些最佳实践:

  • 使用max_tokens > 256。模型在插入较长完成时效果更好。如果max_tokens太小,则模型可能会在连接后缀之前被截断。请注意,即使使用更大的max_tokens,在生成token数量方面也只会收取实际生成token数对应的费用。
  • 优先选择finish_reason == "stop"。当模型到达自然停止点或用户提供的停止序列时,它将设置finish_reason为“stop”。这表明该模型已成功连接到后缀,并且是完成质量良好的一个很好信号。这对于在n>1或重新采样(见下一点)时选择几个完成之间进行选择尤其相关。
  • 重新采样3-5次。虽然几乎所有完成都与前缀相连,但在较难情况下,模型可能难以连接后缀。我们发现重新采样3或5次(或者使用k=3,5 的best_of),并挑选具有“stop”作为其finish_reason 的样本可以成为解决此类问题有效方法之一 。 在重新采样时,通常希望温度较高以增加多样性。 注意:如果所有返回的示例都具有finish_reason == “length”,则很可能max_tokens太小了,在自然地连接提示和后缀之前模型就耗尽了token数,请考虑增加max_tokens再进行重试。
  • 尝试给出更多线索. 在某些情况下,为了更好地帮助模型生成内容 ,您可以通过提供一些示例来给出线索 ,让该模型能够遵循这些示例来确定自然停顿处。
如何制作美味热巧克力:
煮沸水
将热巧克力放入杯子里
向杯子中加入开水 
享受美味热巧克力

狗是忠诚的动物.
狮子是凶猛的动物.
海豚是爱玩儿的动物. 
马是雄伟的动物 。

编辑文本(Alpha测试)

可以使用edits端点来编辑文本,而不仅仅是完成它。您提供一些文本和一个修改指令,text-davinci-edit-001模型将尝试相应地进行编辑。这是翻译、编辑和调整文本的自然界面。这对于重构和处理代码也很有用。访问我们的代码指南以了解更多信息。在此初始测试期间,免费使用edits端点。 例子

输入: GPT-3是一个非常好的AI, 擅长写回复, 当被问到问题时, 它会给出建议。 这是一首由它制作并押韵的诗歌。 
输出: 我是一个非常好的AI, 我擅长写回复, 当我被问到问题时, 我会给出我的建议。 这是一首由我制作并押韵的诗歌。
说明: 使其以GPT-3自己的口吻来回答(文中GPT-3改成了我)