跳到主要内容

提示示例

前一节介绍了如何使用提示来触发大型语言模型(LLMs)的基本示例。

本节将提供更多示例,演示如何使用提示来完成不同的任务,并介绍关键概念。通常,学习概念的最佳方式是通过示例。以下是几个示例,说明了如何使用精心设计的提示来执行不同类型的任务。

主题:


文本摘要

自然语言生成中的标准任务之一是文本摘要。文本摘要可以涵盖许多不同的风格和领域。事实上,语言模型最有前途的应用之一是将文章和概念总结为快速易读的摘要。让我们尝试使用提示进行基本的摘要任务。

假设你有兴趣了解抗生素,你可以尝试这样的提示:

提示:

解释抗生素

A:

输出:

抗生素是一种用于治疗细菌感染的药物。它们通过杀死细菌或阻止细菌繁殖的方式起作用,使身体的免疫系统能够抵抗感染。抗生素通常以口服药片、胶囊或液体溶液的形式服用,有时也通过静脉注射给药。它们对病毒感染无效,不当使用可能导致抗生素耐药性。

"A:" 是一种显式提示格式,用于在问答中使用。在这里使用它是为了告诉模型后面期望有一个答案。在这个示例中,目前还不清楚如何使用它是否有用,但我们将在后面的示例中留下这个问题。我们假设这里提供的信息太多,你想进一步进行摘要。事实上,你可以指示模型进行进一步的摘要,总结成一句话,如下所示:

提示:

抗生素是一种用于治疗细菌感染的药物。它们通过杀死细菌或阻止细菌繁殖的方式起作用,使身体的免疫系统能够抵抗感染。抗生素通常以口服药片、胶囊或液体溶液的形式服用,有时也通过静脉注射给药。它们对病毒感染无效,不当使用可能导致抗生素耐药性。

用一句话解释上述内容:

输出:

抗生素是用于治疗细菌感染的药物,通过杀死细菌或阻止其繁殖,但对病毒无效,过度使用会导致抗生素耐药性。

不要过分关注上述输出的准确性,这是我们将在后面的指南中讨论的内容,模型试图用一句话总结段落。你可以在指示上下功夫,但我们将把这留到后面的章节。随时暂停并尝试,看看是否能得到更好的结果。


信息提取

虽然语言模型经过训练可执行自然语言生成和相关任务,但它也非常擅长执行分类和一系列其他自然语言处理(NLP)任务。

以下是一个从给定段落中提取信息的提示示例。

提示:

在研究论文中,作者贡献声明和致谢应清楚明确地说明作者在撰写手稿和分析过程中是否以及在何种程度上使用了 ChatGPT 等人工智能技术。他们还应指出使用了哪些LLMs。这将提醒编辑和审稿人更仔细地审查手稿,以防潜在的偏见、不准确和不当的来源引用。同样,科学期刊在选择提交的手稿时,应透明地披露他们对LLMs的使用。

提及段落中提到的大型语言模型产品:

输出:

段落中提到的大型语言模型产品是 ChatGPT。

你可以通过多种方式改进上述结果,但这已经非常有用。

到目前为止,很明显你可以通过简单地指示模型来要求它执行不同的任务。这是一种强大的能力,AI 产品开发者已经在使用它来构建强大的产品和体验。

段落来源:ChatGPT: five priorities for research


问答

让模型以特定答案回应的最佳方法之一是改进提示的格式。如前所述,提示可以结合指令、上下文、输入和输出指示符,以获得更好的结果。虽然这些组件并非必需,但随着指令的具体性增加,结果也会更好,这成为一种良好的实践。以下是一个更结构化提示的示例。

提示:

根据下面的上下文回答问题。回答要简短明了。如果不确定答案,回答“不确定”。

上下文:Teplizumab 的起源可以追溯到新泽西的一家名为 Ortho Pharmaceutical 的药品公司。在那里,科学家们生成了这种抗体的早期版本,被称为 OKT3。这种分子最初来自老鼠,能够与 T 细胞的表面结合并限制它们的杀伤潜力。1986 年,它获得了批准,用于帮助预防肾脏移植后的器官排斥,使其成为首个获准供人类使用的治疗性抗体。

问题:OKT3 最初来自哪里?

答案:

输出:

老鼠。

上下文获取自Nature


文本分类

到目前为止,你已经使用简单的指令来执行任务。作为一个提示工程师,你需要在提供更好的指令方面做得更好。但这还不是全部!你还会发现,对于更困难的用例,仅仅提供指令是不够的。这就是你需要更多考虑上下文和提示中可以使用的不同元素的地方。你可以提供的其他元素有输入数据示例

让我们通过提供一个文本分类的示例来演示这一点。

提示:

将文本分类为中性、消极或积极。

文本:我觉得食物还可以。
情感:

输出:

中性

你给出了将文本分类的指令,模型回应的是“中性”,这是正确的。这没有错,但假设你真正需要的是让模型以你想要的确切格式返回标签。所以,你希望它返回中性而不是Neutral。你该如何实现这一点?有不同的方法可以做到这一点。在这里,你关心的是具体性,所以你提供的提示信息越多,结果就会越好。你可以尝试提供示例来指定正确的行为。让我们再试一次:

提示:

将文本分类为中性、消极或积极。

文本:我觉得度假还可以。
情感:中性

文本:我觉得食物还可以。
情感:

输出:

中性

完美!这次模型返回了中性,这正是你要寻找的具体标签。看起来提示中提供的示例帮助模型在输出中变得更具体。

为了突出有时具体性很重要的原因,看看下面的例子并发现问题所在:

提示:

将文本分类为 nutral、negative 或 positive。

文本:我觉得度假还可以。
情感:

输出:

Neutral

这里有什么问题?作为提示,虚构的nutral标签完全被模型忽略了。相反,模型输出了Neutral,因为它对该标签有一些偏见。但假设你真正想要的是nutral。你该如何解决这个问题?也许你可以尝试为标签添加描述,或者在提示中添加更多示例?如果你不确定,我们将在接下来的部分讨论一些想法。


对话

也许你可以通过提示工程来指导 LLM 系统如何行为,它的意图和身份,这可能是你可以实现的更有趣的事情之一,特别是当你正在构建像客服聊天机器人这样的对话系统时。

例如,让我们创建一个对话系统,它能够对问题生成更技术性和科学性的回答。请注意,你通过指示明确告诉它如何行为,这有时被称为角色提示

提示:

以下是与 AI 研究助理的对话。助理的语气是技术性和科学性的。

人类:你好,你是谁?
AI:问候!我是一个 AI 研究助理。今天我能帮你什么?
人类:你能告诉我黑洞的形成吗?
AI:

输出:

当然!黑洞是时空区域,其引力非常强大,以至于没有任何东西,甚至是光,都无法逃离。当一个非常大质量的恒星死亡并且其核心向内坍缩时,就会形成一个密度无限大的奇点,从而产生黑洞。奇点的强烈引力会吸引周围所有物质和辐射,形成黑洞。

我们的人工智能研究助手听起来有点太技术化了,对吧?好的,让我们改变这种行为,指示系统给出更易理解的答案。

提示:

以下是与一个人工智能研究助手的对话。助手的回答应该简单到甚至小学生都能理解。

Human: 你好,你是谁?
AI: 你好!我是一个人工智能研究助手。我今天能为你做些什么呢?
Human: 你能告诉我黑洞是如何形成的吗?
AI:

输出:

当一个非常庞大的恒星耗尽燃料并向内坍缩时,就会形成黑洞。这颗恒星的引力非常强大,以至于没有任何东西,甚至是光,都无法逃离其吸引力。这在时空中形成了一个具有强烈引力的点,被称为黑洞。

你取得了一些进展。你可以继续改进它。如果你添加更多例子,你可能会得到更好的结果。


代码生成

LLM 在代码生成方面非常有效的一个应用是代码生成。Copilot 就是一个很好的例子。通过巧妙的提示,你可以执行大量的代码生成任务。让我们看一些以下的例子。

首先,让我们尝试一个简单的程序,向用户打招呼。

提示:

/*
询问用户的姓名并说“你好”
*/

输出:

let name = prompt("你叫什么名字?");
console.log(`你好,${name}!`);

请注意,你甚至不需要指定要使用的语言。

让我们稍微提高难度。下面的例子展示了在设计提示时,LLM 可以有多么强大。

提示:

"""
表 departments,列 = [DepartmentId, DepartmentName]
表 students,列 = [DepartmentId, StudentId, StudentName]
为计算机科学系中的所有学生创建一个 MySQL 查询
"""

输出:

SELECT StudentId, StudentName 
FROM students
WHERE DepartmentId IN (SELECT DepartmentId FROM departments WHERE DepartmentName = '计算机科学');

这非常令人印象深刻。在这种情况下,你提供了关于数据库架构的数据,并要求它生成一个有效的 MySQL 查询。


推理

也许对于今天的 LLM 来说,最困难的任务之一是需要某种形式推理的任务。推理是最有趣的领域之一,因为LLM可以产生各种复杂的应用程序。

在涉及数学能力的任务方面已经取得了一些进展。尽管如此,值得注意的是,当前的 LLM 在执行推理任务方面存在困难,因此这需要更加先进的提示工程技术。我们将在下一篇指南中介绍这些高级技术。现在,我们将介绍一些基本示例,以展示算术能力。

提示:

9000 * 9000 等于多少?

输出:

81,000,000

让我们尝试更困难的问题。

提示:

这组中的奇数相加得到一个偶数:15, 32, 5, 13, 82, 7, 1。 

A:

输出:

不,这组中的奇数相加得到一个奇数:119。

这是不正确的!让我们通过改进提示来尝试改进这个问题。

提示:

这组中的奇数相加得到一个偶数:15, 32, 5, 13, 82, 7, 1。 

通过将问题分解为步骤来解决。首先,识别奇数,将它们相加,并指出结果是奇数还是偶数。

输出:

奇数:15, 5, 13, 7, 1
总和:41
41 是一个奇数。

好多了,对吧?顺便说一句,我们尝试了几次这个任务,模型有时会失败。如果你提供更好的说明并结合示例,可能会有助于获得更准确的结果。

在接下来的部分,我们将介绍更加先进的提示工程概念和技术,以提高在所有这些更困难的任务上的性能。

笔记本

如果你想使用 Python 练习上述提示,我们准备了一个笔记本,可以使用 OpenAI 模型测试一些提示。

开始使用提示工程