阅读(3053) (0)

OpenAI API 文本补全

2023-03-16 15:42:34 更新

介绍

完成端点可用于各种任务。它为我们的任何模型提供了一个简单但功能强大的界面。您输入一些文本作为提示,模型将生成一个文本补全,尝试匹配您提供的任何上下文或模式。例如,如果您向 API 提供提示, "As Descartes said, I think, therefore", 它将很有可能返回 " I am" 。

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

Write a tagline for an ice cream shop.

提交后,您会看到如下内容:

Write a tagline for an ice cream shop.
We serve up smiles with every scoop!

您看到的实际完成情况可能有所不同,因为默认情况下 API 是不确定的。这意味着即使您的提示保持不变,您每次调用它时可能会得到略微不同的完成。将 temperature 设置为 0 将使输出大部分具有确定性,但可能会保留少量可变性。

这个简单的文本输入、文本输出界面意味着您可以通过提供说明或您希望它做什么的几个示例来“编程”模型。它的成功通常取决于任务的复杂性和提示的质量。一个好的经验法则是考虑如何为中学生写一个应用题来解决。一个写得很好的提示提供了足够的信息让模型知道你想要什么以及它应该如何响应。

本指南涵盖了一般的提示设计最佳实践和示例。

请记住,默认模型的训练数据将在 2021 年中断,因此它们可能不了解时事。我们计划在未来增加更多的持续培训。

Prompt 设计

基础

我们的模型可以做任何事情,从生成原创故事到执行复杂的文本分析。因为他们可以做很多事情,所以你必须明确描述你想要什么。展示,而不仅仅是讲述,通常是获得良好提示的秘诀。

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

展示和讲述。通过说明、示例或两者的结合,明确您想要什么。如果您希望模型按字母顺序对项目列表进行排名或按情绪对段落进行分类,请向它展示您想要的。

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

检查您的设置。 temperature 和 top_p 设置控制模型在生成响应时的确定性。如果您要求它提供只有一个正确答案的答复,那么您需要将这些设置得较低。如果您正在寻找更多样化的响应,那么您可能希望将它们设置得更高。人们在使用这些设置时犯的第一个错误是假设它们是“聪明”或“创造力”控制。

故障排除

如果您在使用 API 按预期执行时遇到问题,请遵循此清单:

  1. 是否清楚预期的生成结果应该是什么?

  2. 有足够的例子吗?

  3. 你检查过你的例子是否有错误吗? (API 不会直接告诉你)

  4. 您是否正确使用 temperature 和 top_p?

分类

为了使用 API 创建文本分类器,我们提供了任务描述和一些示例。在此示例中,我们展示了如何对推文的情绪进行分类。

值得关注此示例中的几个功能:

  1. 使用通俗易懂的语言来描述您的输入和输出。我们对输入“Tweet”和预期输出“Sentiment”使用通俗易懂的语言。作为最佳实践,从简单的语言描述开始。虽然您通常可以使用速记或键来指示输入和输出,但最好从尽可能具有描述性开始,然后向后工作以删除多余的单词并查看性能是否保持一致。

  2. 显示 API 如何响应任何情况。在此示例中,我们在指令中包含了可能的情绪标签。中性标签很重要,因为在很多情况下,即使是人类也很难确定某事是积极的还是消极的,以及两者都不是的情况。

  3. 对于熟悉的任务,您需要更少的示例。对于这个分类器,我们不提供任何示例。这是因为 API 已经理解了情绪和推文的概念。如果您正在为 API 可能不熟悉的内容构建分类器,则可能需要提供更多示例。

提高分类器的效率

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


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

请务必注意,当您要求 API 创建列表或评估文本时,您需要格外注意您的概率设置(Top P 或 Temperature)以避免漂移。

  1. 通过运行多个测试确保您的概率设置得到正确校准。

  2. 不要让您的列表太长,否则 API 可能会发生变化。

生成

您可以使用 API 完成的最强大但最简单的任务之一是产生新的想法或输入版本。您可以询问任何内容,从故事创意到商业计划,再到人物描述和营销口号。在此示例中,我们将使用 API 来创建在健身中使用虚拟现实的想法。

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

会话

API 非常擅长与人甚至与自己进行对话。仅需几行指令,我们就已经看到 API 作为一个客户服务聊天机器人运行,它可以智能地回答问题而不会感到慌张,或者是一个聪明的开玩笑的对话伙伴,可以开玩笑和双关语。关键是告诉 API 它应该如何表现,然后提供一些示例。

以下是扮演 AI 回答问题角色的 API 示例:


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

  1. 我们告诉 API 意图,但我们也告诉它如何表现。就像其他提示一样,我们将 API 提示到示例所代表的内容中,但我们还添加了另一个关键细节:我们明确说明如何与短语“助手很有帮助、有创意、聪明且非常友好”进行交互。 “如果没有该指令,API 可能会偏离并模仿与之交互的人,并变得讽刺或我们想要避免的其他行为。

  2. 我们给 API 一个身份。一开始我们让 API 作为 AI 助手响应。虽然 API 没有内在身份,但这有助于它以尽可能接近事实的方式做出响应。您可以通过其他方式使用身份来创建其他类型的聊天机器人。如果您告诉 API 以一名作为生物学研究科学家的女性的身份做出回应,您将从 API 中获得智能和深思熟虑的评论,类似于您对具有该背景的人的期望。

在这个例子中,我们创建了一个聊天机器人,它有点讽刺并且不情愿地回答问题:


为了创建一个有趣且有点帮助的聊天机器人,我们提供了一些问题和答案示例,展示了 API 如何回复。所需要的只是一些讽刺的回应,API 能够识别模式并提供无穷无尽的讽刺回应。

转换

API 是一种语言模型,熟悉单词和字符用于表达信息的各种方式。这范围从自然语言文本到代码和英语以外的语言。 API 还能够在允许它以不同方式总结、转换和表达内容的级别上理解内容。

翻译

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


此示例之所以有效,是因为 API 已经掌握了这些语言,因此无需尝试教授它们。

如果您想将英语翻译成 API 不熟悉的语言,则需要为其提供更多示例,甚至需要微调模型以使其流畅地完成。

转换

在此示例中,我们将电影名称转换为表情符号。这显示了 API 对选取模式和处理其他字符的适应性。


概要

API能够理解文本的内容,并用不同的方式重新表达它。在这个例子中,我们从一个更长、更复杂的文本段落中创建了一个孩子能理解的解释。这说明API对语言有很深的掌握。


结论

虽然所有的提示都会产生补全,但在你想让API接着你的话说下去的情况下,把文本补全当作一个单独的任务来考虑可能会有帮助。例如,如果给出这个提示,API会继续关于垂直农业的思路。你可以降低 temperature 设置,让API更专注于提示的意图,或者提高它,让它偏离主题。


下一个提示显示了如何使用补全来帮助编写 React 组件。我们向 API 发送一些代码,它能够继续剩下的,因为它了解 React 库。我们建议将我们的 Codex 模型用于涉及理解或生成代码的任务。


事实回应

API 有很多知识,这些知识是从它接受训练的数据中学到的。它还能够提供听起来非常真实但实际上是虚构的响应。有两种方法可以限制 API 编造答案的可能性。

  1. 为 API 提供基本事实。如果您向 API 提供文本正文来回答有关问题(如维基百科条目),那么它就不太可能伪造响应。

  2. 使用低概率并向 API 展示如何说“我不知道”。如果 API 理解在不太确定回答“我不知道”或某些变体是否合适的情况下,它就不太愿意编造答案。

在此示例中,我们为 API 提供它知道的问题和答案示例,然后提供它不知道的示例并提供问号。我们还将概率设置为零,这样 API 更有可能以“?”响应。如果有任何疑问。


插入文字

完成端点还支持通过提供除前缀提示之外的后缀提示来在文本中插入文本。在编写长文本、段落之间的过渡、遵循大纲或引导模型走向结尾时,这种需求自然会出现。这也适用于代码,可用于插入函数或文件的中间。

为了说明后缀语境对我们预测能力的重要性,考虑这个提示,“今天我决定做一个大改变。”有很多种方式可以想象完成这句话。但如果我们现在提供故事的结尾:“我得到了很多人对我的新发型的赞美!”,那么预期的补全就变得清楚了。


通过为模型提供额外的上下文,它可以更加可控。然而,这对模型来说是一个更具约束性和挑战性的任务。

最佳实践

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

使用 max_tokens > 256。该模型更擅长插入更长的补全。如果 max_tokens 太小,模型可能会在连接到后缀之前被切断。请注意,即使使用更大的 max_tokens,您也只会根据生成的代币数量付费。

更喜欢 finish_reason == “stop”。当模型到达自然停止点或用户提供的停止序列时,它会将 finish_reason 设置为“停止”。这表明该模型已设法很好地连接到后缀,并且是完成质量的良好信号。这对于在使用 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 模型将尝试相应地对其进行编辑。这是用于翻译、编辑和调整文本的自然界面。这对于重构和使用代码也很有用。请访问我们的代码指南以了解更多信息。在此初始测试期间,编辑端点的使用是免费的。

示例