上一篇我们拆解了ReAct论文的主要内容,了解了以Thought → Action → Observation为主要内容的框架。那么在实际场景中如何使用呢,主要原理是什么,让我们看看在LangChain中ReAct的实现,通过分析代码简单解读下。
上代码
参考Sam Witteveen 的分享,YT_Exploring_ReAct_on_Langchain,通过LangChain框架创建ReAct的Agent,导入OpenAI和Wiki模块,实现与Wikipedia文档库进行交互,并利用OpenAI的文本生成功能。
看一下执行的情况:
输入的问题是:美国总统多大年纪。
结合问题使用ReAct框架按照Thought、Action、Observation 进行分析处理。
-
Thought(对问题进行思考规划):搜索美国总统,查找他的年龄然后结束。
-
Action(执行):调用工具搜索美国总统。
-
Observation(获得执行结果):美国总统介绍的检索结果,内容太多不过多描述了。
-
Thought:针对执行结果思考当前内容和最初问题目标是否匹配,以便于下一步规划。可以看出当前内容已经可以得到答案,所以决定输出。
-
Action(执行):输出最终结果。
看看Prompt如何
从上图,我们可以看出按照Question→Thought→Action→Observation(T→A→O可能循环执行n次)→Thought→Action结构,制定了一些内容示例(共6个)作为prompt内容输入给了LLM,以便于LLM能够了解学习并按照此方式进行问题的分析处理。那么执行过程如何,我们接着往下拆解。
实现步骤解析
那么实际执行过程如何,继续上代码:
-----这段Observation太长,截断了(后续prompt场景也同样处理)-----
可以看出针对问题经历了三轮Thought→Action→Observation循环然后输出了问题的结果,那么基于langchain是如何实现的呢,我们继续往下看(代码太长我们分段解析):
首先根据输入的问题开启了chain,将预设的6个问题作为小样本提示与输入的问题一并喂给了LLM,LLM认真思考并制定了规划输出了Thought与Action,chain 得到了Thought与Action后结束。
chain结束后调用了tool工具针对关键内容信息进行了检索并获得结果后,开启了一个新的chain,将问题作为input,所有与这个问题相关的Thought、Action、Observation作为agent scrathpad进行输入;LLM依旧是将小样本提示内容+agent scrathpad 内容作为prompt作为输入,思考并输出。由于问题目前没有得到解决,需要再次执行Thought→Action→Observation的循环,chain收到LLM的输出后再次调用tool工具执行任务(信息检索)。
tool工具执行完成后,同样将结果通过chain传给了LLM,LLM判定可以获得符合条件的结果,chain关闭并输出了最终的问题结果。
看起来有点绕,我们简化并总结下流程:
读一次可能不太容易搞懂,可以尝试多读几次,你会发现整个流程并不繁琐。
关于我:AI产品经理(目前在寻找新机会),主要关注AI Agent 应用。公众号:AI奋进者。如有好的想法欢迎一起沟通交流。
Agent系列文章已经逐步更新:
Agent 系列之 ReWOO框架解析https://blog.csdn.net/letsgogo7/article/details/138259507
Agent系列之 Plan-and-Solve Prompting 论文解析https://blog.csdn.net/letsgogo7/article/details/138259154
Agent系列之LangChain中ReAct的实现原理浅析https://blog.csdn.net/letsgogo7/article/details/138197137
Agent系列之ReAct: Reasoning and Acting in LLM 论文解析https://blog.csdn.net/letsgogo7/article/details/138259590Agent 系列之 LLM Compiler框架解析
https://blog.csdn.net/letsgogo7/article/details/138284351