周末去电影院看了《飞驰人生2》。可能是最近研究AI上了头,看电影的时候满脑子闪过的都是AI相关的东西。
要是把ChatGPT比作是一台赛车,那我们就相当于这台赛车的驾驶员。
赛车有性能好坏之分,驾驶员同样有能力上的差距。
所以做同一件事儿的时候,即使有人拿着最强的GPT4.0,可能都比不过另一个人拿着文心一言3.5做的效果好。
核心原因就在于“驾驶员”的“驾驶技术”——Prompt。
好的“驾驶员”可以在各种场景下运用好各种“驾驶技巧”以达到最佳的效果。
但烂的“驾驶员”可能无论什么赛道全都是一通乱开,最后再把原因归咎于“车不行”。
所以,AI时代的各位“驾驶员”,想要开好ChatGPT这台赛车的话,建议大家先学会怎么开车。
今天这篇文章主要跟大家分享一下Prompt的创作技巧。
市面上关于Prompt的论文教程很多,但如果要我推荐,首选的必定是OpenAI官方推出的Prompt engineering。
相比于思维链、结构化提示词这些比较高级的Prompt编写技巧,OpenAI的Prompt engineering更像是一本人教版教材。
想学会高级驾驶技巧,就必须要先从最基础的“科目二”开始学起。
S弯还没学会就想跑巴音布鲁克,结果只能是车毁人亡。
所以这篇文章小福就带着兄弟们来好好学一学怎么样开好ChatGPT这台车。
Prompt engineering总共给出了6条Prompt编写规则,分别是:
策略一:编写清晰的指令
提供具体细节和格式要求来减少模型猜测的必要性。
策略二:提供参考文本
通过提供相关的参考文本来帮助模型生成更准确的回答。
策略三:分解复杂任务
将复杂任务分解成简单的子任务以降低错误率。
策略四:给模型时间‘思考’
通过要求模型进行思考之后再回答来提高答案的可靠性。
策略五:使用外部工具
利用外部工具来弥补模型的不足和提高任务的执行效率。
策略六:系统测试改变
通过系统地测试来评估对提示的改变是否真正提高了性能。
接下来,小福来给大家分条拆解每条策略的具体操作技巧。
策略一:编写清晰的指令
其实就是要我们在跟ChatGPT交流的时候,说话要说清楚。
就像是你让别人给你买奶茶,要是不说你想要什么口味的,人家怎么会知道给你买什么呢?
那怎么编写一条清晰的Prompt呢?
6个具体的操作技巧:
1、给足够的细节
就是说,你要是想要个准确的答案,就得把问题说全。
比如你问的太简单了,模型可能就猜不到你真正想问的。
比如说:
你要是问:“Excel里怎么加数字?”这就太宽泛了。
你要是问:“我怎么能在Excel里自动计算一行的美元数额,然后把所有行的总和放在最右边一列,列名叫‘总计’?”这样提问就清楚多了。
2、让模型扮演角色
就像是给模型分配一个角色,让它按这个角色来回答你。
举个栗子:
“帮我写封感谢信给螺丝供应商,他们这么快就送来货了,帮了我们大忙。”
然后你设定的角色是:“回答中每段都得有个笑话或者俏皮话。”
这样GPT的回答就会更符合我们期望的风格或者内容。
3、用分隔符来区分
通过使用三重引号、XML标签、章节标题等分隔符,可以帮助模型更清晰地区分和理解输入内容的不同部分。
特别是在处理复杂任务时更能减少混淆。
如果你的问题里有好几部分,用这些特殊符号来分开,这样模型就不会搞混了。
比如:
“用三重引号括起来的文本,帮我总结成一诗歌。”
4、分步骤说明
就是把你要做的事情拆成一步步的,告诉模型该怎么做,这样它就能一步步跟上了。
比如:
第一步:“我会给你一段用三个引号括起来的文本。你就用一句话总结,前面加个‘摘要:’。”
第二步:“然后把这摘要翻译成西班牙语,前面加个‘翻译:’。”
把这些步骤明确地写出来,GPT就可以更容易地按照指示进行操作。
5、给出示例
有时候,直接给个例子比光说要怎么做还管用,尤其是当你希望模型按照某种风格回答时。
比如:
你问:“教我耐心是什么。”
模型回答的风格示例:“就像是,一条小河能刻出最深的峡谷,一首伟大的交响乐从一个音符开始,最复杂的挂毯也是从一根线开始的。”
6、指定所需的输出长度
这点其实没什么好讲的,就是字面意思。
总之,就是你越是告诉模型你想要什么,它给出的回答就越能打中你的心思。
记得,跟模型交流,清晰是王道!
策略二:提供参考文本
当我们跟ChatGPT交流的时候,有时候它会根据我们的问题编出一些答案。
这就好比是,你问你的朋友一个超专业的问题,他不懂,但为了不失面子,就随便编了个答案告诉你。
为了避免这种情况,我们可以给模型一些参考文本,就像是给你的朋友一本书,告诉他答案在书里。
怎么做呢?
直接告诉模型用书里的内容回答;
就好比你对你的朋友说,“用这本书回答我刚才的问题。”这样模型就会去参考文本找答案。
要求模型引用书里的内容;
如果你想让答案更有说服力,你可以要求模型在回答时直接引用书里的内容。
举个例子:
比如说,我们想了解“全球变暖对农业的影响”,而我们手头有一篇详细的研究报告。
任务:利用这篇报告回答“全球变暖如何影响农作物的生长周期?”
操作步骤:
先把报告给模型:就像是把书递给你朋友,让他有材料可查。
构建提问:然后告诉模型,用报告里的内容来回答你的问题。
比如说,“根据你手头的这篇报告,讲讲全球变暖是怎么影响农作物生长周期的?”
如果需要,还可以要求引用:告诉模型,回答时最好引用报告里的具体内容,这样答案更靠谱。
预期结果:
模型会根据报告内容,告诉你全球变暖通过改变气候条件,比如温度和降水,怎样影响到农作物的种植、生长和收获。
可能还会告诉你报告里提到的一些具体数据或例子来支撑它的解释。
通过这种方法,我们不仅能够获得更加精确和有依据的答案。
还能在一定程度上避免模型产生无根据的虚假信息,从而提高整个回答过程的质量和可信度。
策略三:分解复杂任务
说简单点,就是我们在解决一个大难题时,先把它拆成小块来一块块解决。
比如有一个超级复杂的拼图,如果想着一次性拼完,费时费力还不一定能成功。
但如果我们把它分成几个小区域,每次只专注于完成一小块,那这事儿就容易多了。
具体怎么做呢?
意图分类:
就好比你在一个大型超市里购物,先决定去哪个区域(水果、蔬菜、肉类),这样就不会在超市里乱转半天。
对于我们需要解决的问题也是,先看看这是哪类问题,然后再决定用什么策略解决。
长谈短说:
如果有人跟你说了一大堆话,你可能需要先梳理一下,再决定怎么回答。
同样地,对于长时间的对话,我们也可以先总结一下,再继续对话。
一步步来:
比如你要写一篇论文,需要先写个大纲,然后逐段完成。
对于超长的文档也是,我们可以一小节一小节地总结。
最后把所有小总结再汇总成一篇完整的总结。
举个栗子:
假设我们有一个复杂任务:为一个客户服务应用分类和处理客户查询。
步骤一:意图分类
首先,我们将每个客户查询分类到主要类别和次要类别。
比如,主要类别可以是账单问题、技术支持、账户管理或一般咨询。
每个主要类别下可以有更具体的次要类别。
如账单问题下的次要类别可以是退订或升级、添加付款方式、收费说明、争议收费等。
步骤二:提供具体指令
根据客户查询的分类,为模型提供处理下一步所需的更具体指令。
例如,如果客户需要技术支持中的“故障排除”,系统会告诉模型提供特定的故障排除步骤。
实际应用示例:
用户查询:“我需要让我的互联网再次工作。”
系统首先对查询进行分类,确定这是一个技术支持中的“故障排除”请求。
然后,系统提供具体指令,要求模型引导用户检查所有路由器的电缆是否连接好,询问用户使用的路由器型号,并根据型号提供重启设备的步骤。
通过这种方式,一个复杂的任务被有效地分解成了一系列简单、易于管理的子任务。
每个子任务都有明确的指令和目标,从而提高了整体任务的准确性和效率。
策略四:给模型时间“思考”
当你遇到一个难题,比如突然有人问你:“17乘以28等于多少?”
你可能不会立刻蹦出答案来,对吧?
你需要点时间去算一算。
这其实也适用于AI模型。
当模型被要求解答复杂的问题时,如果我们让它有时间先“思考”一下,就能帮助它给出更准确的答案。
举个栗子:
比方说,我们要模型帮我们解个数学题。直接问答案,它可能一下子就给出个答案,但这样容易出错。
如果我们让模型先展示一下它是怎么一步步算出来的,这不仅可以让我们看到模型的“思考过程”,还能帮助它避免错误,提高回答的准确率。
这个策略可以用几种方式来实践:
逐步推理:
就是让模型像讲故事一样,一步步告诉我们它是怎么想的,最后才给结果。
内部独白:
这个有点像模型自言自语,它会在内部“思考”一番。
但不会直接告诉我们这个过程,只告诉我们最终的答案。
这样做的好处是,比如在教学场景下,可以避免直接给学生答案,而是引导他们自己思考。
检查遗漏:
就是在模型给出答案后,我们再问问它,是不是考虑全了,有没有漏掉什么。
这样做可以确保模型提供的答案尽可能全面和精确。
通过这样的策略,我们其实是在帮助模型更好地处理和解决问题。
就像给它一点时间去头脑风暴一样,结果往往会更满意。
这就是为什么“给模型时间‘思考’”这个策略这么重要,它能显著提升模型处理复杂问题的能力。
策略五:使用外部工具
这个策略其实很实用,主要是告诉我们在用大型语言模型解决问题时,有时候模型自己搞不定,或者说不够准确、不够高效。
这时候,我们可以借助一些外部的工具,让这些工具先做一部分工作,然后再把结果交给模型来处理。
就像是给模型找了个小帮手,让模型能更好地完成任务。
举个例子:
假设我们要让模型帮我们处理一些数学计算,或者调用一些外部API获取数据。
如果直接让模型来做,它可能会犯错,或者根本就做不了。
但是,如果我们用一个代码执行引擎(比如OpenAI的代码解释器)先做这部分工作,就可以把计算结果或者API的数据直接给模型。
这样模型就有了确切的数据去完成后续的任务,比如分析数据、做出预测等等。
再比如,我们正在开发一个可以自动回答用户问题的客服机器人。
但是,问题的答案需要从一大堆文档里查找。
如果直接让模型去处理这些文档,模型可能因为文档太多而处理不过来。
这时,我们可以使用文本检索系统(比如基于嵌入向量的搜索)来帮助模型快速找到相关的文档。
然后,模型就只需要处理这些被检索出来的、相关性更高的文档,从而更快、更准确地给出答案。
总的来说,这个策略就是在模型遇到困难的时候,找到合适的工具来帮忙,让模型能更好地发挥它的优势。
这种方法不仅可以提升模型的性能,一定程度上还能节省不少成本。
策略六:系统测试改变
比如你在用ChatGPT来帮你回复邮件,但是你发现ChatGPT每次都回得特别长,差不多能写成一篇小论文了。
你就想,能不能让它回复得短一点呢?
于是你就在给AI的指令里加了一句:请简短回复。
一开始看起来效果不错,ChatGPT确实短了不少。
但是,问题来了,这样改真的好吗?
这就需要我们做一些测试来验证了。
比如,我们可以准备很多种不同类型的邮件,看看在这些不同情况下,ChatGPT的回复是不是既简短又切题。
这就像是给AI做一个大考,考它在各种情况下的表现。
通过这样的测试,你可能会发现,虽然回复短了,但有时候ChatGPT可能因为太想简短而忽略了邮件里的一些重要信息。
这时候,你可能就需要再调整一下你的指令,或者针对不同的邮件类型,给ChatGPT不同的回复策略。
也就是说,想要改进ChatGPT的表现,不仅仅是一次两次的小改动那么简单。
我们需要系统地测试和评估,不断地调整和优化,才能让ChatGPT变得更聪明,更懂你,以确保最终得到最佳的模型表现。
以上这6条Prompt编写技巧,基本上就相当于Prompt这门技术的全部基础技能。
如果你是一个AI小白,等你掌握了这些基础技能之后,再去学习更高级的Prompt编写技巧,就能更得心应手。毕竟再高级的技巧也是从基础技巧一点点发展来的。
版权声明:本站文章为原创内容,皆拥有版权信息,主要目的在于分享信息,内容仅供读者参考。