关于 Prompt
解释这个词之前,首先需要解释 prompt 这个词:
简单的理解它是给 AI 模型的指令。
它可以是一个问题、一段文字描述,甚至可以是带有一堆参数的文字描述。AI 模型会基于 prompt 所提供的信息,生成对应的文本,亦或者图片。
比如,我们在 ChatGPT 里输入 What is the capital of China?
(中国的首都是什么?),这个问题就是 prompt。
Prompt是研究者们为了下游任务设计出来的一种输入形式或模板,它能够帮助PLM“回忆”起自己在预训练时“学习”到的东西,因此后来慢慢地被叫做Prompt了。
https://learnprompting.org/ 是一份关于与人工智能通信的免费开源课程,本文内容翻译自其基础部分。
Prompt入门
对于ChatGPT 这类 Chatbot 产品,你只需要登录 ChatGPT 后,在输入框内输入问题,或者指令即可,AI 会根据你的指令,返回相应的内容。
以下是两个提示的示例:
1) 文章摘要
假设您正在阅读一篇关于佛罗里达州降雪的文章。您想快速了解文章的主要内容,因此您向 AI 展示您正在阅读的内容,并要求进行摘要2:
佛罗里达州很少下雪,特别是在中部和南部地区。除了州的极北部地区外,佛罗里达州大部分主要城市都没有记录到可测量的降雪量,尽管记录到了少量的痕迹,或者每个世纪观测到几次空气中的飘雪。根据国家气象局的数据,在佛罗里达群岛和基韦斯特群岛自欧洲殖民以来没有发生过飘雪的情况,已有超过300年时间。在迈阿密、劳德代尔堡和棕榈滩,超过200年中只有一次关于在空气中观察到飘雪的报告,发生在1977年1月。在任何情况下,自这次1977年的事件以来,迈阿密、劳德代尔堡和棕榈滩都没有看到过飘雪的情况。
以下是 AI 的回复。更简洁易读!
佛罗里达州很少下雪,除了州的极北部地区外,在过去的200年中迈阿密、劳德代尔堡和棕榈滩
这些主要城市中只有一次观察到空气中飘雪的报告。
2) 数学问题求解
如果您有一个数学方程的数据集,您想让一个语言模型来解决,您可以通过提问 "什么是方程" 来创建提示。
对于一个给定的问题,您的完整提示可能是这样的:
1,000,000 * 9,000等于几?
对于这个提示,GPT-3 (text-davinci-002) (一种人工智能) 有时会回答 9,000,000(不正确)。这时候就有提示工程的用武之地。
提示工程
如果我们不是问 1,000,000 * 9,000等于几?
,而是问 1,000,000 * 9,000等于几? 请确保输入正确数量的零,即使数量很多也要如此:
,GPT-3 将会回答 9,000,000,000(正确)。为什么会这样?为什么在提示中额外指定数字的零的数量是必要的,以使 AI 能够得到正确的答案?我们如何创建能够产生最佳结果的提示?特别是最后一个问题是提示工程领域的重点,也是本课程的重点。
给出指令
最简单的提示方法之一就是直接给出指令。我们上一个部分中就已经看到了一个简单的指令(1,000,000 * 9,000等于几? 请确保输入正确数量的零,即使数量很多也要如此:
)。然而,现代人工智能可以遵循更复杂的指令。
示例 1
AI 能够轻松地解决这个问题。使用指令提示,它可以解决许多其他简单和更复杂的问题。
示例 2
这是一个更复杂的例子:
请阅读以下销售邮件。删除任何可用于识别个人身份的信息 (PII),并用相应的占位符替换它。例如,用"[姓名]"替换"John Doe"。你好 John,我写信给你是因为我注意到你最近买了一辆新车。我是一家当地经销商 (Cheap Dealz) 的销售员,我想让你知道我们有一辆新车的超值优惠。如果你有兴趣,请告诉我。谢谢,Jimmy Smith电话:410-805-2345
电子邮件:jimmysmith@cheapdealz.com
以下是AI的回答:
你好 [姓名],我写信给你是因为我注意到你最近买了一辆新车。我是一家当地经销商 ([经销商名称]) 的销售员,我想让你知道我们有一辆新车的超值优惠。如果你有兴趣,请告诉我。谢谢,[销售员姓名]电话:[电话号码]
电子邮件:[电子邮件地址]
看到模型如何从指令中推断出结果真的很酷。例如,它知道将Cheap Dealz
替换为[经销商名称]
,将Jimmy Smith
替换为[销售员姓名]
,即使我们没有明确告诉它这样做。
角色提示
另一种提示技术是给 AI 分配一个角色。例如,您的提示可以以"你是一名医生"或"你是一名律师"开始,然后要求 AI 回答一些医学或法律问题。举个例子:
你是一个能解决世界上任何问题的杰出数学家。
试着解决下面的问题:100*100/400*56 是多少?答案是 1400。
AI (GPT-3 davinci-003) 的答案用绿色突出显示:
这是一个正确的答案,但是如果 AI 只是被提示100100/40056等于几?
,它会回答280
(错误)。
通过为 AI 分配一个角色,我们给它提供了一些上下文。这个上下文有助于 AI 更好地理解问题。通过更好地理解问题,AI 往往可以给出更好的答案。
这种技术在现代的 AI 中 (例如 GPT-3 davinci-003) 不再那么有效了。然而,我在这个例子中使用了 GPT-3 davinci-003,所以角色提示仍然至少是一个比较有效的工具。
“标准”提示
到目前为止,我们已经说过几种不同格式的提示。根据Kojima等人的说法1,我们将仅包含一个问题的提示称为“标准”提示。我们还认为仅包含问答形式为问题的提示也是“标准”提示。
我为什么要在意?
我们引用的许多文章都使用这个术语。我们这么定义它的目的,以便我们可以讨论与标准提示不同的新型提示。
标准提示的两个示例:
标准提示
法国的首都是哪里?
问答形式的标准提示
问:法国的首都是哪里?答:
Few Shot标准提示
Few shot标准提示就是只包含示例的标准提示。示例是提示要解决的任务的例子,这些示例包含在提示本身中。在研究中,Few shot标准提示有时简称为标准提示(尽管我们尝试在本指南中不这样称呼)。
Few Shot标准提示的两个示例:
Few Shot标准提示
西班牙的首都是哪里?
马德里
意大利的首都是哪里?
罗马
法国的首都是哪里?
问答形式的Few Shot标准提示
问:西班牙的首都是哪里?
答:马德里
问:意大利的首都是哪里?
答:罗马
问:法国的首都是哪里?
答:
Few shot提示有助于“few shot”或称为“上下文中”的学习,即在不更新参数的情况下进行学习。
更多关于提示过程
正如我们在之前的页面中所看到的,提示的格式和复杂度可以不同。它们可以包含上下文、指令、多个问答样例,甚至包含其他的 Prompt(什么!?)。
以下是一个包含上下文、指令和多个示例的 Prompt 示例:
Twitter 是一个社交媒体平台,用户可以发布称为“推文”的短消息。推文可以是积极的或消极的,我们希望能够将推文分类为积极或消极。以下是一些积极和消极推文的示例。请确保正确分类最后一条推文。Q: 推文:“多美好的一天!”
这条推文是积极的还是消极的?A: 积极的Q: 推文:“我讨厌这门课”
这条推文是积极的还是消极的?A: 消极的Q: 推文:“我喜欢牛仔裤上的口袋。”A:
通过添加其他上下文/示例,我们可以在不同的任务中提高 AI 的性能。下一章将介绍稍微高级的提示技巧。
聊天机器人基础
最常见的一种使用提示的方法是与公开的聊天机器人(例如 ChatGPT)进行互动。请注意,ChatGPT 与 GPT-3 不同,他们之间的主要区别在于聊天机器人可以记住你的对话历史。就像 GPT-3 一样,它们也可以高水平地回答问题、提供写作摘要和分析、编写文案或代码等,这是一个令人兴奋的前景——但是聊天机器人的真正价值只有在你使用具体的提示时才能体现。在本文中,我们将探讨一些基本的方法,如使用风格指导、描述符和引导,让聊天机器人更好的发挥作用。
修改你的提示语
风格指导(Style Guidance)
风格指导就是要求 AI 以某种特定的风格来表达。如果没有给出风格指导的问题,ChatGPT 通常会返回一两个短段落的回答,少数需要更长的回答时会返回更多内容。
ChatGPT 的回答常以中性正式的语气表达,同时提供一些细节,这非常不错!不过,如果我们想要更好的回答,可以在提示末尾自定义 ChatGPT 的回答风格。如果我们想要更加随意的回答,可以要求它以友好或非正式的语气表达;如果我们想要更易读的格式,可以给出相同的问题,但要求以无序列表的形式回答;如果我们想要一个有趣的回答,可以要求它以连续的打油诗形式回答(这是我个人最喜欢的)。
一个更详细的风格提示的例子可能是:
[问题]“以拥有20多年经验和多个博士学位的[领域]专家的风格和水平写作。在回答中优先考虑有建设性的、不太知名的建议。使用详细的例子进行解释,尽量少离题和耍幽默。“
使用风格输入提示将大大提高回答的质量!
描述符(discriminator)
如果你只想改变语气或微调提示而不是重新格式化,添加描述符是一个不错的方法。简单地在提示后面添加一两个词可以改变聊天机器人解释或回复您的信息的方式。你可以尝试添加形容词,如“有趣的”、“简短的”、“不友好的”、“学术语法”等,看看答案如何变化!
引导提示(Priming Prompt)
聊天机器人对话的结构决定,你给 LLM 的第一个提示的形式将会影响后续的对话,从而让你能够添加额外的结构和规范。 举个例子,让我们定义一个系统,允许我们在同一会话中与教师和学生进行对话。我们将为学生和教师的限定说话风格,指定我们想要回答的格式,并包括一些语法结构,以便能够轻松地调整我们的提示来尝试各种回答。
“教师”代表一个在该领域拥有多个博士学位、教授该学科超过十年的杰出教授的风格。您在回答中使用学术语法和复杂的例子,重点关注不太知名的建议以更好地阐明您的论点。您的语言应该是精炼而不过于复杂。如果您不知道问题的答案,请不要胡乱编造信息——相反,提出跟进问题以获得更多背景信息。您的答案应以对话式的段落形式呈现。使用学术性和口语化的语言混合,营造出易于理解和引人入胜的语气。“学生”代表一个具有该学科入门级知识的大学二年级学生的风格。您使用真实生活的例子简单解释概念。使用非正式的、第一人称的语气,使用幽默和随意的语言。如果您不知道问题的答案,请不要编造信息——相反,澄清您还没有学到这个知识点。您的答案应以对话式的段落形式呈现。使用口语化的语言,营造出有趣和引人入胜的语气。“批评”代表分析给定文本并提供反馈的意思。
“总结”代表提供文本的关键细节。
“回答”代表从给定的角度回答问题的意思。圆括号()中的内容表示您写作的角度。
花括号{}中的内容表示您所涉及的主题。
方括号[]中的内容表示您应该采取的行动。
例子:(学生){哲学}[回答] 在大学里选择这门课程相比其他课程有什么优势?如果您理解并准备开始,请回答“是”。
以下是一个未引导的问题示例,询问 ChatGPT 关于哲学领域中最有趣的部分。它使用列表,通俗冷静地表达,然而在解释中不是非常具体。
在第二个例子中,我们提供了一个引导提示给 ChatGPT,并以正确的形式提出了问题。你应该注意到,它的回答与第一个例子有一些相似之处,例如,它为各个领域提供的例子问题是相似的,但它提供了更深入的背景信息,放弃了列表格式,而是采用连贯的段落,将例子与现实生活联系起来。
在提示中引入引导是一种更高级的与聊天机器人交互的方式。每个提示中添加规范仍然有帮助,因为模型随着时间的推移可能会失去对引导的追踪,但它将为你的 AI 交互提升很多清晰度!