LangChain/LangGraph ReAct 差异与 LangSmith 监控
| 字段 | 内容 |
|---|---|
| 作者/整理 | 基于公开课程资料整理 |
| 来源 | 五道口纳什 |
| 日期 | 2025 |

ReAct 范式回顾
从 CoT 到 ReAct
ReAct 是 Agent 领域最经典的工作之一(姚顺雨团队,2022 年底 / 2023 年初发表于 NeurIPS,引用量已超 4000)。它的演进脉络如下:
- CoT(Chain of Thought):面向回答问题——“Let's think step by step”,启发了后续的 Prompt Engineering。
- Act Only:语言模型可以和环境交互,产生动作(Action),环境返回观察(Observation),但没有显式思考过程。
- ReAct = Reasoning + Acting:在产生动作之前先进行 Reasoning(Thought),降低模型幻觉,更好地 grounding 到合理的动作。
ReAct 的核心循环
Thought \(\rightarrow\) Action \(\rightarrow\) Observation \(\rightarrow\) Thought \(\rightarrow\) ... \(\rightarrow\) Final Answer
ReAct 启发了后续 Agent 的设计和开发,也可能启发了 GPT API 中 Function Calling 特性的诞生(2023年6月)。
关于 Reasoning Model
现代的 Reasoning Model 在回答问题之前已经学会了思考,不需要再显式地通过 Prompt 告诉它"你要先思考"。后续介绍 Reasoning Model 时会展开讨论其使用规范和标准。
本章小结
ReAct 将推理(Reasoning)与行动(Acting)结合,是 Agent 设计的基石。理解其 Thought-Action-Observation 三部曲是理解后续所有 Agent 框架的前提。
LangChain 实现 ReAct Agent
Prompt 模板设计
LangChain 中 create_react_agent 使用了一个标准化的 Prompt 模板,其设计强调泛化性和通用性:
Answer the following questions as best you can. You have access to the following tools: {tools}. Use the following format: Question / Thought / Action / Action Input / Observation / ... / Final Answer. Begin! Question: {input} {agent_scratchpad}
模板包含两个动态占位符:
tools:可用的工具列表agent_scratchpad:交互过程中动态维护的历史记录
三步骤构建流程
- 声明语言模型(如 GPT-4.1 Nano)
- 调用
create_react_agent创建 Agent - 将 Agent 放入
AgentExecutor中执行
工作机制:基于文本模板的迭代
LangChain 的 ReAct 实现有一个重要特征——它不使用多轮消息(message list),而是将所有历史信息不断追加到同一个 human 消息中:
LangChain ReAct 的历史管理方式
每一轮新的交互都是一次新的 LLM 调用。历史信息(Thought、Action、Observation)被追加到 agent_scratchpad 中,作为单条 human 消息的一部分发送给模型。这意味着没有多轮对话的 message 结构,所有上下文都挤在一个消息里。
本章小结
LangChain 的 ReAct 实现基于 Prompt 模板 + 文本追加的方式管理交互历史,结构简单但缺乏多轮消息的清晰组织。
LangGraph 实现 ReAct Agent
基于图的架构
LangGraph 的 create_react_agent 实现更为现代化。只需定义模型和工具即可:
理解 LangGraph 的关键:虚边(条件边)
LangGraph 的 ReAct Agent 包含两个核心节点:
- Agent 节点:负责产生工具调用请求
- Tools 节点:负责执行工具并返回结果
Agent 节点上有一条条件边,决策是否要停止调用工具直接输出答案,还是继续调工具。
基于消息列表的管理
与 LangChain 不同,LangGraph 完全基于多轮对话消息的方式管理交互:
消息流:Human Message \(\rightarrow\) AI Message(含 tool_calls) \(\rightarrow\) Tool Message(s) \(\rightarrow\) AI Message(最终回答)
并行工具调用
LangGraph 支持并行工具调用——AI Message 中的 tool_calls 是一个列表,可以同时调用多个工具。例如查询"澳网冠军的家乡"时,模型可能并行调用两次搜索工具。
本章小结
LangGraph 的 ReAct 实现基于图结构和多轮消息列表,架构更清晰,支持并行工具调用。
LangSmith 监控平台
配置与使用
LangSmith 是一个在线监控平台,用于追踪和调试 Agent 的工作流程。配置方式:
- 在
.env中配置 LangSmith API Key - 开启 tracing 功能(设置为 true)
- 设置 project 名称
核心调试方法
Debug 的核心 Tips
通过检查模型的输入输出来理解其工作流程。重点关注每一次语言模型调用(橙色部分)的输入和输出——搞清楚输入输出,就搞清楚了整个工作流程。所有前续步骤都是为了构建这样一个消息列表。
本章小结
LangSmith 提供了可视化的 Agent 调试能力,核心方法是通过监控 LLM 调用的输入输出来理解整个工作流程。
LangChain vs LangGraph 对比分析
| 维度 | LangChain | LangGraph |
|---|---|---|
| 历史管理 | 文本追加到单条消息 | 多轮消息列表 |
| 消息结构 | 单条 human 消息(含 scratchpad) | Human / AI / Tool 消息序列 |
| 工具调用 | 串行(一次一个) | 支持并行(tool_calls 列表) |
| 架构 | Prompt 模板 + Executor | Graph(节点 + 条件边) |
| 可视化 | 需手动追踪 | 可直接导出 Graph 图 |
本章小结
LangGraph 在架构清晰度、消息管理和并行能力上全面优于 LangChain 的旧版实现。LangChain 的方式更适合理解 ReAct 的原始概念,而 LangGraph 更适合生产环境。
总结与延伸
- 重视基础概念:越基础的东西越本质,后续所有现代的、强大的 Agent 开发理念都脱胎于经典工作。
- 理解实现差异:LangChain 通过模板管理和文本追加,LangGraph 通过多轮消息和图结构——底层机制不同,理解差异有助于选择合适的工具。
- 善用监控工具:LangSmith 等平台是理解 Agent 内部工作流程的利器,核心是检查每次 LLM 调用的输入输出。