My Github

大模型应用开发基础 : 再探提示词工程

大家好,我是Edison。

所谓提示词工程,就是研究怎么写AI易懂的提示词。为了引导大模型给出更好的答案,提示词工程必不可少,本篇我们再探提示词,看看几个必须知道的技巧。

(少)样本提示

对于一些较为通用的任务,我们不需要给大模型过多的提示信息,就可以完成一个任务。这种提示词通常也叫作“零样本提示”,如下图所示:

 假设你想让大模型处理一个文本分类的任务,来帮助判断文本内容是属于哪个类别。针对这类任务,大模型通常知道分类是什么意思,无需给出更多提示就可以完成任务。因此,针对这类简单的任务,使用零样本提示就可以完成。不过,虽然大模型知识渊博,但也不是无所不知,这时候就需要给它一些示例,让它能够理解我们的工作任务,以便能协助我们完成任务。这种提示词也被称为“少样本提示”,如下图所示:

假设你想让大模型完成这样一个判断假期活动的任务,由于活动的内容大模型其实是不可能知道的,所以需要给它喂一些样本,也就是上图中的一些例子。有了这些例子,当你再问大模型的时候,它就会进行推理并得出正确的结论。

事实上,这个例子中的内容更像是我们在应用开发中的编写方式,即一堆if-else的规则集。我们也可以看到,只要我们能编写好的样本提示,就可以实现应用开发中的规则效果。

有时候,即使我们给出了少量的样本提示,也会在一些场景中力不从心,这就需要更强一点的提示工程技巧了,比如下面的思维链技术。

思维链提示

大模型属于典型的嘴比脑子快,很多答案都是未经思考就会蹦出来。而为了让大模型能够更准确的回答我们的问题,我们需要让它慢一点,思维链就是这样的一种提示技术。

例如下面这张图,来自Google研究院的思维链论文:

上面的例子中,左右两边都在解决同一个数学题,还给出了一样的样本示例,但却得到了不同的答案。我们可以看到,左边的答案属于“嘴比脑子快”的案例,得到了一个错误的答案。而右边的答案则显然经过了一个思考的过程,得到了一个正确的答案。相信你可以看出,所谓的思维链,就是这个慢下来思考的过程。

很多时候,即使提示词中不给出样本示例,但只要在提示词最后加上一句“请一步一步思考” 或 "Let's think step by step",就可以告诉大模型慢下来一步一步想答案。

在OpenAI今年发布的o1模型中,就引入了思维链到大模型中,虽然回复答案的时间可能长了一点点,但是大幅度提升了模型的推理能力。

ReAct框架

如果大模型不仅能够动口,还能够动“手”帮我们完成一些事儿那就更好了,而这就是目前Agent的使用场景。在Agent中,一个关键的核心框架就是ReAct,ReAct是 Reasoning + Acting 的缩写,翻译过来就是 推理 + 行动

例如下面这个例子,来自一篇提出ReAct的论文。

它提出的问题是:

Aside from the Apple Remote, what other devices can control the program Apple Remote was originally designed to interact with?

(翻译:除了苹果遥控器,还有哪些设备可以控制苹果遥控器最初设计用来交互的程序?)

使用ReAct框架的提示案例是:

在此案例中,大模型经历了多个循环,每个循环都由思考(Thought)、行动(Action)和 观察(Observation)三个阶段组成。思考,决定下一步做什么行动。行动,则是具体做某个事儿。观察,则是评估行动的结果如何,决定是否要结束这个过程。

目前,大模型主要擅长的实完成推理的部分,也就是思考这个步骤。但要完成行动,比如完成某个搜索动作,那就需要一些辅助的操作,比如调用某个搜索引擎的API完成搜索等等。

下面是来自LangChain社区的一个基于ReAct框架的提示词模板,我们可以直接套用:

Answer the following questions as best you can. You have access to the following tools: 
{tools} 
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
… (this Thought/Action/Action Input/Observation can repeat N times) 
Thought: I now know the final answer
Final Answer: the final answer to the original input question 

Begin! 

Question: {input}
Thought:{agent_scratchpad}

如果我们能理解好这个模板,就可以快速理解Agent的开发基础。

小结

本文快速温习了提示词工程的几个常见技巧,样本提示、思维链提示 与 ReAct框架,它们可以应用在不同的任务场景中。应用提示词工程,可以帮助引导大模型给出更准确的答案。最后,更多地提示词工程,可以阅读《提示词工程指南》。

推荐学习

郑晔,《程序员的AI开发第一课》(课程)

黄佳,《ChatGPT和预训练模型实战课》(公开课,免费)

黄佳,《动手做AI Agent》(图书)

产品二姐,《成为AGI产品经理》(课程)

 

posted @ 2024-11-30 09:20  EdisonZhou  阅读(25)  评论(0编辑  收藏  举报