“ 大模型的一切应用都是基于一个核心——提示词,ReAct智能体也不例外,智能体是通过提示词告诉模型对问题进行分析,执行,并要对结果进行负责。”
在学习和使用Agent智能体的过程中,ReAct(reasoning and action)思考行动模式是智能体实现中的一个非常经典的范式;虽然说ReAct的理论看起来很简单,但同时也很抽象,刚开始一直没搞明白其到底是怎么实现的。
虽然网络的很多资料都在说使用 thought-action-observation的形式,然后可以通过多次循环执行的方式来获取结果;但在实际操作中总觉得get不到重点。
而今天还是公司的实习生遇到了类似的问题,即调用工具之后,大模型返回的结果与用户的问题完全不搭嘎;而他使用的是Langgraph的ReAct模式,所以这里就有一个很明显的问题,既然使用了ReAct模式,为什么还会出现这样的情况。
在刚开始对大模型使用不甚了解的情况下,觉得这些问题很奇怪,但等到深入大模型的应用之后才发现,事情好像没那么简单,也好像有迹可循了。
ReAct Agent的深入理解
抛开理论,我们从大模型的执行过程来分析ReAct范式;既然ReAct范式是基于人类的思维方式来使用大模型,那么我们就从人的角度来思考这个问题。
首先,用户提出问题并输入给大模型;然后大模型理解用户问题,并对问题进行分析,判断是否需要使用外部工具,以及是否有工具可以使用;这时,如果有工具可以使用,那么就可以调用外部工具来解决用户问题,或者依靠模型自身的能力来解决用户问题。
所以,从实际操作上来看,大模型也并没有超能力,我们需要告诉模型第一步应该怎么做,第二步应该怎么做等等。
所以,ReAct的核心点在于,我们需要告诉模型你不但要分析问题,处理问题,同时还要对问题处理的结果负责,不能把一个错误的结果返回给用户。
但说是这么说,那到底应该怎么做呢?
其实核心点还是那句话,大模型应用的核心是提示词工程,我们需要通过提示词来告诉大模型按照人类处理问题的方式来解决用户问题;简单来说就是,在提示词中告诉大模型,你分析用户问题之后可以通过自身能力或者调用工具的方式来获取结果;但你需要在拿到结果之后,对结果进行分析,判断其与用户问题是否相关,如果不相关或解决不了用户问题,那么你需要再次使用分析问题,调用工具。
而这也就是我们常说的ReAct模式中的 thought->action->observation模式。让模型按照这种步骤,就可以相对提高模型解决问题的能力。
原因在于,大模型调用工具或使用自身能力时会存在两个问题点,一个是显性问题,一个是隐性问题;显性问题如调用工具时出现网络异常或响应错误等情况;而隐性问题是——大模型调用工具响应正常,但可能存在调错工具或工具响应与问题无关;如你问今天的天气怎么样,然后工具响应今天常州进球了;这种问题工具没报错,但结果也与问题无关,所以这种问题更难发现,需要模型自主判断。
但我们也知道,模型偶尔可能会抽风或者工具也可能会有问题;因此,智能体可能在多次调用工具获取不到结果的时候,进入死循环状态;因此,我们需要给智能体设置一个最大循环次数,如果达到最大循环次数依然没解决问题,那么就直接报错即可。
最后,只要是大模型应用,不管什么模式或范式,最终的落地方式基本上都是靠提示词来约束模型的行为,也就是说智能体的应用范式都是靠提示词来实现的。
反思才是智能体的核心能力,也是做好智能体的关键所在。

