AI AgentLangChainLangGraphDeepAgents技术选型
大语言模型本质上是文本补全机器——给定输入,预测下一个token。但真正有用的AI助手需要的远不止"说话":它需要思考、记忆、调用工具、管理状态,在多轮交互中完成复杂任务。这就是Agent框架要解决的问题:在LLM之上构建一个完整的认知循环。
从2023到2026年,这一认知循环的实现方式经历了三次范式跃迁:
这不是"谁取代谁"的替代关系,而是层叠演进——DeepAgents构建在LangGraph之上,LangGraph构建在LangChain之上。理解这三层的设计哲学、能力边界和适用场景,是2026年做Agent技术选型的必修课。
LangChain的核心理念可以概括为四个字:万物皆链。它将LLM应用的构建流程抽象为一条标准化流水线:
PromptTemplate → LLM → OutputParser
↓ ↓ ↓
Chain[0] Chain[1] Chain[2]
核心抽象包括:Chain(多步串联执行)、AgentExecutor(循环调用LLM+工具直到完成)、Tool(外部能力接口)、Memory(多轮上下文)、Retriever(外部数据检索)。
from langchain.agents import create_agent
def get_weather(city: str) -> str:
"""查询指定城市的天气"""
weather_data = {"北京": "晴朗 25°C", "上海": "多云 28°C"}
return weather_data.get(city, f"{city} 晴")
agent = create_agent(
model="anthropic:claude-sonnet-4-6",
tools=[get_weather],
system_prompt="你是天气助手",
)
result = agent.invoke({"messages": [{"role": "user", "content": "北京天气?"}]})
底层执行流程:用户提问→模型推理(判断需调工具)→工具执行→生成回答。10行代码跑通一个Agent Demo——LangChain降低了Agent开发的门槛。
LangChain对Agent生态的最大贡献不是某个具体功能,而是三件事:标准化了LLM应用的构建模式(Prompt→LLM→Parse→Tool→Repeat);统一了工具接口(任意Python函数通过@tool装饰器变成Tool);普及了ReAct模式("思考-行动-观察"循环成为行业共识)。
| 局限 | 具体表现 | 实际影响 |
|---|---|---|
| 隐式状态 | AgentExecutor内部维护scratchpad,开发者看不到也控不了 | 调试困难,无法回溯 |
| 线性执行 | Chain只能顺序执行,不支持条件分支和循环 | 复杂工作流无法表达 |
| 无持久化 | 状态存在内存中,进程崩了就丢了 | 生产环境不可接受 |
| 无人介入 | 没有Human-in-the-Loop机制 | 敏感操作无法审批 |
这些局限决定了LangChain的范式天花板:它是原型验证阶段的利器,但当Agent进入生产环境时,需要新的架构。
LangGraph的诞生源于一个根本性的洞察:Agent的执行流程不是链,而是图。一个真正的生产级Agent在工作时,可能需要根据条件走不同路径(条件分支),工具调用失败时回退重试(循环),在关键节点等待人工审批(中断/恢复),崩溃后从上次断点继续(持久化)。这些问题用链式结构都无法优雅表达。
LangGraph将状态提升为一等公民。其核心组件包括:State(TypedDict)—显式类型安全的状态对象;Node(函数)—图中的处理节点;Edge(条件/无条件)—节点间连接;Checkpointer—状态持久化(Postgres/Redis/SQLite);Interrupt—人工介入断点。
| 维度 | LangChain | LangGraph |
|---|---|---|
| 状态 | 隐藏在AgentExecutor内部 | 显式TypedDict,每个节点都能读写 |
| 执行路径 | 固定线性链 | 条件分支、循环、并行 |
| 持久化 | 内存临时状态 | Checkpointer持久化到DB |
| 生命周期 | 跑完就跑完 | 中断、恢复、时间旅行 |
from langgraph.graph import StateGraph, MessagesState, START, END
def mock_llm(state: MessagesState):
return {"messages": [{"role": "ai", "content": "Hello from LangGraph!"}]}
graph = StateGraph(MessagesState)
graph.add_node("mock_llm", mock_llm)
graph.add_edge(START, "mock_llm")
graph.add_edge("mock_llm", END)
graph = graph.compile()
result = graph.invoke({"messages": [{"role": "user", "content": "hi!"}]})
这段代码看似比LangChain还长,但它的核心优势不在"写起来短",而在"执行起来可靠"。Checkpointer让状态持久化,Interrupt让人能在关键节点介入,Subgraph让复杂工作流可以模块化拆分。
截至2026年,LangGraph已被LinkedIn(人才推荐Agent)、Uber(客服自动化)、Klarna(合规审批流程)、J.P.Morgan(金融服务Agent)等多家大厂在生产环境验证。v1.0已于2025年10月发布LTS版本。
LangGraph解决了"如何精确控制Agent"的问题,但引入了新的挑战:开发者需要手动设计图的每个节点和边。DeepAgents的核心思路是:把图的构建也交给AI。
DeepAgents解决的核心问题是上下文膨胀。当一个Agent执行复杂任务时,上下文窗口会被工具调用结果、中间推理、历史消息逐渐填满。一旦接近模型上下文窗口限制(如200K tokens),LLM的推理质量急剧下降。
子Agent的解决方案:主Agent保持精简上下文,子任务分派给隔离的子Agent独立执行,完成后只返回摘要给主Agent。每个子Agent拥有独立的上下文窗口,这样主Agent的上下文始终保持精简。
from deepagents import create_deep_agent
def get_weather(city: str) -> str:
return f"{city} 今日晴朗,25°C"
def search_web(query: str) -> str:
return f"关于'{query}'的搜索结果..."
agent = create_deep_agent(
model="anthropic:claude-sonnet-4-6",
tools=[get_weather, search_web],
system_prompt="你能自主规划任务并使用工具。",
)
result = agent.invoke({
"messages": [{"role": "user",
"content": "查北京天气,然后搜周末户外活动"}]
})
与LangGraph的关系:create_deep_agent()返回的就是一个编译好的LangGraph图,因此可以无缝使用LangGraph的所有底层能力(流式输出、Checkpointer持久化、中断/恢复等)。
DeepAgents的自动规划、子Agent通信、上下文摘要都需要额外的LLM调用。有分析指出,相比手动编排,DeepAgents的token消耗可能高达20倍。这是"便利性vs成本"的经典trade-off。
| 维度 | LangGraph(手动) | DeepAgents(自动) |
|---|---|---|
| 开发成本 | 高(需手动设计图) | 低(定义目标即可) |
| Token成本 | 低(精确控制) | 高(约20x) |
| 控制粒度 | 极高 | 中等 |
| 适用场景 | 确定性工作流 | 探索性/自治任务 |
DeepAgents (Harness层) 预置工具、自动规划、子Agent、文件系统 ┌─────────────────────────────────────┐ │ LangGraph (Runtime层) │ │ 持久化、流式、人机协同、状态管理 │ │ ┌─────────────────────────────────┐ │ │ │ LangChain Core (Framework层) │ │ │ │ 模型集成、工具抽象、Prompt管理 │ │ │ └─────────────────────────────────┘ │ └─────────────────────────────────────┘
| 能力 | LangChain | LangGraph | DeepAgents |
|---|---|---|---|
| 定位 | 开发框架 | 运行时 | 驾驭框架 |
| 核心范式 | 链 | 有向图 | 自治编排 |
| 状态管理 | 隐式 | 显式TypedDict | 自动虚拟文件系统 |
| 持久化 | 无 | Checkpointer | 继承LangGraph |
| 人机协同 | 无 | interrupt | 继承+interrupt_on |
| 子Agent | 无 | 手动子图 | 自动委派 |
| 自动规划 | 无 | 无 | write_todos |
| Token效率 | 高 | 高 | 低(约20x) |
| 学习曲线 | 低 | 中 | 低 |
| 适合阶段 | 原型验证 | 生产部署 | 自治Agent |
是否需要Agent自主规划和分解任务?
├── 是 → DeepAgents
│ └── 对Token成本敏感?→ LangGraph手动编排
└── 否 → 需要人工审批/持久化/断点续传?
├── 是 → LangGraph
└── 否 → 只是"模型+工具"简单循环?
├── 是 → LangChain
└── 否 → LangGraph
实际项目中,三者不是非此即彼的选择。推荐的演化路径是:先用LangChain快速验证想法,理解Agent的基本工作模式;当Agent需要进入生产环境时,下沉到LangGraph获取可靠性和精细控制;当任务足够复杂时,升级到DeepAgents使用预置的自治能力。
最常见的是分层使用:应用层用DeepAgents(高层编排),编排层用LangGraph(关键工作流),基础层用LangChain Core(模型集成和工具抽象)。
本文讨论的是LangChain系的技术路线。在主流路线之外,还有另一条值得关注的Agent架构路线——以Hermes Agent(Nous Research)为代表的"指挥位"路线。Hermes Agent不依赖LangChain/LangGraph的技术栈,而是通过自进化技能、MoA混合模型、MCP双端协议和8+Profile的多Agent调度来实现类似DeepAgents的子Agent委派能力。
两条路线的核心差异在于:LangChain系追求"框架标准化"——用一套统一的抽象覆盖尽可能多的场景;Hermes系追求"架构轻量化"——用自进化机制让系统在使用中自己变强。前者适合需要标准化交付的工程团队,后者适合需要高度定制的独立开发者和小团队。
选哪条路,取决于你的场景是在"重复造轮子"还是"不需要那个轮子"。
Agent框架的演化路径折射出AI工程化从野蛮生长走向成熟的过程。三年三次范式跃迁,环环相扣:2023年LangChain解决了"人人都能造Agent"的入门问题;2024-25年LangGraph解决了"Agent可以可靠运行"的生产问题;2025-26年DeepAgents正在解决"Agent可以管理Agent"的规模化问题。
几个关键认知:三者不是竞争关系,是层叠协作关系;AgentExecutor已死,LangGraph当立;DeepAgents的20x Token代价真实存在;没有银弹,只有合适。
未来的趋势是:Agent基础设施的标准化(持久化、审批、可观测性成为标配),多Agent协作从手动编排走向自动编排,成本优化通过更智能的上下文管理和模型路由来改善。也许不久的将来,Agent会自己决定用什么工具、走什么流程、调用哪个子Agent——而框架本身,就像操作系统一样变得透明。