前言

之前的文章《OpenAI创始人揭秘如何训练ChatGPT模型》给大家介绍了ChatGPT的训练方式,正是它的训练方式决定了,当我们鱼ChatGPT进行交互时,Prompt是一个关键的元素,Prompt是用户提供给模型的输入,它可以指导模型理解用户的意图和期望,一个好的Prompt可以帮助模型生成准确、有用的回复,提高交互的效果和用户满意度。你可以将prompt看作是与模型建立对话的开场白。它可以是一个问题、一个任务描述,或者是对话的开头,通过清晰明确地表达你的问题或需求,可以引导模型生成期望的回复。然而,编写一个有效的prompt并不容易,它需要一些技巧和注意事项,以确保模型能够正确理解你的意图并生成准确的回复,在接下来的内容中,我将介绍一些关于prompt的知识和最佳实践,帮助你更好地利用ChatGPT的潜力。

文章将会分为《基础篇》和《进阶篇》,大家按需阅读。

提示词(Prompt)

指导人工智能执行任务的过程称为提示过程。我们向 AI 提供一组指令(提示),然后它执行任务。提示词可以是简单的一个问题,也可以是复杂的多个段落。

以下是两个提示词示例:

1. 文章摘要
假设您正在阅读《三体》的简介。您想快速了解文章的主要内容,因此您向 AI 展示这些内容,并要求进行摘要:

第一部《三体》
人类对太空发射的信号,被四光年以外的三体文明截获。由于三体行星随时面临毁灭的危险,三体人决定入侵地球。450年后,三体人将降临地球,人类必须为此开始准备。为防止450年后,地球科技超过三体科技,三体人使用“智子”技术将地球文明的基础科学锁死。一群地球人发起成立了三体组织,旨在毁灭地球文明,迎接三体文明。叶文洁是该组织的精神领袖。同时,三体人利用“智子”技术与三体组织联系,暗杀全球的科学家。地球文明以“古筝计划”瓦解了三体组织。
第二部《黑暗森林》
由于三体人利用“智子”持续监视地球,地球人只能利用三体人思维透明的缺陷,制订“面壁计划”来对抗三体人。最后一位面壁者罗辑发现了宇宙社会的“黑暗森林”法则,并通过广播一颗恒星的坐标验证了其猜想。先期抵达太阳系的三体探测器“水滴”几乎将地球人的太空舰队摧毁殆尽,并成功阻止了地球人向太空广播。最终,罗辑利用“雪地计划”成功逼迫三体人妥协,赢得了暂时的和平。
第三部《死神永生》
人类利用“阶梯计划”将云天明的大脑发向三体舰队,后被三体舰队截获。三体人对地球发动突然袭击,成功摧毁了地球上的广播系统。而太空中的地球人利用四维碎块成功阻止了“水滴”对太空中的最后一套广播系统的破坏,并向太空广播三体恒星的坐标。同时,三体第二舰队已经以光速向地球进发,并强迫所有地球人移民澳大利亚。然而,由于三体恒星的坐标被广播,三体世界被彻底摧毁。三体第二舰队也认为太阳系不再安全,放弃地球,转向其它方向。云天明被三体人克隆之后,融入三体社会,并通过三个童话故事向地球人传递先进科技的信息。但在地球人尚未完全解密出其中隐藏的信息时,更先进的文明即已将太阳系二维化,仅有极少数人逃离太阳系,延续着地球文明。

以下是 ChatGPT 的回复。更简洁易读!

在第一部《三体》中,地球人为了防止三体科技超越,三体人使用“智子”技术锁死地球的科学发展。地球上的三体组织试图毁灭地球文明,但被地球通过“古筝计划”瓦解。在第二部《黑暗森林》中,地球人制定“面壁计划”对抗三体人,最终通过“雪地计划”迫使三体人妥协。第三部《死神永生》中,地球人与三体人展开最后的决战,最终地球文明被摧毁,只有少数人逃离太阳系。这三部小说探讨了文明冲突、科技发展和人类的生存问题。

2. 数学问题求解
如果您有一个数学题,想让语言模型来解决,您可以通过提问 "数学计算等于几" 来输入提示。

提示词可能是这样的:

965 * 590 等于几?

对于这个提示,GPT-3(text-davinci-003)(一种 AI 模型)很有可能回答一个错误的答案: 569,050(不正确)。

如果要模型回答正确,就需要引入提示词工程了。

提示词工程(Prompt Engineering)

如果我们不是问965 * 590 等于几?而是问

确保你的答案完全正确,965*590 等于几?确保你的答案完全正确:

GPT-3 将会回答正确 569,350(正确)。为什么会这样呢?为什么告诉 AI “确保你的答案完全正确”就会得到正确答案?其他能够产生最佳结果的提示要怎么写呢?请继续阅读。

还有一件事,如果你在GPT-3上运行上述提示,你应该将 TEMPERATURE 设置为 0 来消除随机性。

给出指令

最简单的提示方法之一就是直接给出指令。比如上一个例子中的计算指令(965 * 590 等于几? )。其实,AI可以理解更复杂的指令。

示例 1
2023-08-27T15:13:27.png

AI 能够轻松地解决这个问题。使用指令提示,它可以解决许多其他简单和更复杂的问题。

示例 2
这是一个更复杂的例子:

请阅读以下销售邮件。删除任何可用于识别个人身份的信息 (PII),并用相应的占位符替换它。例如,用"[姓名]"替换"John Doe"。

你好 John,
我写信给你是因为我注意到你最近买了一辆新车。我是一家当地经销商 (Cheap Dealz) 的销售员,我想让你知道我们有一辆新车的超值优惠。如果你有兴趣,请告诉我。
Jimmy Smith
电话:410-805-2345
电子邮件:jimmysmith@cheapdealz.com

以下是AI的回答:

你好 [姓名],
我写信给你是因为我注意到你最近买了一辆新车。我是一家当地经销商 ([经销商名称]) 的销售员,我想让你知道我们有一辆新车的超值优惠。如果你有兴趣,请告诉我。
[销售员姓名]
电话:[电话号码]
电子邮件:[电子邮件地址]

从这个示例中你有看到模型除了遵从你的指示,还推断出你可以的意图,它把电话号码、邮件地址也做了替换,即使我们没有明确告诉它这样做。

角色提示

另一种提示技术是给 AI 分配一个角色。例如,您的提示可以以"你是一名医生"或"你是一名律师"开始,然后要求 AI 回答一些医学或法律问题。
举个例子:

你是一个能解决世界上任何问题的杰出数学家。
试着解决下面的问题:
100100/40056 是多少?

答案是 1400。

这是一个正确的答案,但是如果 AI 只是被提示100100/40056等于几?它会回答280(错误)。

通过为 AI 分配一个角色,给它提供了一些上下文。会有助于 AI 更好地理解问题。通过更好地理解问题,AI 就可以给出更好的答案。

多范例提示

2023-08-27T15:51:49.png
另一个提示策略是多范例提示(few shot prompting), 这种策略将为模型展示一些例子(shots),从而更准确地描述你的需求。

在上图的例子中,我们尝试对用户反馈进行积极(positive)或负面(negative)的情绪分类。我们向模型展示了 3 个例子,然后我们输入一个不在例子里面的反馈。模型发现前三个例子都被分类到 positive 或者 negative ,进而通过这些信息将我们最后输入的反馈分类到了 negative。

如何结构化地设计例子也非常重要。由于我们已经将头三个例子结构化成: input: classification,因此模型最终也跟着同样只输出分类的结果,而不是一段完整的句子,例如 this review is positive。
2023-08-27T15:52:17.png

结构化的延伸

多范例提示的一个关键场景是当我们需要以特定的结构输出结果,但是又很难向模型进行描述的时候。为了理解这一点,让我们看这样一个例子:假设您需要通过分析当地的报纸文章来汇编附近城镇公民的姓名和职业。您希望模型读取每篇文章并以Last, First [OCCUPATION]格式输出姓名和职业列表。为了让模型做到这一点,您可以向它展示一些示例:
2023-08-27T15:53:35.png
通过向模型展示正确的输出格式示例,它就能够为新的文章生成正确的输出结果。

不同类型的范例提示

单词 shot 在该场景下与 example(范例) 一致。除了多范例提示(few-shot prompting)之外,还有另外两种不同的类型。它们之间唯一的区别就是你向模型展示了多少范例。

类型:

  • 无范例提示(0 shot prompting): 不展示范例
  • 单范例提示(1 shot prompting): 只展示 1 条范例
  • 多范例提示(few shot prompting): 展示 2 条及以上的范例

无范例提示

无范例提示是最基本的提示形式。它仅向模型展示提示信息,没有提供任何示例,并要求其生成回答。因此,你到目前为止看到的所有指令和角色提示都属于无范例提示。无范例提示的一个例子是:

Add 2+2:

这是无范例提示,因为我们没有向模型展示任何完整的示例。

单范例提示

单范例提示是向模型展示一个示例。例如:

Add 3+3: 6
Add 2+2:

我们仅向模型展示了一个完整的示例(“Add 3+3: 6”),因此这是一个单范例提示。

多范例提示

多范例提示是向模型展示2个或更多示例。例如:

Add 3+3: 6
Add 5+5: 10
Add 2+2:

这是我们向模型展示了至少2个完整的示例(“Add 3+3: 6”和“Add 5+5: 10”)。通常,展示给模型的示例越多,输出结果就越好,因此在大多数情况下,多范例提示比另外两种提示更有效。

结论

多范例提示是让模型生成准确且格式正确的输出的强大技术!

组合提示

2023-08-27T15:58:08.png
正如我们在前面内容看到的,面向模型的提示具有不同的格式和复杂性。它们可以包括上下文、指令式的提示词和多个输入-输出的示例。现在我们将这些不同的技巧组合起来,让其产生更强大的提示。

以下是一个包含上下文、指令以及多示例提示的例子:

Twitter是一个社交媒体平台,用户可以发布称为“推文”的短消息。推文可以是积极的或消极的,我们希望能够将推文分类为积极或消极。以下是一些积极和消极推文的例子。请确保正确分类最后一个推文。
Q: 推文: "今天真是美好的一天!"
这条推文是积极的还是消极的?
A: 积极的
Q: 推文: 我讨厌这个班级"
这条推文是积极的还是消极的?
A: 消极的
Q: 推文: "我喜欢牛仔裤上的口袋"
A:

通过添加额外的上下文和示例,我们让人工智能表现更好。

规范化提示

2023-08-27T15:59:07.png

我们现在已经认识到了多种类型的提示,以及如何组合它们的方法。接下来将用专业术语来解释不同类型的提示。
提示的组成部分
以下是在一个提示中将时常看到的一些组成部分:

  • 角色
  • 指令/任务
  • 问题
  • 上下文
  • 示例(few shot)

在之前内容中,我们涵盖了角色、指令和示例。问题则是简单的单一问题!(例如,“法国的首都是什么?”)。上下文则是任何与你想要模型作出的回应有关的信息。

并不是每个提示都包含所有这些组成部分,并且当某些部分出现时,它们之间也没有标准的顺序。例如,以下两个提示,每个提示包含一个角色、一个说明和一个上下文,虽然描述顺序有差异,但是我们期望他们做的事情是一样的:

你是一名医生。请阅读这份病史并预测患者的风险:
2000年1月1日:打篮球时右臂骨折。戴上石膏进行治疗。
2010年2月15日:被诊断为高血压。开了利辛普利的处方。
2015年9月10日:患上肺炎。用抗生素治疗并完全康复。
2022年3月1日:在一次车祸中患上脑震荡。被送进医院接受24小时的监护。

2000年1月1日:打篮球时右臂骨折。戴上石膏进行治疗。
2010年2月15日:被诊断为高血压。开了利辛普利的处方。
2015年9月10日:患上肺炎。用抗生素治疗并完全康复。
2022年3月1日:在一次车祸中患上脑震荡。被送进医院接受24小时的监护。
你是一名医生。请阅读这份病史并预测患者的风险:

然而,第二个提示其实更好,原因是指令是提示的最后一部分,这时候语言模型将更倾向于按指令执行而不是进一步输出上下文相关的信息。例如,如果给定第一个提示,语言模型可能会回复:2022年3月15日:与神经科医生预约随访,以评估脑震荡恢复进展,而不是直接预测患者的风险。

聊天机器人技巧

最常见的一种使用提示的方法是与聊天机器人(例如 ChatGPT)进行互动。请注意,ChatGPT 与 GPT-3 不同,他们之间的主要区别在于聊天机器人可以记住你的对话历史。就像 GPT-3 一样,它们也可以高水平地回答问题、提供写作摘要和分析、编写文案或代码等,这是一个令人兴奋的前景——但是聊天机器人的真正价值只有在你使用具体的提示时才能体现。在本文中,我们将探讨一些基本的方法,如使用风格指导、描述符和引导,让聊天机器人更好的发挥作用。

风格指导(Style Guidance)

风格指导就是要求 AI 以某种特定的风格来表达。如果没有给出风格指导的问题,ChatGPT 通常会返回一两个短段落的回答,少数需要更长的回答时会返回更多内容。
2023-08-27T16:07:16.png

ChatGPT 的回答常以中性正式的语气表达,同时提供一些细节,这非常不错!不过,如果我们想要更好的回答,可以在提示末尾自定义 ChatGPT 的回答风格。如果我们想要更加随意的回答,可以要求它以友好或非正式的语气表达;如果我们想要更易读的格式,可以给出相同的问题,但要求以无序列表的形式回答;如果我们想要一个有趣的回答,可以要求它以连续的打油诗形式回答。

2023-08-27T16:08:27.png
一个更具体的风格提示的例子:

[问题]“以拥有20多年经验和多个博士学位的[领域]专家的风格和水平写作。在回答中优先考虑有建设性的、不太知名的建议。使用详细的例子进行解释,尽量少离题和耍幽默。“

使用风格输入提示将大大提高回答的质量!

描述符(discriminator)

如果你只想改变语气或微调提示而不是重新格式化,添加描述符是一个不错的方法。简单地在提示后面添加一两个词可以改变聊天机器人解释或回复您的信息的方式。你可以尝试添加形容词,如“有趣的”、“简短的”、“不友好的”、“学术语法”等,看看答案如何变化!

引导提示(Priming Prompt)

聊天机器人对话的结构决定,你给 LLM 的第一个提示的形式将会影响后续的对话,从而让你能够添加额外的结构和规范。 举个例子,让我们定义一个系统,系统中让教师和学生进行对话。我们限定学生和教师的说话风格,指定我们想要回答的格式,并包括一些语法结构,以便能够调整我们的提示。

“教师”代表一个在该领域拥有多个博士学位、教授该学科超过十年的杰出教授的风格。您在回答中使用学术语法和复杂的例子,重点关注不太知名的建议以更好地阐明您的论点。您的语言应该是精炼而不过于复杂。如果您不知道问题的答案,请不要胡乱编造信息——相反,提出跟进问题以获得更多背景信息。您的答案应以对话式的段落形式呈现。使用学术性和口语化的语言混合,营造出易于理解和引人入胜的语气。

“学生”代表一个具有该学科入门级知识的大学二年级学生的风格。您使用真实生活的例子简单解释概念。使用非正式的、第一人称的语气,使用幽默和随意的语言。如果您不知道问题的答案,请不要编造信息——相反,澄清您还没有学到这个知识点。您的答案应以对话式的段落形式呈现。使用口语化的语言,营造出有趣和引人入胜的语气。

“批评”代表分析给定文本并提供反馈的意思。
“总结”代表提供文本的关键细节。
“回答”代表从给定的角度回答问题的意思。

圆括号()中的内容表示您写作的角度。
花括号{}中的内容表示您所涉及的主题。
方括号[]中的内容表示您应该采取的行动。
例子:(学生){哲学}[回答] 在大学里选择这门课程相比其他课程有什么优势?

如果您理解并准备开始,请回答“是”。

以下是一个未引导的问题示例,询问 ChatGPT 关于哲学领域中最有趣的部分。它使用列表,通俗冷静地表达,然而在解释中不是非常具体。
2023-08-27T16:11:39.png
在第二个例子中,我们提供了一个引导提示给 ChatGPT,并以正确的形式提出了问题。你应该注意到,它的回答与第一个例子有一些相似之处,例如,它为各个领域提供的例子问题是相似的,但它提供了更深入的背景信息,放弃了列表格式,而是采用连贯的段落,将例子与现实生活联系起来。
2023-08-27T16:11:59.png
在提示中引入引导是一种更高级的与聊天机器人交互的方式。在每个提示中添加规范很重要,因为模型随着时间的推移可能会忘记引导。

大语言模型的不足

LLMs 十分强大但也並非完美,在使用的时候需注意一些隐患。

引用来源

LLMs 没有连接到网络且无法精确得知他们的信息来源,所以大多数情况下不能准确给出引用来源。他们经常会产生一些看起来不错,但完全不准确的资料。

偏见

LLMs 时常产生具有刻板印象的回应。即使有安全防护措施,他们有时也会生成性别歧视/种族歧视/同性恋歧视的内容。

幻觉

当被问到一个不知道答案的问题时,LLMs 时常产生虚假的信息。有时他们会说不知道答案,但很多时候他们会自信地给出一个错误的答案。

数学

LLMs 不擅长逻辑计算。他们解决简单的数学问题也存在困难,对于更复杂的数学问题更是无从下手。

提示词攻击

用户可以欺骗 LLMs 使其生成任何他们想要的内容。

结语

最后需要提醒你的是,GPT 并不是万能的,它和人类一样,也有自己的弱点,我们应该扬长避短,充分发挥它的优势,并避免让它去做自己不擅长的事情。

万物皆有裂痕,那是光照进来的地方。

标签: none

添加新评论