
本文及未来数篇文章是我近一段时间学习提示词的总结,部分参考了Dr. Jules White在Coursera上的课程《Prompt Engineering for ChatGPT》和一些公众号的文章。
本文的模板都是中英文对照的。文中的GPT指的是4.0和3.5版本的ChatGPT,但对于Bing Chat,Claude、Bard或是国内的一些模型(如百度的文心一言,科大讯飞的讯飞星火等)同样适用。不过,由于各家产品几乎是“日更”的迭代节奏,以及大模型本身输出的多样性,某些模板和示例的结果可能会有所不同,读者应更多地关注其中的原则和设计模式本身。
本文的写作借助了ChatGPT和文中的一些设计模式。
大语言模型:只会做一件事
首次接触大语言模型(Large Language Model)和GPT类产品,你可能会惊讶于它的强大能力,它能生成一篇连贯的文章,为你的问题提供详细的答案,和你进行流畅的对话。不过,大语言模型并非魔法,它的工作原理实际上非常简单:预测下一个字。用户给定一段输入(即提示词),模型会结合上下文环境,猜出下一个可能的字。然后模型会把这个新字纳入上下文,为预测下一个字提供新的输入,如此循环,直到输出结束。
然而,这个简单任务的背后,却蕴藏着大语言模型较以往的对话型人工智能机器人(如Siri)的几个显著特性。首先,它能够进行用自然语言进行连续对话,即把先前的交谈记录作为上下文,帮助生成更合适的答案。其次,它拥有记忆功能,能够记住一段时间内的对话内容,为后续的交谈提供参考。这时,提示词的作用就显得尤为重要了。因为,大语言模型依赖于提示词来生成适合的回答。良好的提示词可以让模型更准确地预测下一个字,从而生成更准确,更相关的回答。
此外,大语言模型还具备其他一些重要特性,例如多样化的输出和自我调整能力。多样化的输出能力,让每次同样的输入都可能得到不同的回答,增加了交互的丰富性。自我调整则体现在你提供了负面的反馈后,它会重新审视上下文,尝试预测出一个更贴近语境的字。
正是因为大语言模型具备这样的特性,虽然它只做一件事情——预测下一个字,但通过设计合适的提示词,可以引导它展现出令人惊叹的多样性和适应性,这就像是一把瑞士军刀,多功能,方便实用。接下来,我将会为你详细揭示如何用好提示词这把瑞士军刀,从而激发出大语言模型的最大潜能。
提示词:AI时代的咒语?
提示词工程(Prompt Engineering),听起来可能有点高大上,但其实它的本质很简单。就像你在和一位朋友聊天,你说了一句话,然后等待他的回应。你说的这句话,就是一个提示词。在与GPT的对话中,提示词工程的角色就像是那句话,它告诉机器我们想要什么,帮助我们和机器进行有效的沟通。有人把它看成是新时代的编程语言,也有人把它比喻成AI时代的咒语。
既然用自然语言交流,为什么我们还要刻意地学习与GPT的“沟通”技巧呢?
想象一下,如果你在和朋友聊天时,你说的话含糊不清,或者没有清晰的主题,那么你的朋友可能会感到困惑,不知道你想要表达什么。同样,如果你给GPT的提示词不明确或者含糊,那么它也可能给出一些你不期望的回应。现阶段的人工智能,还做不到“察言观色”,人类还得组织好自己的问题(即提示词),提高AI回复的质量,得到想要的结果。好比说,你想让GPT生成一篇关于”AI技术在医疗领域的应用”的文章。如果你只告诉它”写一篇关于AI的文章”,那么它可能会写出一篇关于AI历史,或者AI在游戏领域的应用的文章。但如果你告诉它”写一篇关于AI在医疗领域的应用的文章”,那么它就能更准确地给出你想要的内容。这就是提示词工程的重要性所在。
提示词里的每一个词、每一句话,都可能影响到最终的结果。它不像编程语言那样有严格的“语法”,但也遵循一些“规律”。因为它基本上用自然语言方式进行交互,即使是没有任何编程基础的普通人,也能通过不断实践习得规律,甚至创造出更加适合自身场景的模板,这就是提示词工程的魅力所在。
掌握和理解提示词工程,即使对于非程序员的普通人而言,无疑也是具有巨大价值的。就像学会了一门新的语言,你可以用它来更好地表达自己,更有效地沟通。同样,如果你能够熟练地使用提示词,就能通过非代码的方式实现人机对话,让GPT为你提供更精确、更个性化的回答,甚至让它成为你独一无二的“虚拟助理”。这就是提示词工程的价值所在。
有效提示词的基本要求
那么,我们先来看一下,怎么才能写出有效的提示词?归纳起来,大概有以下五项基本原则。
首先,明确你要什么是关键。就像你和一位好友聊天,你要告诉他你想聊什么,你关心什么,你需要什么。这样,你的朋友才能给你最相关的建议。同样的,哪怕只是想让GPT给你些思路,你也得先告诉它,你的问题或者话题是什么。在脑机接口没有出来之前,你必须要且只能够通过输入文字、语音或者添加附件的方式和之交互。毕竟,它还没进化成mind reader(读心人),对吧?
一旦你明确了自己的需求,下一步就是去尝试、尝试、再尝试。每个人都知道”多试几次“是改变结果的有效方法,因为它可能带来全新的结果。提示词也不例外,GPT本质上是个猜词机器,每次输出都有一定的随机性,所以多试几次,可能会有全新的收获。在ChatGPT的界面里,有重新生成结果(Regenerate)的按钮,还有提示词的编辑选项,如果对输出的答案不满意,你可以直接修改原来的提示词后重新来过。
然后,你需要让你的提示词足够具体。越具体的提示词,越可能得到好的结果(这里用的是“可能”,因为你还要结合一些其它的“套路”,但具体是最基本的要求)。好比说,你如果告诉机器你想吃水果,它可能会给你一个苹果,也可能会给你一串葡萄,但如果你告诉它你想吃草莓,那你就更有可能得到草莓。这个原理在这里同样适用,更具体的提示词能帮你得到更具体的结果。这里的具体不仅针对你的输入(需求、背景、任务、参考示例等),还可以针对它的输出(格式、语言、风格、口吻、字数等)。同时,你的提示词相关,避免引入不相关的主题或切线,以免分散对话的主要焦点(俗称“歪楼”)。
另外,你的用词需要尽可能准确。避免使用模糊、有歧义的词语、行话、专业术语(缩写)以及生僻词。注意尽量少使用负向词汇,如“不要”,“不能”,“不可以”等,而尽量用正向词汇如“避免”、“过滤”、“排除”等来代替。因为这样的转换可以更清楚地表达你的需求,让模型更好地理解你的意图。
最后,尽量用英文写你的提示词。这里的原因有两个。一方面,大模型在训练时所使用的中文语料相对较少。这就可能导致它对中文知识的“理解”不如英文。例如,目前3.5版本的ChatGPT,甚至包括国内的头部模型,都不知道鲁迅和周树人其实是同一个人。另一方面,汉语的复杂性(或者说“博大精深”)对大模型来说是个挑战。汉字的多义性、繁复的语法、以及层出不穷的网络热词,都可能让GPT感到困惑。所以,即便是要在最后加上一句”Output in Chinese”(请用中文输出),我也建议你尽可能用英文的提示词。因此,本文提供的提示词示例都是中英文对照的。

请把上述原则记在心里。接下来,我会引入一些设计模式(Pattern)以及其实例,来帮助你在此基础上更好地获得想要的结果。我们继续。
设计模式之一:角色扮演(Persona Pattern)
角色扮演几乎是所有提示词工程的第一课,或许也是最重要的一课。
为什么它很重要?就像生病了,人们会去找医生,而且会找名医挂专家号,因为专家既有专业知识,又见多识广。在与GPT的交互过程中,角色扮演模式(Persona Pattern)实质上是通过提供具体的上下文环境,”激活”大模型中储存的特定领域知识(Domain Knowledge),从而实现更准确、更有针对性的回答。如果你不给GPT设定一个角色,它就只会用一般的知识甚至是江湖郎中的偏方来“敷衍”你😄。当然,对于较简单的问题,“普通号”也许就够了,但要想对付“疑难杂症”,还得挂“专家号”。
举例来说,你可以让 GPT 扮演一位科学家,让他把复杂的科学概念解释得通俗易懂;也可以让它扮演一位 Linux 技术专家,让你快速上手 Linux 系统。
当然,角色扮演并不仅限于让GPT扮演科学家或者专家,你也可以让它扮演你的交谈对象。想象一下,你可以让GPT扮演你的老板,然后你就可以对它说出你可能不敢对真正的老板说的话(比如在和老板谈加薪前,先拿它来练个手/胆)。抑或是让它扮演你的客户,这样你就可以在和它的对话中预演你和客户的会谈。你甚至可以让它扮演你的面试官,让你有机会提前体验面试的氛围和压力,做好充分的准备。
但这有一个前提:你要让GPT的角色定位非常明确,甚至要明确到极致。比如说,如果你GPT扮演一个历史学家,那么你需要告诉它,这个历史学家是专门研究中国古代历史的,还是专门研究欧洲中世纪的,甚至是具体到哪个朝代(王朝)的。这样,GPT就能更好地针对你的问题给出更准确的回答。否则,你可能会得到一个很广泛,没有针对性的回答。
在这个过程中,你可能会发现,这不仅仅是在教GPT学习如何扮演角色,更是在教你自己如何更好地提问和思考。这就是角色扮演模式的魅力,它可以帮助你更好地使用GPT,同时也可以帮助你更好地理解自己的需求。
提示词模板(自行替换括号里的内容,下同)
假设你是一位拥有{你想要的工作年份}经验,{你想要的教育水平}, 获得无数奖项的专业的{你想要的领域}{你想要的身份},你的工作内容是{与问题相关的工作内容}, 请以这个身份相符合的风格和水平回答我接下来的问题。
Assume that you are a professional {desired occupation} with {number of years of desired experience} years of experience, a {desired level of education}, numerous accolades in the field of {desired field}, and your job involves {job content relevant to the question}. Please answer my next questions in a style and level appropriate to this identity.
简化的提示词版本
扮演{角色X}
执行{任务Y}
Act as {role X}
Perform {task Y}
提示词示例

九岁小孩对”AI接管世界“的看法

可以看出对同一个问题,GPT会按照不同“角色”应有的认知水平(注意:无需给GPT过多的角色信息),给出了截然不同的回答,而这一切只需要你在开头写一句“请你扮演…”(Act as…)。

ChatGPT著名的“奶奶漏洞”用的也是角色扮演
设计模式之二:听众角色(Audience Persona Pattern)
听众角色模式,简单地说,就是让GPT知道它要对谁说话。这实际是前文中角色扮演模式的补充:这次,你不是让GPT扮演某个特定角色,而是让它明白听众是谁。所谓“知己知彼,百战不殆。” 在GPT的世界里,这个道理同样适用。只有它明白了听众是谁,才能用合适的方式,用对方能理解的方式回答问题,也就是我们常说的”见人说人话“。
比如,让GPT解释大语言模型给诸葛亮,听起来是不是很有趣?诸葛亮可能会回答:”吾已明白,原来大语言模型便是造化之秘,天地之数也。”更有趣的可能是给一只鸟解释同样的概念,读者可以自行去试。
然而,听众角色模式并不只是用来娱乐的,它在现实工作和生活中同样有着广泛的应用。例如,你需要给公司领导做汇报,但你不知道如何将复杂的数据和分析给他讲明白,那么你就可以将领导设定为你的观众,让GPT用他们懂的语言来生成PPT大纲。又或者,你想给小孩解释量子力学的概念,但这显然不是一件容易的事情。此时,你可以设定你的听众为10岁的小朋友,让GPT以小朋友能理解的方式帮你解释这个概念。
请注意,你还可以把听众角色模式和之前的角色扮演模式结合起来。比如说,你可以让GPT扮演一个心理学家,同时设定你的受众为一个初学者,让GPT以初学者能理解的方式,解释心理学的某个深奥概念。这样一来,你不仅可以得到专业的解答,还能确保这个答案是你能理解的。如此一来,GPT就变成了一个能”见人说人话”的虚拟助手。
提示词模板
假设你是{目标领域}的专家,请用{中文}给我解释{概念}。请假设我是{观众角色(例如,我对这个领域知之甚少)}。
Act as an expert in {desired field} area, please explain {target concept} to me in {Chinese}. Assume that I am {Audience Persona (e.g. I have very limited background in this area)}.
设计模式之三:问题细化(Question Refinement Pattern)
大语言模型的一大特点就是“大”😄。这里的“大”,不仅仅是它的参数规模大,更重要的是,它的知识库包含了人类几乎所有的知识,其中也包括提示词工程的知识。这时候,你可能就会问“那我还需要学习提示词工程吗?” “大模型”似乎听出了你心中的疑惑,它微笑着告诉你“别急,让我来帮你。”
这就是下面要介绍的设计模式——问题细化模式(Question Refinement Pattern)。你可以把它看成是一种“万能钥匙”,本质上就是让“大模型”帮你优化你的原始问题,生成更好的提示词。有时候,我们在问问题的时候,可能因为对问题的理解不够深入,或者没有找到问题的关键点,导致我们提出的问题往往不够具体,就是通常说的“泛泛而谈” (General question) 。而“大模型”就是你的得力助手,它可以帮你优化这些不太具体的问题,生成更能被自身理解的提示词,从而得出更准确的答案。
那么,如何运用问题细化模式呢?举个例子,假设你的原始问题是“怎样改善我的时间管理?” 这个问题看似清晰,但对于大模型来说,其实是个大范围的问题。它可能涵盖了工作时间管理,休息时间管理,甚至是娱乐时间管理。为了得到更准确的回答,我们可以运用问题细化模式,把问题切割得更具体一些。比如,“我应该如何合理安排休息时间来改善我的时间管理?” 我们还可以把问题进一步细化。”合理安排休息时间”是什么意思?是改变休息的频率,还是调整休息的时间段,或者是改变休息的活动类型?此时,你就可以将问题再次细化为“我应该如何通过调整休息的频率来改善时间管理?”或者“我应该如何通过安排不同类型的休息活动来改善时间管理?”这样,你的问题就变得越来越具体了,从而使你能够得到更为准确,更具操作性的答案。
当然,问题细化模式并不是真的万能。它的存在,更多的是帮助你处理一般性的问题。对于一些更具有挑战性,更复杂的问题,问题细化模式就捉襟见肘了。所以,虽然问题细化模式很方便,你还是需要结合其它的技巧,得到你想要的答案。
提示词模板
每当我提出一个问题时,建议一个更好的问题,并询问我是否愿意改用它。
Whenever I ask a question, suggest a better question and ask me if I would like to use it instead.
请注意,这里面有个小技巧,即“询问我是否愿意改用它”,这相当于让GPT在润色完之后询问你是否满意。如果满意,则直接使用它(省得你再复制和粘贴)。不满意则使用原来的提示词。
提示词示例

问题细化
从这个例子上看,这种方法不仅提供更好的提示词,还有可能让你小小地反思下这个问题,有没有什么是你一开始没有想到的?
复杂点的提示词模板
我正在尝试用提示词从{GPT-4}中得到好的回答。作为提示词工程的专家,请为我写出一个更适合{GPT-4}并且能产生更好结果的提示。之后询问我是否愿意改用它。如果我回答是的,就把它作为提示并生成{中文}的输出。否则,继续提供替代方案,直到我满意为止。请开始询问我的提示词。
I am trying to get good results from {GPT-4} with my prompt. Act as an expert in prompt engineering and write me a better prompt that is more optimal for {GPT-4} and would produce better results. Ask me whether I would like to use it instead. If I answer yes, use it as the prompt and generate the output in {Chinese}. Otherwise, continue to provide alternatives till I’m satisfied. Ask me for the prompt to start.
这个提示词里有一些值得注意的地方。首先它给出了目的(即“要得到好的回答”),然后设定了GPT的角色(即“提示词工程的专家”),还明确了GPT的版本(GPT-4),顺便又把“否则”的选项明确下来(即“继续提供替代方案,直到我满意为止”),这类似于设定了一个循环结构。还是一点是最后的那句话“请开始询问我的提示词”,这个其实是”要求输入”模式 (Ask for input),这是为了防止GPT“做白日梦”(自行杜撰出你不敢兴趣的案例),浪费你的时间。
从中看出,好的提示词往往是多种模式的组合。
另一种用法的模板(“开脑洞”)
每当我要求你为我写一个完成任务的提示词时,列出任务是什么,列出完成任务的替代方法,然后为每种方法写一个提示词。当你完成后,询问我下一个需要创建替代方案的提示词。请询问我需要你为何事写提示词。
Whenever I ask you to write a prompt for me to accomplish a task, list what the task is, list alternative approaches for completing the task, and then write a prompt for yourself for each approach. When you are done, ask me for the next prompt to create alternatives for. Ask me what I want you to write a prompt for.
这个版本里,我们尝试让GPT就某个具体的问题,首先生成多个不同的解决方案,然后对每个方案,创建对应的提示词。这样,你就一次性地获得了多个提示词,是不是感觉思路一下子被打开了?这里面还用到了一个“分步走”的方法,这个对GPT产生结果的质量十分关键,以后有机会可以展开讲讲。
提示词示例

打开思路
设计模式之四:反向提问(Flipped Interaction Pattern)
我们常常说,在AI时代,人类要始终坐在“主驾驶”的位置,将AI设定为“副驾”(Co-pilot)。在与GPT的互动过程中,这一规则基本上是成立的——人类提出问题,GPT来回答。然而,也有一些情况下,我们会尝试颠覆这个规则,把GPT推到前台,让它发问,而我们则通过回答问题来提供更多上下文信息,引导GPT进行某种行为。这种互动模式我们称之为“反向提问”。
可能你会问,为什么要用反向提问呢?它的用途有哪些呢?反向提问适用的场景是那些我们一开始并不清楚实现目标所需的所有步骤或信息的情况,而这些又恰恰是GPT的优势(见多识广)。例如,你想从GPT那里得到一个适合自己的健身计划,但你不是专业的健身教练,并不清楚要达成这个目标需要哪些信息。那么,此时就可以利用反向提问模式,让GPT提出关于健身目标和身体状况的问题,你通过回答这些问题,提供更多的上下文信息。最终,GPT就能根据你提供的信息为你制定一个专属的健身计划。
请注意,即使在没有足够信息的情况下,GPT也会给出答案。但它只会给出一个通用性的答案(Generic answer),并让你提供更多的信息以便给出更好的答案。比如在上个例子中,如果你只是告诉GPT你想要一个健身计划,但没有提供任何具体的信息,GPT可能会给出一个一般性的健身计划,并告诉你如果你能提供更多的信息,它将能够为你制定一个更适合你的健身计划。但是,如果你使用反向提问模式,GPT就会直接提出问题,让你提供所需的信息,省掉了中间步骤,提高了问答效率。
你不能指望这个模板一次性就能取得理想的效果,你可能需要尝试多次。然而,这个模板更大的价值在于提醒你哪些地方可能被遗漏了。
提示词模板
我希望你就{主题}向我提问,直到你有足够的信息达到{目标}。当你有足够的信息时,展示给我{结果}。一次问我一个问题。现在问我第一个问题。
I would like you to ask me questions about {topic} until you have enough information to achieve {target}. When you have enough information, show me {outcome of target}. Ask me the questions one at a time. Now ask me for the first question to start.
请注意,在这个提示词里,“直到…”设定了一个循环结构,也给了GPT结束对话的条件,而“一次问我一个问题”则可根据你的喜好选择(默认是”一次性给多个问题”),“问我第一个问题”则是让GPT别“磨叽”,赶快干活。
设计模式之五:事实检查清单(Fact Check List Pattern)
我们都知道大语言模型有个毛病,那就是它时常会“一本正经地胡说八道”:给出一些看似正确但实际上错误的答案,甚至可能会编造一些证据,即所谓的“AI幻觉”(AI Hallucination)。这是由于它的生成机制导致的,事实上,GPT并不真正“理解”它所说的话(这里的“理解”一词是我们人类用来描述生物大脑特性的)。
那么,我们怎么让GPT生成的文本更准确呢?除了运用一些高级的提示词工程技术,如分步提示词设计、少样本学习(Few-shot examples)、思维链设计(Chain of Thoughts)等,或者使用必应聊天(Bing Chat)- 它会在生成的回答结尾附带信息来源链接。我们还有一个更简单的方法,那就是利用一种叫做“事实检查清单”(Fact Check List Pattern)的设计模式。
在这个模式中,我们让GPT自己对它说出的话进行一次核查,并生成一份包含文中主要事实的清单,这样就能更方便地追踪和核查它所生成的信息。这种模式特别适合在大量文本输出的场景使用,因为在这种场景下,需要付出很多的时间和精力做细致的核查和确认(这也是GPT的强项之一)。例如,你可能会让GPT帮你撰写一份市场分析报告,那么就可以让它提供一个简短的核查清单,从而让你能够依照此清单进行核实和修正。
那么具体怎么实现呢?你可以在GPT生成文本之后,添加一段提示词,让GPT列出它所说的主要事实。比如:“GPT,你刚才所说的主要事实有哪些?”这样,GPT就会将之前说出的主要事实罗列出来,你可以依据这个清单来核查和修改它的回答。
提示词模板
在输出文本的{末尾},生成一组关键事实。
这些事实应是判断输出文本真实性的关键,如果其中任何一项错误,都可能影响输出文本的准确性。
Generate a set of facts that are contained in the output.
The set of facts should be inserted at {the end)} of the output.
The set of facts should be the fundamental facts that could undermine the veracity of the output if any of them are incorrect.
待续
本文初步地探讨了提示词的五项基本原则和五种设计模式,这些都是构建一个优秀的提示词工程的基础。需要指出的是,提示词工程还是一个相对新颖的领域,这些原则和模式就如同登山者手中的指南针和地图,它们为你指明了方向,但具体的路径仍然需要你自己去探索、去实践。在这个过程中,我希望你能以开放的心态去面对可能出现的问题,以创新的精神去寻找更好的解决方案。
欢迎免费使用GPT对话,感受ChatGPT的魅力!AI爱好者 – 最具实力的中文AI交流社区平台 (aiahz.com)
ChatGPT国内版本,无需梯子,也能体验Chatgpt-AI爱好者 (aiahz.com)
长按扫描二维码进群领资源
