文本完成open in new window
学习如何生成或处理文本
介绍
完成度open in new window端点可用于各种各样的任务。它为我们的任何模型open in new window提供了一个简单而强大的接口。你输入一些文本作为提示,模型将生成一个文本补全,试图与你给它的任何背景或模式相匹配。例如,如果你给API一个提示,"正如笛卡尔所说,我思故",它将以很高的概率返回完成度 "我在"。
开始探索完成度的最好方法是通过我们的 "游乐场"。它只是一个文本框,你可以在这里提交一个提示,以生成一个完成度。要自己尝试,请在Playground中打开这个例子open in new window:
一旦你提交,你会看到像这样的东西:
你看到的实际完成情况可能不同,因为该API默认是非确定性的。这意味着你每次调用它都可能得到一个稍微不同的完成度,即使你的提示保持不变。将温度open in new window设置为0将使输出大部分是确定的,但可能仍有少量的可变性。
这种简单的文本输入、文本输出界面意味着你可以通过提供指令或只提供一些你希望它做什么的例子来 "编程 "这个模型。它的成功通常取决于任务的复杂性和你提示的质量。一个好的经验法则是考虑你会如何为一个中学生写一个文字问题来解决。一个写得好的提示为模型提供了足够的信息,使它知道你想要什么以及它应该如何回应。
本指南包括一般提示设计的最佳实践和例子。要了解更多关于使用我们的Codex模型的代码工作,请访问我们的代码指南open in new window。
TIP
请记住,默认模型的训练数据在2021年截止,所以它们可能不了解当前的事件。我们计划在未来增加更多的连续训练。
Prompt设计
基础知识
我们的模型可以做任何事情,从生成原创故事到执行复杂的文本分析。因为它们可以做这么多事情,所以你必须明确描述你想要什么。展示,而不只是讲述,往往是一个好的提示的秘密。
创建提示语有三个基本准则:
展示和讲述。 通过说明、例子或两者的结合,明确你想要什么。如果你想让模型按字母顺序排列一个项目清单,或按情绪对一个段落进行分类,就向它表明这是你想要的。
提供高质量的数据。 如果你试图建立一个分类器或让模型遵循一个模式,确保有足够的例子。确保校对你的例子--模型通常足够聪明,可以看穿基本的拼写错误,并给你一个回应,但它也可能认为这是故意的,这可能会影响回应。
检查你的设置。 温度和top_p的设置控制了模型在生成响应时的确定性。如果你要求它产生一个只有一个正确答案的响应,那么你想把这些设置得低一些。如果你在寻找更多不同的反应,那么你可能想把它们设置得更高。人们使用这些设置的头号错误是假定它们是 "聪明 "或 "创造性 "控制。
故障排除
如果你在让API按预期执行时遇到困难,请遵循这个检查表:
- 是否清楚预期的生成应该是什么?
- 是否有足够的例子?
- 你有没有检查你的例子是否有错误?(API不会直接告诉你)
- 你是否正确使用了温度和top_p?
分类
为了用API创建一个文本分类器,我们提供了一个任务描述和几个例子。在这个例子中,我们展示了如何对Tweets的情感进行分类。
值得注意的是这个例子中的几个特点:
1. 使用平实的语言来描述你的输入和输出。 我们对输入的 "Tweet "和预期的输出 "Sentiment "使用平实的语言。作为一个最佳实践,从纯语言描述开始。虽然你经常可以用速记或键来表示输入和输出,但最好是先尽可能地描述,然后再向后删除多余的词,看看性能是否保持一致。
2. 向API展示如何应对任何情况。 在这个例子中,我们在指令中包括了可能的情感标签。一个中性标签很重要,因为在很多情况下,即使是人类也很难确定某件事情是积极的还是消极的,还有一些情况是两者都不是。
3. 对于熟悉的任务,你需要更少的例子。 对于这个分类器,我们不提供任何例子。这是因为API已经对情感和Tweet的概念有了了解。如果你要为API可能不熟悉的东西建立一个分类器,可能有必要提供更多的例子。
提高分类器的效率
现在我们已经掌握了如何建立一个分类器,让我们以这个例子为例,让它变得更有效率,这样我们就可以用它来从一次API调用中获得多个结果。
我们提供了一个编号的推文列表,因此API可以在一次API调用中对五条(甚至更多)推文进行评级。
需要注意的是,当你要求API创建列表或评估文本时,你需要特别注意你的概率设置(最高P或温度),以避免漂移。
- 通过运行多次测试,确保你的概率设置被正确校准。
- 不要让你的清单太长,否则API很可能会漂移。
生成
你可以用API完成的最强大但最简单的任务之一是生成新的想法或输入版本。你可以要求任何东西,从故事的想法,到商业计划,到角色描述和营销口号。在这个例子中,我们将使用API来创建在健身中使用虚拟现实的想法。
如果需要,你可以通过在提示中加入一些例子来提高回答的质量。
对话
API非常善于与人甚至与自己进行对话。只需几行指令,我们就能看到API作为一个客服聊天机器人,智能地回答问题而不慌乱,或者作为一个聪明的对话伙伴,开笑话和说双关语。关键是要告诉API它应该如何表现,然后提供一些例子。
下面是一个API扮演人工智能回答问题的例子:
这就是创建一个能够进行对话的聊天机器人的全部内容。在其简单性之下,有几件事值得注意:
1. 我们告诉API的意图,但我们也告诉它如何行事。 就像其他提示一样,我们提示API这个例子代表什么,但我们还增加了另一个关键细节:我们给它明确指示如何与 "这个助手很有帮助,很有创意,很聪明,而且非常友好 "这句话互动。
如果没有这个指令,API可能会偏离并模仿与之互动的人类,变得讽刺或其他一些我们想要避免的行为。
2. 我们给API一个身份。 在开始的时候,我们让API作为一个人工智能助手来回应。虽然API没有内在的身份,但这有助于它以一种尽可能接近事实的方式做出回应。你可以用其他方式使用身份来创建其他类型的聊天机器人。如果你告诉API以一个从事生物学研究的女科学家的身份做出回应,你会从API那里得到智能和深思熟虑的评论,类似于你对具有这种背景的人的期望。
在这个例子中,我们创建了一个有点讽刺的聊天机器人,并不情愿地回答问题:
为了创建一个有趣的、有点帮助的聊天机器人,我们提供了几个问题和答案的例子,向API展示如何回复。只需要几个讽刺性的回答,API就能掌握这个模式并提供无穷无尽的讽刺性回答。
转化
API是一个语言模型,它熟悉单词和字符用来表达信息的各种方式。这包括从自然语言文本到代码和英语以外的语言。API还能够在一定程度上理解内容,使其能够以不同方式进行总结、转换和表达。
翻译
在这个例子中,我们展示了API如何从英语转换为法语、西班牙语和日语:
这个例子之所以有效,是因为API已经掌握了这些语言,所以没有必要尝试教他们。
如果你想把英语翻译成API不熟悉的语言,你就需要为它提供更多的例子,甚至微调一个模型来流畅地完成它。
转换
在这个例子中,我们把一部电影的名字转换为表情符号。这显示了API的适应性,它可以拾取模式并与其他字符一起工作。
归纳总结
API能够掌握文本的上下文,并以不同的方式重新表述它。在这个例子中,我们从一个较长、较复杂的文本段落中创造了一个孩子会理解的解释。这说明API对语言有很深的把握。
完成
虽然所有的提示都会导致完成,但在你希望API从你离开的地方继续前进的情况下,把文本完成看作是它自己的任务可能会有帮助。例如,如果给出这个提示,API将继续关于垂直耕作的思路。你可以降低温度open in new window设置,使API更专注于提示的意图,或者提高温度,让它走得更远。
接下来的这个提示显示了如何使用完成度来帮助编写 React 组件。我们发送一些代码给API,它能够继续其他的工作,因为它对React库有一个理解。我们建议将我们的Codex模型open in new window用于涉及理解或生成代码的任务。要了解更多,请访问我们的代码指南open in new window。
事实性回应
API有很多知识,是它从被训练过的数据中学习的。它也有能力提供听起来非常真实但实际上是编造的回答。有两种方法可以限制API编造答案的可能性。
1. 为API提供一个基础真理。 如果你为API提供一个文本体来回答问题(比如维基百科条目),它就不太可能编造出一个回答。
2. 使用一个低概率,并向API展示如何说 "我不知道"。 如果API明白,在它不太确定的情况下,说 "我不知道 "或一些变体是合适的,那么它将不太倾向于编造答案。
在这个例子中,我们给API提供了它知道的问题和答案的例子,然后是它不知道的东西的例子,并提供了问号。我们还将概率设置为零,因此如果有任何疑问,API更可能用"?"来回答。
插入文本
完成度端点还支持在文本中插入文本,除了前缀提示open in new window外,还提供了后缀提示open in new window。在编写长篇文字、段落之间的过渡、遵循大纲或引导模型走向结局时,自然会出现这种需求。这也适用于代码,可以用来在一个函数或文件的中间插入。请访问我们的代码指南open in new window以了解更多。
为了说明后缀上下文对我们的预测能力有多重要,考虑一下提示:"今天我决定做一个大的改变。"人们可以想象有很多方法来完成这个句子。但如果我们现在提供故事的结局:"我的新发型得到了很多人的称赞!",预期的完成方式就变得很清楚了。
通过为模型提供额外的背景,它的可操控性会大大增强。然而,这对模型来说是一个更有约束性和挑战性的任务。
最佳实践
插入文本是测试版的一个新功能,你可能必须修改你使用API的方式以获得更好的效果。这里有一些最佳做法:
使用max_tokens > 256。 该模型在插入较长的补语时更有优势。如果使用太小的max_tokens,模型可能在能够连接到后缀之前就被切断了。请注意,即使使用较大的max_tokens,也只对产生的tokens数量收费。
优先选择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太小了,模型在设法自然连接提示和后缀之前就耗尽了标记。考虑在重新取样前增加max_tokens。
试着提供更多的线索。 在某些情况下,为了更好地帮助模型的生成,你可以提供线索,给出一些模型可以遵循的模式的例子,以决定一个自然的地方来停止。
编辑文本
Edits端点可以用来编辑文本,而不仅仅是完成它。你提供一些文本和如何修改它的指令,text-davinci-edit-001
模型将尝试对其进行相应的编辑。这是一个用于翻译、编辑和调整文本的自然界面。这对于重构和处理代码也很有用。请访问我们的代码指南open in new window以了解更多。在这个最初的测试期,编辑端点的使用是免费的。