Agent 进阶:用 ReAct 框架实现多步推理 + 工具链调用(LangChain)

张开发
2026/5/29 2:03:43 15 分钟阅读
Agent 进阶:用 ReAct 框架实现多步推理 + 工具链调用(LangChain)
Agent 进阶用 ReAct 框架实现多步推理 工具链调用LangChain前言在前两篇中我分别实现了单工具调用天气查询多工具调用商品价格 商品介绍但这些都属于“简单任务 → 一步完成”这次我尝试一个更真实的场景需要多步推理 多次调用工具最后再计算结果比如根据多门成绩计算平均分一、完整代码ReAct Agentfrom langchain.agents import create_agent from langchain_community.chat_models import ChatTongyi from langchain_core.tools import tool tool(description获取C语言成绩) def get_score_c() - int: return 99 tool(description获取Java成绩) def get_score_java() - int: return 89 agent create_agent( modelChatTongyi(modelqwen3-max), tools[get_score_c, get_score_java], system_prompt你是一个严格遵循ReAct框架的智能助手按照[思考-观察-再思考]的流程回答问题 每轮仅思考并调用一个工具类同时告知我你的思考过程 ) for chunk in agent.stream( { messages: [ {role: user, content: 期末考试只有C和Java的成绩请给出平均成绩。}, ] }, stream_modevalues ): latest_message chunk[messages][-1] if latest_message.content: print(type(latest_message).__name__, latest_message.content) try: if latest_message.tool_calls: print(f工具调用: {[tool[name] for tool in latest_message.tool_calls] }) except AttributeError: pass二、什么是 ReActReAct 是一种 Agent 推理模式Reason推理 Act行动核心思想先思考Reason再调用工具Act根据结果继续思考执行流程思考 → 调用工具 → 得到结果 → 再思考 → 再调用工具 → 输出结果三、运行结果解析我的输出工具调用: [get_score_c] ToolMessage 99 工具调用: [get_score_java] ToolMessage 89 AIMessage 平均成绩为 94 分四、Agent 内部到底发生了什么我们把整个过程拆开Step 1第一次思考需要计算平均分 → 必须先拿到成绩Step 2调用第一个工具get_score_c()得到99Step 3第二次思考还缺 Java 成绩Step 4调用第二个工具get_score_java()得到89Step 5最终计算(99 89) / 2 94五、核心能力提升点重点对比前两篇能力第一篇第二篇本篇工具数量1多个多个调用方式单次并行多步顺序调用推理能力❌❌✅复杂任务❌一般✅本质升级 Agent 开始具备“分步骤解决问题”的能力六、关键代码解析1. ReAct 的核心system_promptsystem_prompt 你是一个严格遵循ReAct框架的智能助手 按照[思考-观察-再思考]的流程回答问题 这一步非常关键Agent 的“推理方式”是通过 Prompt 控制的2. 单步调用限制很重要每轮仅思考并调用一个工具好处控制推理过程更容易调试更符合 ReAct 思想3. stream 输出可观测性agent.stream(...)让我看到每一步调用了什么工具推理过程是什么

更多文章