提问其实是非常考验一个人的思维能力的,一个好的问题一定是有准备、有主题、有结构、有逻辑的,一个好的问题能让被问者更快、更准、更愿意解解答或解决问题。所以说,提问也是一门艺术。
同样地,针对目前百花齐放的LLM大模型市场,我们作为普通的使用者,其实并不需要过多的关注什么是大模型,它的技术细节等等。我们真正要学习的是如果让AI更好的理解你的问题、需求,并输出更完整、准确、符合你意图的结果!要实现这一点,就非常考验你的提问能力了,对ChatGPT这类大模型来说,也就是如何构建更好的
提示(Prompt)
。
笔者最近也被要求系统性学习各类AI课程,包括主流的AI对话工具、AI编程能力、AI Prompt技能等等。通过一段时间的学习和实践后发现,无论是与AI对话、用AI编程,其实都离不开Prompt,它如影随形,并且直接影响着使用AI的效果。下面笔者就抛砖引玉,以ChatGPT为例,简单分享下关于如何正确构建和运用Prompt。
什么是提示工程(Prompt Engineering)
我就直接搬运专业的回答了:
提示工程(Prompt Engineering)是一门新兴的学科,专注于提示词的开发和优化,帮助用户将大型语言模型(LLM)应用于各种场景和研究领域。掌握提示工程的相关技能将有助于用户更好地了解大型语言模型的能力和局限性。
研究人员可以利用提示工程来提高大型语言模型处理复杂任务场景的能力,例如问答和算术推理。开发人员可以通过提示工程设计和开发强大的工程技术,实现与大型语言模型或其他生态工具的高效集成。
提示工程并不仅仅是关于设计和开发提示词。它涵盖了与大型语言模型交互和开发的多种技能和技术。提示工程在实现与大型语言模型交互、对接,以及理解大型语言模型能力方面都发挥着重要作用。用户可以通过提示工程提高大型语言模型的安全性,还可以增强大型语言模型的能力,例如借助专业领域知识和外部工具。
如何运用提示工程
对于普通使用者来说,并不涉及到工程
,我们仅需掌握常用的提示
技巧即可,毕竟一旦涉及到工程,一般来说需要编程或进行相关的开发,大多数人也接触不到。下面介绍几个常见而有效的方法:
1、零样本提示
零样本提示(Zero-shot Prompting)是一种利用已经训练过的大量数据来直接通过提示让模型解决相应任务的方法,不需要提供任何示例样本。它利用了模型本身已经理解的一些概念或知识,通过提示来引导模型给出正确答案。简单说就是用户直接提问,不对AI作任何提示或引导。
下面举一个例子:
用户提问:
将文本分类为中性、负面或正面。
文本:我认为这次假期还可以。
情感:
ChatGPT回答:
中性
可以看到,即使你没有提示AI如何判断中性、负面、正面,它也能给出结果,这就是零样本提示在起作用。注意,当你发现零样本提示的情况下,AI给你的结果不理想时,你就需要做出改变了。
2、少样本提示
少样本提示(Few-Shot Prompting)是一种从ChatGPT生成文本的技术,最少或没有任何示例。它能够利用已经训练过的大量数据,通过提示让模型更清楚知道你想要的内容,从而生成符合要求的文本。简单说就是比零样本提示稍微走了一步,提问前对AI作少量的提示或引导。
下面举一个例子:
用户提问:
“whatpu”是坦桑尼亚的一种小型毛茸茸的动物。一个使用whatpu这个词的句子的例子是:
我们在非洲旅行时看到了这些非常可爱的whatpus。
“farduddle”是指快速跳上跳下。一个使用farduddle这个词的句子的例子是:
ChatGPT回答:
小孩子们在院子里欢快地farduddle着。
上面的例子其实就是想让AI理解farduddle的意思,并能够安装前面的例句造一个句子。可以看到,AI是正确理解并给出了例句。
你可能没有发现,这个例子只给了AI一个提示,一般称为1-shot。当然,如果是更难理解的问题,你可给AI更多类似的提示,每增加一个提示就是一个shot,例如2-shot、5-shot、10-shot等等。
3、链式思考(CoT)提示
链式思考(Chain of Thought,CoT)提示是一种强大的提示技术,可以帮助语言模型进行复杂的推理。它通过在大语言模型中嵌入人类专家的思维过程,以引导模型以类似于人类解决问题的方式进行推理和生成回答。最近的研究发现,链式思考提示能够显著提升大型语言模型(LLM)在处理涉及数学或推理的复杂任务方面的性能。
也就是说模拟人类的思维过程给AI进行提示,引导其做出复杂的推理结果,一般来说比较适合涉及数据、逻辑性强的领域。
下面举一个例子:
用户提问:
这组数中的奇数加起来是偶数:4、8、9、15、12、2、1。
A:将所有奇数相加(9、15、1)得到25。答案为False。
这组数中的奇数加起来是偶数:17、10、19、4、8、12、24。
A:将所有奇数相加(17、19)得到36。答案为True。
这组数中的奇数加起来是偶数:16、11、14、4、8、13、24。
A:将所有奇数相加(11、13)得到24。答案为True。
这组数中的奇数加起来是偶数:17、9、10、12、13、4、2。
A:将所有奇数相加(17、9、13)得到39。答案为False。
这组数中的奇数加起来是偶数:15、32、5、13、82、7、1。
A:
ChatGPT回答:
将所有奇数相加(15、5、13、7、1)得到41。答案为False。
哇!我们可以看到在提供推理步骤后,AI给出了完美的结果。当然,仅此例实际上是不需要给这么多步骤提示的,你可以试着减少提示的步骤,AI应该也能给出正确的结果。
4、自我一致性
自我一致性旨在“替换链式思维提示中使用的天真贪婪解码方法”,其想法是通过少样本CoT采样多个不同的推理路径,并使用生成结果选择最一致的答案。这有助于提高CoT提示在涉及算和常识推理的任务中的性能。
不好理解?就简单理解为自问自答式提示吧,制造问题,提供解答过程,给出正确结果,然后再问类似的问题让AI解答。
下面举一个例子,首先,我们尝试让AI进行算术推理:
用户提问:
当我6岁时,我的妹妹是我的一半年龄。现在我70岁了,我的妹妹多大?
ChatGPT回答:
35
输出是错误的!注意:也许有的时候ChatGPT是可以给出正确答案的,此处只是一个例子。
那么我们利用自我一致性方法,来优化这个问题:
Q:林中有15棵树。林业工人今天将在林中种树。完成后,将有21棵树。林业工人今天种了多少棵树?
A:我们从15棵树开始。后来我们有21棵树。差异必须是他们种树的数量。因此,他们必须种了21-15 = 6棵树。答案是6。
Q:停车场有3辆汽车,又来了2辆汽车,停车场有多少辆汽车?
A:停车场已经有3辆汽车。又来了2辆。现在有3 + 2 = 5辆汽车。答案是5。
Q:小明有32块巧克力,她的姐姐有42块。如果他们吃了35块,他们总共还剩多少块?
A:小明有32块巧克力,小明的姐姐有42块。这意味着最初有32 + 42 = 74块巧克力。已经吃了35块。因此,他们总共还剩74-35 = 39块巧克力。答案是39。
Q:小亮有20个棒棒糖。他给小王一些棒棒糖。现在小亮只有12个棒棒糖。小亮给小王多少棒棒糖?
A:小亮有20个棒棒糖。因为他现在只有12个,所以他必须把剩下的给小王。他给小王的棒棒糖数量必定是20-12 = 8个棒棒糖。答案是8。
Q:当我6岁时,我的妹妹是我的一半年龄。现在我70岁了,我的妹妹多大?
A:
ChatGPT回答1:
当我6岁时,我的妹妹是我的一半年龄,所以她当时是3岁。现在我已经70岁了,所以我的妹妹应该是70-6 = 64岁。答案是64岁。
输出依然是错误的!我们继续尝试一次:
ChatGPT回答2:
当我6岁时,我的妹妹比我小3岁,所以她当时是3岁。现在我70岁了,所以我的妹妹应该是70-3 = 67岁。答案是67岁。
现在,AI给出了正确的推理过程和结果。所以针对逻辑推理性的场景,可以尝试多试几次,让AI逐渐理解和学会推理过程,最终获得正确合理的答案。
以上就我日常会用到的一些Prompt方式和技巧,当然除了这些还有很多更进阶的方法,例如:生成只是提示、思维树(ToT)、检索增强生成 (RAG)、自动提示工程师(APE)等等,不过这些普遍涉及到编程,不是本文讨论范围,就不再延伸了,感兴趣的可以自行搜索学习。

文章评论