当前位置: 首页 > news >正文

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

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

前言

在前两篇中,我分别实现了:

  • 单工具调用(天气查询)
  • 多工具调用(商品价格 + 商品介绍)

但这些都属于:“简单任务 → 一步完成”

这次我尝试一个更真实的场景:需要多步推理 + 多次调用工具,最后再计算结果

比如:

根据多门成绩,计算平均分

一、完整代码(ReAct Agent)

from 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( model=ChatTongyi(model="qwen3-max"), tools=[get_score_c, get_score_java], system_prompt="""你是一个严格遵循ReAct框架的智能助手,按照[思考->观察->再思考]的流程回答问题, 每轮仅思考并调用一个工具类,同时告知我你的思考过程""" ) for chunk in agent.stream( { "messages": [ {"role": "user", "content": "期末考试只有C和Java的成绩,请给出平均成绩。"}, ] }, stream_mode="values" ): 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

二、什么是 ReAct?

ReAct 是一种 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()

得到:

99

Step 3:第二次思考

还缺 Java 成绩

Step 4:调用第二个工具

get_score_java()

得到:

89

Step 5:最终计算

(99 + 89) / 2 = 94

五、核心能力提升点(重点)

对比前两篇:

能力第一篇第二篇本篇
工具数量1多个多个
调用方式单次并行多步顺序调用
推理能力
复杂任务一般

本质升级: Agent 开始具备“分步骤解决问题”的能力

六、关键代码解析

1. ReAct 的核心:system_prompt

system_prompt = """ 你是一个严格遵循ReAct框架的智能助手, 按照[思考->观察->再思考]的流程回答问题 """

这一步非常关键:Agent 的“推理方式”是通过 Prompt 控制的

2. 单步调用限制(很重要)

每轮仅思考并调用一个工具

好处:

  • 控制推理过程
  • 更容易调试
  • 更符合 ReAct 思想

3. stream 输出(可观测性)

agent.stream(...)

让我看到:

  • 每一步调用了什么工具
  • 推理过程是什么
http://www.jsqmd.com/news/637869/

相关文章:

  • VibeVoice-TTS商业应用:有声读物自动化生产解决方案
  • 自动化测试步骤
  • fft npainting lama快速体验:智能修复图片,让照片更干净
  • Windows Server 配置与管理——第9章:配置DHCP服务器
  • 运维中台分析
  • SDMatte赋能在线教育:开发互动课件中的动态元素提取工具
  • 大模型上线失败率高达68%?SITS2026实证揭示:4个被90%团队忽略的工程化成败临界点
  • Z-Image-ComfyUI入门指南:Jupyter里点一下,网页端出图
  • 代码随想录算法训练营 Day32 | 动态规划 part05
  • Qwen3-0.6B-FP8代码实例:自定义Chainlit前端样式、添加历史会话与流式响应支持
  • AutoGen Studio入门指南:10分钟部署Linux环境下的智能体开发平台
  • 【多所高校联合主办】第七届机械工程、智能制造与机电一体化学术会议(MEIMM2026)
  • PyTorch 2.8多场景落地:支持LoRA/P-Tuning/QLoRA多种微调范式统一环境
  • 你为什么总是“不会拒绝“?免费个人边界感测试,建立健康边界
  • Kandinsky-5.0-I2V-Lite-5s图生视频入门必看:首帧选择+运动提示词写作黄金法则
  • 2026年热门的东莞耐磨DLC涂层/自润滑DLC涂层长期合作厂家推荐 - 品牌宣传支持者
  • 2026年比较好的预制菜包装盒/高阻隔包装盒/净菜包装盒厂家选择推荐 - 品牌宣传支持者
  • 大模型“记忆”真相:它真的会记住你吗?背后机制全解析!
  • Claude API流式输出实现教程(附完整代码)
  • KEIL调试中Access violation错误的权限配置与内存映射优化方案
  • RVC模型在YOLOv11视觉项目中的音效增强应用
  • 2026年知名的东莞耐磨DLC涂层/绝缘DLC涂层/DLC涂层/防静电DLC涂层生产厂家推荐 - 行业平台推荐
  • 003、为什么前端开发者,是最适合转 AI 应用工程师的一批人?
  • 2026年精品余姚头采嫩芽茶叶/余姚高山绿茶叶/余姚红茶茶叶厂家综合对比分析 - 行业平台推荐
  • linux内存管理-页面回收之内核线程 kswapd (四)
  • 一键体验Phi-4-mini-reasoning:快速解决数学、逻辑与分析问题
  • 机器学习工程师的日常:挑战与解决
  • vLLM-v0.17.1一文详解:前缀缓存+推测性解码降低首token延迟
  • 2026年好上锡的实芯焊锡丝/助焊接焊锡丝/免清洗焊锡丝多家厂家对比分析 - 品牌宣传支持者
  • Qwen3.5-2B部署教程:阿里云ACK集群中Qwen3.5-2B服务化封装与API网关对接