跳到主要内容

文本完成

学习如何生成或文本处理

介绍

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

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

输入:为一个冰淇淋店写一个标语。

提交后,您会看到类似于以下内容:

输入:为一个冰淇淋店写一个标语。

输出:我们在每一勺里提供微笑!

您看到的实际完成可能不同,因为API默认是不确定性的。这意味着即使您的提示保持不变,每次调用时可能会得到略微不同的完成。将自动调节参数设置为0将使输出大多数确定,但可能会保留一小部分可变性。

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

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

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

Prompt 设计

基础知识

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

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

**展示和告诉**:通过说明、示例或两者的结合清楚地表明你想要什么。如果你希望模型按字母顺序排列一组项目或按情感分类一段话,展示出来。

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

**检查你的设置**:自动调节设置和top_p设置控制模型在生成回应时的确定性。如果你要求它回答一个只有一个正确答案的问题,那么你会想把这些设置得更低。如果你想要更多样化的响应,那么你可能想把这些设置得更高。人们在使用这些设置时犯的最大错误是认为它们是“聪明”或“创造性”控制。

故障排除

如果你在使用API时遇到问题,请按照以下清单进行排查:

1.是否清楚所需的生成内容?

2.是否有足够的例子?

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

4.你是否正确使用了自动调节参数和top_p?

分类

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

决定上一条信息的情感是积极的、中立的还是消极的。
上一条信息:我喜欢新的蝙蝠侠电影!
情感:

这个例子中需要注意以下几点:

1.**使用简单的语言描述输入和输出。** 我们使用简单的语言描述输入“Tweet”和期望的输出“情感”。作为最佳实践,从使用最详细的描述开始。虽然您通常可以使用简写或键来表示输入和输出,但最好从尽可能详细的描述开始,然后逐步删除多余的单词,看看性能是否保持一致。

2.**向API展示如回应应任何情况。** 在这个例子中,我们在指令中包含了可能的情感标签。中性标签很重要,因为有很多情况下,甚至连人类都很难确定某些事物是积极的还是消极的,以及既不是积极的也不是消极的情况。

3.**熟悉的任务需要更少的示例。** 对于这个分类器,我们没有提供任何示例。这是因为API已经了解情感和上一条信息的概念。如果您正在为API可能不熟悉的某些内容构建分类器,可能需要提供更多示例。

分类器的效率提升

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

对这些推文进行情感分类:

1. "我受不了作业"
2. "这很糟糕。我很无聊 😠"
3. "我迫不及待地想过万圣节!!!"
4. "我的猫很可爱 ❤️❤️"
5. "我讨厌巧克力"

推文情感评分:

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

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

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

2.不要把列表做得太长,否则 API 很可能会漂移。

生成

使用 API 可以完成的最强大且最简单的任务之一是生成输入的新想法或版本。您可以要求任何内容,从故事创意、商业计划、人物描述到市场营销口号。在这个例子中,我们将使用 API 创建结合虚拟现实和健身的想法。

集思广益,提出一些结合 VR 和健身的创意:

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

对话

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

下面是一个API扮演AI回答问题的例子:

下面是一个与AI助手的对话。AI助手乐于助人、有创意、聪明、友好。

人类:你好,你是谁?
AI:我是OpenAI创建的AI。我今天能帮你什么吗?
人类:

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

1.**我们告诉API意图,但我们也告诉它如何行动**。与其他提示一样,我们引导API理解示例代表什么,但我们还添加了另一个关键细节:我们明确告诉它如何与短语“The assistant is helpful, creative, clever, and very friendly.”交互。 没有这个指示,API可能会偏离轨道,模仿与之交互的人类,并变得嘲讽或其他我们要避免的行为。

2.**我们为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不熟悉的语言,你需要提供更多的示例甚至微调模型,以便流利地翻译。

转化

在这个例子中,我们将电影的名称转换为表情符号。这展示了API对于捕捉模式并与其他字符一起使用的适应能力。
将电影名转换为表情符号:
回到未来:👨👴🚗🕒
蝙蝠侠:🤵🦇
变形金刚:🚗🤖
星球大战:

总结

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

为二年级学生概括以下内容:

木星是距离太阳第五远的行星,也是太阳系中最大的气态巨星。
它的质量只有太阳的千分之一,但是比太阳系中其他所有行星的质量加起来还要大2.5倍。
木星是夜空中肉眼可见的最明亮的物体之一,自古以来就被人们所知,是以罗马神话中的“木星神”命名的。
从地球上观察,木星足以照亮周围的空间,其反射光甚至可以产生明显的影子。
它是月亮和金星之后夜空中平均第三亮的天然天体。

完成

虽然所有提示都会产生完成,但在需要 API 接着你之前的思路时,将文本完成视为一项独立的任务可能会很有帮助。例如,如果给出这个提示,API 将会继续思考垂直农业的解决方案。你可以降低自动调节参数设置来让 API 更专注于提示的意图,或者提高自动调节参数让它离题。

垂直农业提供了一种新颖的解决方案,可以在当地生产食品,降低运输成本和......

下一个提示展示了如何使用补全来帮助编写 React 组件。我们向 API 发送了一些代码,它能够继续完成其余部分,因为它对 React 库有一定的理解。我们建议使用我们的 Codex 模型来处理涉及代码理解或生成的任务。了解更多,请访问我们的代码指南。

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

事实回答:

API具有从其训练数据中学习的大量知识。它还具有提供听起来非常真实但实际上是虚构的响应的能力。有两种方法可以限制API虚构答案的可能性。

1.**为API提供基准答案**。如果您向API提供一个有关问题的文本主体(如维基百科条目),它将更不可能虚构答案。 2.**使用较低的概率,并向API展示如何说“我不知道”**。如果API理解在其不确定性较低的情况下,说“我不知道”或某种变体是适当的,它就不太可能虚构答案。

在这个例子中,我们为API提供了它所知道的问题和答案的例子,然后提供了它不知道的事情的例子,并提供问号。我们还将概率设置为零,以便在有任何疑问时,API更可能回答“?”。

问题:谁是蝙蝠侠?
答案:蝙蝠侠是虚构的漫画人物。
问题:什么是torsalplexity?
答案:?
问题:什么是Devz9?
答案:?
问题:谁是乔治·卢卡斯?
答案:乔治·卢卡斯是美国电影导演和制片人,因创造《星球大战》而闻名。
问题:加利福尼亚州的首府是什么?
答案:萨克拉门托。
问题:围绕地球的是什么?
答案:月亮。
问题:弗雷德·里克森是谁?
答案:?
问题:什么是原子?
答案:原子是组成一切的微小粒子。
问题:阿尔文·芒茨是谁?
答案:?
问题:什么是Kozar-09?
答案:?
问题:火星有多少颗卫星?
答案:两颗,分别是火卫一和火卫二。

插入文本(Beta版)

完成端点也支持在文本中插入文本,除了提供前缀提示外,还需提供后缀提示。当写长篇文本、在段落之间转换、按大纲写作或引导模型走向结尾时,自然而然就需要这样做。这也适用于代码,可以在函数或文件中间插入。请访问我们的代码指南以了解更多信息。

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

我上大学的地方是波士顿大学。获得学位后,我决定做出改变。很大的改变!

我收拾好行囊,搬到了美国西海岸。

现在,我对太平洋无法割舍!

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

最佳实践

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

**使用max_tokens> 256**。模型在插入更长的完成时更好。如果max_tokens太小,则模型可能会在连接后缀之前被截断。请注意,即使使用更大的max_tokens,您也只会按产生的标记数付费。

**优先选择finish_reason ==“stop”**。当模型到达自然停止点或用户提供的停止序列时,它将将finish_reason设置为“stop”。这表明模型已成功连接到后缀,并且是完成质量的良好信号。这在使用n> 1或重新采样(请参见下一个点)时特别重要,用于在几个完成之间进行选择。

**重新采样3-5次**。 虽然几乎所有的完成都能连接到前缀,但在更困难的情况下,模型可能会难以连接后缀。我们发现,重新采样3或5次(或使用k = 3,5的best_of)并选择完成原因为“stop”的样本可以是这些情况下的有效方法。在重新采样时,通常需要更高的自动调节参数以增加多样性。

注意:如果所有返回的样本都有finish_reason ==“length”,则很可能max_tokens太小,模型在自然地连接提示和后缀之前耗尽了标记。考虑在重新采样之前增加max_tokens。

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

如何制作美味的热巧克力:
1.煮水
2.把热巧克力放在杯子里
3.把热水倒入杯子里
4.享受热巧克力
1. 狗是忠诚的动物。
2. 狮子是凶猛的动物。
3. 海豚是好玩的动物。
4. 马是雄伟的动物。

编辑文本

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

示例:

输入:
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的声音说出来。
OUTPUT
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