AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


从新手到专家,逐渐掌握提示词工程的九级技巧
发布日期:2024-10-28 20:07:29 浏览次数: 1691 来源:风叔云


前言

不管是直接和LLM大模型对话,还是训练AI Agent完成特定领域的工作,或者是利用RAG知识库处理专业领域的问答和检索,想要发挥LLM大语言模型的最大价值,提示词工程的技巧都发挥着重要作用。提示词的好坏,会对大模型的输出结果造成很大的影响。

在本篇文章中,风叔将从简单到复杂,从新手级到专家级,详细介绍大模型提示词工程的九级技巧。


提示词工程的具体方法

第 1 级 :基础请求


直接表达我们的需求,即直接告诉大模型我们的问题,不需要过多思考,这也是大多数人和大模型对话的方式。

这种方式的输出结果非常不确定,有时能生成不错的输出,有时又差强人意,这也是为什么很多人觉得大模型说的都是正确的废话。而且大模型还经常出现事实性错误,对一些推理问题更是错误百出。

这里风叔就不举例了,大家可以自行向大模型提出问题进行测试。


第 2 级:应用格式

即提示词格式化,用特定格式的提示词向大模型提问,会对模型输出的准确性有比较大的提升。比如APE提示词框架,这个框架建议将用户的请求分解为三个主要部分,行动、目的和期望
行动 (Action):定义需要完成的特定任务、行动或活动。这是框架的第一步,旨在明确要执行的具体任务或活动。
目的 (Purpose):讨论意图或目标。这部分是为了解释为什么要执行这个特定的任务或活动,它的背后意图是什么,以及它将如何支持更大的目标或目标。
期望 (Expectation):陈述期望的结果。在这最后一步,明确表述通过执行特定任务或活动期望实现的具体结果或目标。
以下是一个APE提示词框架的例子,假设你是一家产品销售公司的营销经理,想通过社交媒体广告来提高产品的在线销售,希望大模型给出一些营销建议。那么按照 APE框架,可以创建以下提示词:
1.行动 (Action):计并发布一系列的社交媒体广告,宣传我们的最新产品。2.目的 (Purpose):通过吸引社交媒体用户的注意,提高产品的在线销售和品牌知名度。3.期望 (Expectation):在接下来的一个月中,通过社交媒体广告,在线销售增加30%,并且我们的品牌在社交媒体上的关注度提高20%。
大家也可以尝试用这个框架来询问大模型,看看是否相比第1级有明显提升。


第三级:给出示例

即通过一些示例对大模型进行提示,包括One shot(给出一个示例)和few shots(给出少量几个示例)。

提示:这太棒了!//Negative 这太糟糕了!//Positive哇,那部电影太棒了!//Positive多么可怕的节目!
输出:Negative

我们也可以结合第二级提出的框架,比如著名的CARE提示词框架,该框架强调四个关键要素,上下文指导(Context)、行动(Action)、结果(Result)和示例(Example)。

以下是一个例子:

上下文 (Context):我们的客户是一家大型零售商,他们想要一个能够提高在线销售和客户互动的移动应用程序。
行动 (Action):设计和开发一个用户友好的移动应用程序,集成社交媒体共享功能,推送通知和在线购物功能。
结果 (Result):应用程序的发布促使在线销售增加了25%,并且客户满意度评分提高到4.5/5。
示例 (Example): 【注:提供一种移动应用程序样例,例如竞品的首页设计】 

但是给出示例也存在结果不稳定的问题,尤其是对于数学推理类问题,如下所示:

提示:
这组数字中的奇数加起来是一个偶数:4、8、9、15、12、2、1。A:答案是False。
这组数字中的奇数加起来是一个偶数:17、10、19、4、8、12、24。A:答案是True。
这组数字中的奇数加起来是一个偶数:16、11、14、4、8、13、24。A:答案是True。
这组数字中的奇数加起来是一个偶数:17、9、10、12、13、4、2。A:答案是False。
这组数字中的奇数加起来是一个偶数:15、32、5、13、82、7、1。A:
最终输出:答案是true

很显然,大模型回答错误,似乎少样本提示不足以获得此类问题的可靠回答


第四级:使用思维链

思维链(COT)是一种向大语言模型LLM展示一些中间思考步骤的技术,这些步骤逐步引导得到最终答案,可以增强模型的推理能力。而且思维链的优势在于,不用对模型进行训练和微调。思维链适用的场景很多,包括各种推理任务,比如数学问题、尝试推理、符号操作等。

我们可以将COT与few shot相结合,向模型展示少数几个类似问题案例来提高模型的推理能力。我们再来看一下在第三级给出的例子,如下所示,可以看到在使用了COT的情况下,用one shot即得到了正确答案。

这组数中的奇数加起来是偶数:4、8、9、15、12、2、1。A:将所有奇数相加(9、15、1)得到25。答案为False。
这组数中的奇数加起来是偶数:15、32、5、13、82、7、1。A:
输出:将所有奇数相加(15、5、13、7、1)得到41。答案为False


第五级:使用角色

可以按照【Prompt = 角色 + 任务 + 要求 + 提示】的结构设计清晰明了的提示词。简单地说,这个结构就是要告诉大模型:你是谁?你要做什么?要做成什么样?要如何做?

以下是一个示例:

角色:假设你是一个有着丰富经验的Python程序员。
任务:请用Python代码绘制一个五角星。
要求:请使用matplotlib这个库,线条使用红色。
提示:五角星需要先计算五个顶点,然后在每间隔一个顶点的两个顶点之间两两进行连线。

下面是大模型给出的回答

import matplotlib.pyplot as pltimport numpy as np
# 计算五角星的五个顶点def calculate_star_points(center, outer_radius, inner_radius):angles = np.linspace(0, 2 * np.pi, 10)[:-1]# 生成0到2π之间的10个等间距角度,去掉最后一个重复的角度outer_points = center + outer_radius * np.array([np.cos(angles), np.sin(angles)]).Tinner_points = center + inner_radius * np.array([np.cos(angles + np.pi / 5), np.sin(angles + np.pi / 5)]).Tpoints = np.vstack((outer_points, inner_points))return points
# 绘制五角星def draw_star(ax, points, color):for i in range(5):ax.plot(points[i*2:i*2+2, 0], points[i*2:i*2+2, 1], color=color)
# 设置图形fig, ax = plt.subplots()ax.set_aspect('equal')# 设置纵横比相等,确保五角星不会被拉伸ax.axis('off')# 关闭坐标轴显示
# 定义五角星的参数center = np.array([0, 0])outer_radius = 1inner_radius = 0.5
# 计算顶点points = calculate_star_points(center, outer_radius, inner_radius)
# 绘制五角星draw_star(ax, points, 'red')
# 显示图形plt.show()



第六级:自洽性民主投票

所谓自洽性,是指为同一问题,生成多个不同的思维链,并对模型进行训练从中挑选出最合适的答案,可以提升语言模型的表现。

这种方法特别适用于需要连续推理的复杂任务,例如思维链提示法。它在多个评估标准上显著提升了CoT提示的效果,如在GSM8K上提升了17.9%,在SVAMP上提升了11.0%,在AQuA上提升了12.2%。

我们先来看一个简单的算数推理示例:

提示:当我6岁时,我妹妹是我的一半年龄。现在我70岁了,我的妹妹多大?
输出:35

很明显,上面的输出是错误的。接下来,我们看看如何通过自洽性来改进这个问题。同样的,我们先给出一些示例:

提示:
Q:林中有15棵树。林业工人今天将在林中种树。完成后,将有21棵树。林业工人今天种了多少棵树?A:我们从15棵树开始。后来我们有21棵树。差异必须是他们种树的数量。因此,他们必须种了21—15=6棵树。答案是6。
Q:停车场有3辆汽车,又来了2辆汽车,停车场有多少辆汽车?A:停车场已经有3辆汽车。又来了2辆。现在有3+2=5辆汽车。答案是5。
Q:Leah有32块巧克力,她的姐姐有42块。如果他们吃了35块,他们总共还剩多少块?A:Leah有32块巧克力,Leah的姐姐有42块。这意味着最初有32+42=74块巧克力。已经吃了35块。因此,他们总共还剩74—35=39块巧克力。答案是39。
Q:Jason有20个棒棒糖。他给Denny一些棒棒糖。现在Jason只有12个棒棒糖。Jason给Denny多少棒棒糖?A:Jason有20个棒棒糖。因为他现在只有12个,所以他必须把剩下的给Denny。他给Denny的棒棒糖数量必须是20—12=8个棒棒糖。答案是8。
Q:Shawn有五个玩具。圣诞节,他从他的父母那里得到了两个玩具。他现在有多少个玩具?A:他有5个玩具。他从妈妈那里得到了2个,所以在那之后他有5+2=7个玩具。然后他从爸爸那里得到了2个,所以总共他有7+2=9个玩具。答案是9。
Q:服务器房间里有9台计算机。从周一到周四,每天都会安装5台计算机。现在服务器房间里有多少台计算机?A:从周一到周四有4天。每天都添加了5台计算机。这意味着总共添加了4*5=20台计算机。一开始有9台计算机,所以现在有9+20=29台计算机。答案是29。
Q:Michael有58个高尔夫球。星期二,他丢失了23个高尔夫球。星期三,他又丢失了2个。星期三结束时他还剩多少个高尔夫球?A:Michael最初有58个球。星期二他丢失了23个,所以在那之后他有58—23=35个球。星期三他又丢失了2个,所以现在他有35—2=33个球。答案是33。
Q:Olivia有23美元。她用每个3美元的价格买了五个百吉饼。她还剩多少钱?A:她用每个3美元的价格买了5个百吉饼。这意味着她花了5
Q:当我6岁时,我的妹妹是我的一半年龄。现在我70岁了,我的妹妹多大?

我们再来看看大模型的输出,通过民主投票,答案是67。



第七级:ReAct

ReACT的全称是Reasoning-Action,这种模式是让大模型先进行思考,思考完再进行行动,然后根据行动的结果再进行观察,再进行思考,这样一步一步循环下去。风叔之前的这篇文章对ReAct也有详细的介绍,《AI大模型实战篇:AI Agent设计模式 - ReAct》。

ReAct模式的提示词如下所示:

Use the following format:
Question: the input question you must answerThought: you should always think about what to doAction: the action to take, should be one of [{tool_names}]Action Input: the input to the actionObservation: the result of the action... (this Thought/Action/Action Input/Observation can be repeated zero or more times)Thought: I now know the final answerFinal Answer: the final answer to the original input question
Begin!
Question: {query}"""


我们来看一个实际的例子,通过ReAct很好地一步步完成了最终答案的输出。

Question:一种减速机的价格是750元,一家企业需要购买12台。每台减速机运行一小时的电费是0.5元,企业每天运行这些减速机8小时。请计算企业购买及一周运行这些减速机的总花费Thought:I need to calculate the total cost of purchasing and operating the gearboxes for a week.Action: Multiplication ToolAction Input: [750, 12]Observation: 9000Thought: Now I need to calculate the cost of operating the gearboxes for a day.Action: Multiplication ToolAction Input: [0.5, 8, 12]Observation: 48Thought: Now I need to calculate the cost of operating the gearboxes for a week.Action: Multiplication ToolAction Input: [48, 7]Observation: 336Thought: Now I need to calculate the total cost of purchasing and operating the gearboxes for a week.Action: Addition ToolAction Input: [9000, 336]Observation: 9336


第八级:自我反思

反思是指通过语言反馈来增强语言模型的能力,这种反馈以自然语言的形式呈现,使得Agent能够对任务反馈信号进行反思,并将这些反思转化为文字记录,存储在情景记忆缓冲区中。Reflexion就是一种非常有效的反思框架,如下图所示。

下面是reflexion的提示词示例:

Revise your previous answer using the new information.- You should use the previous critique to add important information to your answer.- You MUST include numerical citations in your revised answer to ensure it can be verified.- Add a "References" section to the bottom of your answer (which does not count towards the word limit). In form of:    - [1] https://example.com    - [2] https://example.com- You should use the previous critique to remove superfluous information from your answer and make SURE it is not more than 250 words.


第九级:让大模型自己写提示词

在prompt范例中引导LLM将一个复杂的问题拆分为简单的子问题,逐个回答,然后汇总成为答案。

和COT思维链效果有些类似,但同时要求LLM提出子问题并给出答案,对生成内容的约束更大,有时候效果更好。



总结

本篇文章,风叔介绍了提示词工程的九级技巧,大家可以在和大模型对话过程中进行测试。

随着大模型自身能力的不断发展,提示词工程的重要性正在逐渐被削弱。比如对于GPT-4O模型,面对较为复杂的推理任务时,还需要使用COT或ReAct框架进行提示词引导。但是对于GPT-O1模型,由于本身该模型已经利用COT框架进行了强化,同样处理复杂推理任务时,可能只需要使用one shot或few shot prompt即可。

尽快模型能力越来越强,对最终使用者越来越友好,但是站在产品经理或LLM开发者的角度,还是需要掌握这些提示词技巧,毕竟国内大模型距离GPT-O1还是有很大的代差的。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询