外观
LangGraph 与 LangChain:编排与组件
核心答案:两者不是同层替代品。 LangGraph 让程序显式管理状态和控制流;LangChain 提供模型、工具等抽象与 Agent 组合接口。可以组合使用,也可以在 LangGraph 节点内直接调用供应商 API。官方概览明确说明 LangGraph 不要求使用 LangChain。
放在什么位置
| 关注点 | LangGraph | LangChain |
|---|---|---|
| 基本单位 | 状态、节点、边、分支 | 模型、消息、工具、Agent 与中间件 |
| 输入输出 | 节点读取状态,返回状态更新 | 模型输入消息,输出消息或工具请求 |
| 本项目需求 | 评审循环、人工暂停、恢复 | 可选的模型与工具适配抽象 |
| 不自动解决 | 业务幂等、外部服务回滚 | 资料正确性、工具权限、模型效果 |
LangChain 当前的 create_agent 提供可配置的 Agent 执行循环,底层使用 LangGraph。这个依赖方向不表示所有 LangGraph 应用都应调用 create_agent。LangChain 官方概览适合了解其职责,而非照搬所有组件。
最小例子:状态更新不是聊天记录
下面的独立 Python 例子只展示节点契约,可直接运行:
python
state = {"revision": 0, "issues": ["词汇缺少解释"]}
def route(s):
return "revise" if s["issues"] and s["revision"] < 2 else "human"
assert route(state) == "revise"
state.update({"revision": 2})
assert route(state) == "human"把 route 注册为条件边才是图编排;调用模型生成解释是另一个节点的工作。框架不会凭空知道“最多修订两次”这个业务约束。
教材系统中的选择
本项目选择 LangGraph 编排,使用独立服务适配层调用模型,不为了出现技术名词再引入完整 LangChain 组件集。LangGraph 安装时可能带入 langchain-core 等依赖;安装了基础包不等于应用使用了 LangChain 的 Agent 接口。 实际依赖以锁文件为准。
若后续需要统一多家模型的消息格式、工具绑定与中间件,可评估 LangChain;若只有两三个稳定接口,显式适配器更容易理解原始请求、超时和返回值。这个选择是本次复现的工程判断,不是历史项目事实。完整职责见系统架构,原理主线见核心章节。
自测与误区
修改例子的修订上限,解释条件边如何变化。再画出“评审无问题直接转人工、有问题进入修订”的分支。验收标准是能指出路由由程序决定,模型只提交评审数据。
常见误区是把 LangGraph 当成“高级版 LangChain”,或认为用了图就具有自主规划能力。还要避免在节点中随意把整份图状态传给模型:可见上下文必须按角色重新构造。
官方资料与版本边界
- LangGraph overview:编排职责与独立使用。
- LangChain overview:高层 Agent 接口。
- Workflows and agents:确定流程与动态工具循环。
核验日期:2026-11-03。这里讨论 Python API 的概念边界;安装命令与可执行接口以本项目锁定版本为准,不将官方滚动文档视为该版本的逐字说明。