Agent系列之LangChain中ReAct的实现原理浅析

本文讲解了ReAct框架在LangChain中的运用,涉及问题分析、信息检索和LLM协作,展示了完整的问题解决流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇我们拆解了ReAct论文的主要内容,了解了以Thought → Action → Observation为主要内容的框架。那么在实际场景中如何使用呢,主要原理是什么,让我们看看在LangChain中ReAct的实现,通过分析代码简单解读下。 

上代码

参考Sam Witteveen 的分享,YT_Exploring_ReAct_on_Langchain,通过LangChain框架创建ReAct的Agent,导入OpenAI和Wiki模块,实现与Wikipedia文档库进行交互,并利用OpenAI的文本生成功能。

图片

看一下执行的情况:

图片

输入的问题是:美国总统多大年纪。

结合问题使用ReAct框架按照Thought、Action、Observation 进行分析处理。

  1. Thought(对问题进行思考规划):搜索美国总统,查找他的年龄然后结束。

  2. Action(执行):调用工具搜索美国总统。

  3. Observation(获得执行结果):美国总统介绍的检索结果,内容太多不过多描述了。

  4. Thought:针对执行结果思考当前内容和最初问题目标是否匹配,以便于下一步规划。可以看出当前内容已经可以得到答案,所以决定输出。

  5. 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框架解析icon-default.png?t=N7T8https://blog.csdn.net/letsgogo7/article/details/138259507

Agent系列之 Plan-and-Solve Prompting 论文解析icon-default.png?t=N7T8https://blog.csdn.net/letsgogo7/article/details/138259154

Agent系列之LangChain中ReAct的实现原理浅析icon-default.png?t=N7T8https://blog.csdn.net/letsgogo7/article/details/138197137

Agent系列之ReAct: Reasoning and Acting in LLM 论文解析icon-default.png?t=N7T8https://blog.csdn.net/letsgogo7/article/details/138259590Agent 系列之 LLM Compiler框架解析icon-default.png?t=N7T8https://blog.csdn.net/letsgogo7/article/details/138284351

### 如何在 LangChain 中使用 Agent DeepSeek #### 配置环境 为了能够在 LangChain 中集成并使用 Agent DeepSeek,需先安装必要的依赖库。这通常涉及 Python 的虚拟环境设置以及特定包的安装。 ```bash pip install langchain deepseek-oaspy ``` 确保已正确设置了 PostgreSQL 或者 pgvector 向量数据库来支持 LangChain 所需的数据存储需求[^3]。 #### 初始化 Agent 初始化一个基于 DeepSeek 大模型的 Agent 可以通过 LangChain 提供的功能实现: ```python from langchain.agents import initialize_agent, Tool from langchain.llms import DeepSeek deepseek_llm = DeepSeek() # 创建 DeepSeek 实例 tools = [ Tool( name="DeepSeek Search", func=deepseek_llm.run, description="Useful for when you need to answer questions using knowledge from the web." ) ] agent = initialize_agent(tools, llm=deepseek_llm, agent_type='react-description') ``` 这段代码创建了一个名为 `DeepSeek Search` 的工具,并将其与 DeepSeek LLM 结合起来形成一个新的 Agent[^1]。 #### 运行查询 有了上述配置之后,可以通过简单的函数调用来执行具体的任务或提问解答操作: ```python response = agent.run("What is the capital of France?") print(response) ``` 此命令会触发 Agent 使用 DeepSeek 模型去寻找关于法国首都的信息并返回结果。 #### 解决常见问题 当遇到无法获取预期响应或其他异常情况时,考虑以下几个方面来进行排查: - **网络连接状态**:确认是否有稳定的互联网访问权限以便于在线资源检索。 - **API 密钥验证**:如果 DeepSeek API 要求身份认证,则应检查所提供的密钥是否有效。 - **版本兼容性**:确保所使用的各个组件之间的版本相互匹配,避免因不兼容而导致错误发生。 - **日志记录分析**:启用详细的日志输出可以帮助定位具体的问题所在位置。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值