入门文档(docs)
指南(Guides)
补全Completion(Completion Guide)

补全Completion

介绍 (Introduction)

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

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

为一个冰淇淋店写一个标语。

提交后,您会看到类似这样的东西:

为一个冰淇淋店写一个标语。 我们每一勺都送上微笑!

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

这个简单的文本输入输出界面意味着你可以通过提供指令或仅提供一些你想要它做的例子来“编程”模型。它的成功通常取决于任务的复杂性和你提示的质量。

一个好的经验法则是考虑你如何为中学生编写一个单词问题。一个写得好的提示提供足够的信息,让模型知道你想要什么以及它应该如何响应。

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

请注意,预置模型的训练数据截至于2021年,因此可能不具备当前事件的知识。我们计划在未来增加更多连续训练。

提示词设计 (Prompt design)

基础(Basics)

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

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

提供示例或者指令。

通过指令、示例或两者的组合来清楚地表达你想要的。如果你想让模型按字母顺序排列一个项目列表或按情感分类一个段落,那就告诉它。

提供优质数据。

如果你试图建立一个分类器或让模型遵循一个模式,请确保有足够的例子。一定要校对你的例子——模型通常足够聪明,可以看穿基本的拼写错误并给出回应,但它也可能会认为这是有意的,并影响回应。

检查你的设置。

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

遇到困难了(Troubleshooting)

如果你无法如预期地使用API,请遵循以下清单:

  • 需要生成什么是清晰的吗?
  • 有足够的例子吗?
  • 你是否检查你的例子是否有错误?(API不会直接告诉你)
  • 你是否正确使用了温度(temperature)和top_p

文本分类器(Classification)

为了用API创建文本分类器,我们提供了任务描述和一些例子。在这个例子中,我们展示如何对推文的情感进行分类。 决定一条推文的情感是积极的、中性的还是消极的。

值得注意的几个特点:

  • 使用通俗易懂的语言来描述你的输入和输出。

我们使用通俗易懂的语言来描述输入“推文”和期望输出“情感”。作为最佳实践,从使用详细的描述开始。虽然你通常可以使用缩写或键来表示输入和输出,但最好从简单易懂的语言描述开始,然后逐步削减多余的词语,看看性能是否仍然保持一致。

  • 显示API如何对任何情况作出响应。

在这个示例中,我们在指导中包含可能的情绪标签。中性标签很重要,因为会有许多情况,即使是人类也很难确定某些事情是积极的还是消极的,以及在这种情况下既不是积极的也不是消极的。

  • 熟悉任务需要更少的示例。

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

变得更加高效

现在我们已经掌握了如何构建分类器,让我们将其变得更加高效,以便我们可以通过一个API调用获取多个结果。

Classify the sentiment in these tweets:
 
1. "I can't stand homework"
2. "This sucks. I'm bored 😠"
3. "I can't wait for Halloween!!!"
4. "My cat is adorable ❤️❤️"
5. "I hate chocolate"

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

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

  • 通过运行多次测试,确保概率设置正确。
  • 不要将列表制作得太长,否则API可能会漂移。

生成 Generation

使用API可以完成的最强大但最简单的任务之一是生成输入的新想法或版本。您可以要求任何东西,从故事想法到业务计划,到角色描述和营销标语。

在这个例子中,我们将使用API做一个头脑风暴:健身和VR的结合。

Brainstorm some ideas combining VR and fitness:

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


对话 Conversation

API非常擅长与人类甚至自己进行对话。只需几行指令,我们就看到API扮演着一个智能回答问题的客户服务聊天机器人,或者是一个聪明的对话伙伴,会开玩笑和说俏皮话。关键是告诉API如何行事,然后提供一些例子。

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

 
Human: Hello, who are you?
AI: I am an AI created by OpenAI. How can I help you today?
 

这就是创建能进行交谈的聊天机器人所需要的全部。

尽管它看起来很简单,但有几件事值得关注:

  • 我们告诉API意图,但也告诉它如何行动。

就像其他提示一样,我们向API提示此示例所代表的内容,但我们还添加了另一个关键细节:我们为其提供了明确的指示,以便与短语“助手很有帮助、有创意、聪明、友善”进行交互。

没有这个指示,API可能会偏离轨迹,模仿其正在交互的人并变得讽刺或其他我们想要避免的行为。

  • 我们赋予API身份。

初始时,我们让API作为AI助手进行响应。虽然API没有固有的身份,但这有助于它以尽可能接近真实的方式响应。您可以在其他方面使用身份来创建其他类型的聊天机器人。如果您告诉API作为一名从事生物学研究的女研究员回答,您将获得类似于具有该背景的人的智能和周到的回答。

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

 
Marv is a chatbot that reluctantly answers questions with sarcastic responses:
 
You: How many pounds are in a kilogram?
Marv: This again? There are 2.2 pounds in a kilogram. Please make a note of this.
You: What does HTML stand for?
Marv: Was Google too busy? Hypertext Markup Language. 
The T is for try to ask better questions in the future.
You: When did the first airplane fly?
Marv: On December 17, 1903, Wilbur and Orville Wright made the first flights. 
I wish they’d come and take me away.
You: What is the meaning of life?
Marv: I’m not sure. I’ll ask my friend Google.
You: Why is the sky blue?
 

为了创建一个有趣且有点有用的聊天机器人,我们提供了一些问题和答案的示例,以向API显示如何回复。只需要几个挖苦的回复,API就可以掌握模式并提供无尽的俏皮回答。


模型转换 Transformation

API是一个熟悉各种单词和字符表达信息的语言模型。这包括自然语言文本、代码以及英语以外的语言。

API还能够以能够摘要、转换和以不同的方式表达内容的方式理解内容。

翻译 Translation

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

Translate this into French, Spanish and Japanese:
 
What rooms do you have available?
 
 
French: Quelles chambres avez-vous de disponibles ?
 
 
Spanish: ¿Qué habitaciones tienen disponibles?
 
 
Japanese: どの部屋が利用可能ですか?

这个例子适用,因为API已经掌握了这些语言,所以不需要再尝试教它。

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

对话 Conversion

在这个例子中,我们将电影的名称转换为表情符号。这显示了API对掌握模式并与其他字符一起工作的适应能力。

Convert movie titles into emoji.
 
Back to the Future: 👨👴🚗🕒 
Batman: 🤵🦇 
Transformers: 🚗🤖 
Star Wars:

总结 Summarization

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

 
用小学二年级学生能听懂的话来总结这段文字:
 
木星是离太阳第五远的行星,也是太阳系中最大的行星。
它的体积仅次于太阳,是太阳系中所有其他行星质量的两倍半。
在夜空中,木星是最亮的天体之一,因此可以用肉眼看到。
它的名字来自于罗马神话中的“朱庇特”(Jupiter)。
当我们从地球上看木星时,它非常亮,甚至可以投射出明显的阴影。
平均来说,木星在月亮和金星之后在夜空中是第三亮的天体。
 

补全 Completion

虽然所有提示都会产生补全,但在你希望API接替你具体任务的例子中,把文本补全视为一个任务会有所帮助。

例如,如果给定这个提示,API将继续顺着思路进行阐述。

你可以降低温度(temperature) (opens in a new tab)设置,以使API更专注于提示的意图,或提高它以让不要漂移。

下一个提示展示了如何使用补全来帮助编写React组件。

我们把一些代码发送给API,因为它理解了React库,所以它能够继续其余部分。

我们推荐使用我们的Codex模型来处理需要理解或生成代码的任务。

想要了解更多,请访问我们的代码指南

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

限制API捏造答案的可能性

API有很多知识,它是从它所被训练的数据中学到的。

它还可以提供听起来非常真实但实际是虚构的答案。

有两种方法可以限制API捏造答案的可能性。

  • 为API提供基础事实。

如果你为API提供了一个文本体来回答问题(如维基百科条目),它就不太可能捏造一个回答。

  • 使用较低的概率(probability),并展示给API如何表达“我不知道”。

如果API理解,在不太确定答案的情况下,说“我不知道”或某种变体是合适的,它就不太可能编造答案。

在这个例子中,我们给API提供了它已知的问题和答案的范例,然后给出一些它不知道的内容并提供问号。

我们还将概率设为零,这样API就更有可能用“?”回答,以避免任何怀疑。

 
Q: Who is Batman?
A: Batman is a fictional comic book character.
 
Q: What is torsalplexity?
A: ?
 
Q: What is Devz9?
A: ?
 
Q: Who is George Lucas?
A: George Lucas is American film director and producer famous for creating Star Wars.
 
Q: What is the capital of California?
A: Sacramento.
 
Q: What orbits the Earth?
A: The Moon.
 
Q: Who is Fred Rickerson?
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.
 

插入文本 Beta

完成功能也支持插入文本到文本中,除了前缀提示 (opens in a new tab),它还提供了一个后缀提示(suffix prompt) (opens in a new tab)

当编写长篇文本、段落转换、遵循大纲或引导模型走向结尾时,自然会出现这个需求。它还适用于代码,可以用于在函数或文件中间插入文本。请访问我们的代码指南(Code Guide) (opens in a new tab)以了解更多。

为了说明后缀上下文对我们的预测能力有多么重要,请考虑以下提示:“今天我决定做出一个重大的改变。” 有许多种方式可以想象完成这个句子。

但是如果我们现在提供故事的结尾:“我新发型得到了很多称赞!”,则意图变得清晰。

我在波士顿大学上大学。毕业后,我决定做出一个改变 。一个大改变!   我收拾行囊搬到了美国西海岸。

  现在,我对太平洋越来越着迷!

通过为模型提供额外的上下文,它可以更容易被驾驭。然而,这对模型来说是一个更加受限制和具有挑战性的任务。

最佳实践 Best practices

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

使用max_tokens大于256。

模型更擅长插入较长的预测。如果max_tokens太小,模型可能在连接后缀之前被截断。请注意,即使使用更大的max_tokens,您也只会被收费生产的令牌数量。

优先选择finish_reason == "stop"。

当模型达到自然停止点或用户提供的停止序列时,它将将finish_reason设置为"stop"。这表明模型已成功连接到后缀,并对完成的质量是一个良好的信号。这对于在使用n > 1或重新采样时选择几个完成之间进行选择尤其相关(请参阅下一个点)。

每次重采样3-5次。

尽管几乎所有的完成都能连接到前缀,但在更困难的情况下,模型可能难以连接后缀。我们发现,重采样3或5次(或使用k=3,5)并选择具有“stop”作为完成原因的样本可以是这种情况下一种有效的方法。在重采样时,您通常会想要更高的温度(temperature)来增加多样性。

注意:如果所有返回的样本都具有finish_reason ==“length”,那么max_tokens可能过小,模型在自然地连接提示和后缀之前就用完了令牌。考虑在重采样之前增加max_tokens。

尝试提供更多线索。

在某些情况下,为了更好地帮助模型生成,您可以通过提供几个模型可以遵循的模式示例来提供线索,以决定自然停止的位置。

如何制作美味的热巧克力: 1.把水煮沸 2. 把热巧克力倒入杯子里 3. 将沸水倒入杯子里 4. 享受热巧克力

  1. 狗是忠诚的动物。

  2. 狮子是凶猛的动物。

  3. 海豚是好玩的动物。

  4. 马是威严的动物。

编辑文本 Alpha

端点(Completion)可用于编辑(Edits) (opens in a new tab) 文本,而不仅仅是完成它。您可以提供一些文本和一个指令来修改文本,而 text-davinci-edit-001 模型将尝试相应地对其进行编辑。

这是一种自然的接口,用于翻译、编辑和微调文本。对于重构和处理代码也非常有用。请访问我们的 代码指南(Code Guide) (opens in a new tab) 以了解更多。在此初始测试期间,使用编辑端点(Completion)是免费的。

输入示例

GPT-3是一个非常好的AI 它很擅长写回复 当它被问了一个问题 它会给出建议 这是它制作的一个押韵诗

指示

以GPT-3的声音来表述

输出

我是一个非常好的AI 我很擅长写回复 当我被问了一个问题 我会给出建议 这是制作的一个押韵诗