在上一篇指南中,我们介绍了提示工程并给出了一个基本的例子。
在本指南中,我们将提供更多关于如何使用提示工程的例子,并介绍一些对于更高级指南来说非常重要的概念。
通常,学习概念的最好方法就是通过实例运行。以下是一些提示工程可以用来实现各种有趣和不同任务的例子。
主题:
- [文本摘要](#text-summarization)
- [信息提取](#information-extraction)
- [问答](#question-answering)
- [文本分类](#text-classification)
- [对话](#conversation)
- [代码生成](#code-generation)
- [推理](#reasoning)
文本摘要是自然语言生成中的一项标准任务。文本摘要可以包括许多不同的风格和领域。事实上,语言模型最有前景的应用之一就是能够将文章和概念概括成简短易读的摘要。让我们尝试一个基本的摘要任务,使用提示。
现在,我有兴趣了解抗生素,我可以尝试这样一个提示:
用中文讲解抗生素
A:
Output
抗生素是一类特殊的药物,它通过抑制病原体的生长和繁殖来治疗感染性疾病。它们可以杀死病原体,或者阻止病原体的繁殖,从而抑制病原体在体内的活动,达到治疗疾病的目的。
“A:”是一种用于问答的明确提示格式。我在这里使用它来告诉模型,有一个期望的进一步。在这个例子中,它是否有用还不清楚,但我们将在以后的例子中探讨。我们只是假设这是太多的信息,希望进一步概括。实际上,我们可以指示模型概括成一句话,如下所示:
抗生素是一种用于治疗细菌感染的药物。 它们通过杀死细菌或阻止细菌繁殖来发挥作用,从而使人体的免疫系统能够抵抗感染。 抗生素通常以药丸、胶囊或液体溶液的形式口服,或有时静脉内给药。 它们对病毒感染无效,使用不当会导致抗生素耐药性,
用一句话解释以上内容。
Output
抗生素是抵抗细菌感染的药物,但不能抵抗病毒,而且不当使用会导致耐药性。
不要太关注上面的输出的准确性,这是我们将在以后的指南中探讨的一个问题,模型试图用一句话总结这段段落。您可以在指令中变得聪明,但我们将把这留给以后的章节。随时暂停,看看是否能得到更好的结果。
虽然语言模型被训练来执行自然语言生成和相关任务,但它也非常有能力执行分类和一系列其他自然语言处理(NLP)任务。
这是一个从给定段落中提取信息的提示示例。
研究论文中的作者贡献声明和致谢应明确并指出作者在准备论文和分析时是否以及在何种程度上使用了AI技术,如ChatGPT,并指出使用了哪些LLMs。这将提醒编辑和审稿人更加仔细地审查论文,以防止潜在的偏差、不准确性和不当的源头认可。同样,科学期刊在选择提交的论文时也应当对使用LLMs透明。
上面段落中提到的基于大型语言模型的产品:
Output
ChatGPT。
现在应该很明显,您可以通过简单地指示模型来执行不同的任务。 AI 产品构建者已经在使用这种强大的功能来构建强大的产品和体验。我们可以通过多种方式来改善上述结果,但这已经非常有用了。
段落来源:ChatGPT:研究的五个重点
要让模型回答更具体的答案,最好的办法之一是改善提示的格式。正如之前介绍的,提示可以结合指令、背景、输入和输出指示,以获得更好的结果。尽管不是所有组件都是必需的,但遵循更具体的指令的习惯会带来更好的结果。下面是一个示例,展示了遵循更结构化的提示后的样子。
根据以下上下文回答问题。 保持答案简短明了。 如果不确定答案,请回复“Unsure about answer”。
Context: Teplizumab 的根源可以追溯到一家名为 Ortho Pharmaceutical 的新泽西制药公司。 在那里,科学家们生成了早期版本的抗体,称为 OKT3。 该分子最初来自小鼠,能够与 T 细胞表面结合并限制其杀伤细胞的潜力。 1986 年,它被批准用于帮助预防肾移植后的器官排斥反应,使其成为第一个获准用于人类的治疗性抗体。
Question: OKT3最初来源于什么?
Answer:
Output
小鼠.
相关上下文来源 Nature
到目前为止,我们已经使用简单的指令来执行任务。作为一个提示工程师,你需要提供更好的指令。但这还不是全部!您还会发现,对于更困难的用例,仅提供指令是不够的。这是您需要更多地考虑上下文和可用于提示的不同元素的地方。您还可以提供的其他元素是“输入数据”或“示例”。
让我们通过提供文本分类的示例来尝试进行演示。
将文本分类为nutral, negative 或者 positive.
Text: 我认为食物还可以。
Sentiment:
Output
Neutral
我们提供了对文本进行分类的指示,模型回应了'Neutral'
,这是正确的。没有什么不对,但是假设我们真正需要的是模型提供我们想要的确切格式的标签。因此,不是Neutral
,而是要返回neutral
。我们如何实现呢?有不同的方法可以做到这一点。这里我们关注精确性,因此我们提供的信息越多,结果就越好。我们可以尝试为具体行为提供示例。让我们再试一次:
将文本分类为neutral, negative 或者 positive.
文字:我觉得假期还可以。
情绪:neutral
文本:我认为食物还可以。
情绪:
Output
neutral
完美!这次模型返回了neutral
,这正是我要找的特定标签。看来提示中提供的示例有助于模型在其输出中更加具体。为了强调为什么有时候具体性很重要,请查看此示例,找出问题所在:
Classify the text into nutral, negative or positive.
Text: I think the vacation is okay.
Sentiment:
Output
Neutral
这里有什么问题?
提示工程可以实现的有趣的事情之一是告诉系统如何行为、其意图和身份。当构建会话系统时,这尤其有用。
例如,让我们创建一个会话系统,能够对问题提供更多技术和科学响应。请注意,我们如何通过指令明确地告诉它如何行为。
以下是与一位AI研究助理的对话。 助理语气是技术性的、科学性的。
人类:你好,你是谁?
艾:您好! 我是一名人工智能研究助理。 今天我能帮到你什么?
人类:你能告诉我黑洞的产生吗?
人工智能:
Output
是的,我可以为您解释黑洞的产生。 黑洞是由某些特殊类型的星系中的恒星碰撞而产生的,这些恒星会在撞击中释放大量的能量,由此形成一个引力空间,导致空间和时间本身坍缩。
我们的 AI 研究助理听起来有点太技术化了,对吗?好的,让我们改变一下这种行为,指示系统给出更容易理解的答案。
以下是与一位AI研究助理的对话。 辅助答案应该是连小学生都能看懂的。
人类:你好,你是谁?
艾:您好! 我是一名人工智能研究助理。 今天我能帮到你什么?
人类:你能告诉我黑洞的产生吗?
人工智能:
Output
是的,我可以告诉你关于黑洞的产生。 黑洞是由非常大的星球爆炸而产生的,这种爆炸把星球的物质收缩到一个非常小的空间里,这就是一个黑洞。
我认为我们取得了一些进展。你可以继续改进它。我敢肯定,如果你添加更多的例子,你可能会得到更好的结果。
大模型在代码生成方面非常有效。Copilot 就是一个很好的例子。你可以使用巧妙的提示执行大量的代码生成任务。下面我们来看一些例子。
首先,让我们尝试一个问候用户的简单程序。
/*
询问用户的姓名并说“你好”
*/
Output
let name = prompt('请输入您的姓名:');
console.log(`你好,${name}!`);
你可以看到,我们甚至不需要指定要使用的语言。
让我们改变一下水平。我想向你展示,只要在设计提示上多付出一点努力,语言模型就能变得多么强大。
"""
部门表,列 = [DepartmentId, DepartmentName]
学生表,列 = [DepartmentId, StudentId, StudentName]
为计算机科学系的所有学生创建一个 MySQL 查询
"""
Output
SELECT StudentId, StudentName
FROM students
WHERE DepartmentId IN (SELECT DepartmentId FROM departments WHERE DepartmentName = 'Computer Science');
这非常令人印象深刻。在这种情况下,我们提供了有关数据库架构的数据,并要求它生成一个有效的 MySQL 查询。
今天,对于 语言模型 来说,最困难的任务之一可能就是需要进行某种形式推理的任务了。推理是我最感兴趣的领域之一,因为 语言模型 可以从中产生出复杂的应用程序。
在涉及数学能力的任务方面也有了一些改进。但是,重要的是要注意,当前的 语言模型 仍然很难完成推理任务,因此这需要更高级的提示工程技术。我们将在下一个指南中讨论这些高级技术。现在,我们将概述一些基本示例,以展示算术能力。
9,000 * 9,000 是多少?
Output
81,000,000
让我们尝试一些更难的东西吧。
The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1.
A:
Output
No, the odd numbers in this group add up to an odd number: 119.
错误!让我们试着通过改进提示来改善这一点。
The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1.
Solve by breaking the problem into steps. First, identify the odd numbers, add them, and indicate whether the result is odd or even.
Output
Odd numbers: 15, 5, 13, 7, 1
Sum: 41
41 is an odd number.
这样就好多了,顺便说一句,我试过几次,有时系统会失败。如果您提供更好的指令和示例,可能会帮助获得更准确的结果。
在接下来的指南中,我们将涵盖更多高级提示工程概念,以提高这些任务以及更多困难任务的性能。