LangGraph、LangChain、DeepAgent思考循环解析
LangChain、LangGraph和DeepAgents的思考循环层数,需要从它们的技术架构和协作关系来理解。三者并非简单的并列关系,而是构成一个从底层运行时到高层应用框架的分层栈。下面通过技术对比和具体示例详细分析。
一、核心架构分层与循环层数定位
根据官方定义,这三个项目是智能体开发栈的三个不同层级,其依赖关系自下而上:
| 层级 | 项目 | 官方术语 | 核心价值 | 思考循环层数定位 |
|---|---|---|---|---|
| 底层 | LangGraph | Agent Runtime(智能体运行时) | 持久化执行、流式、人机协同、状态持久化 | 单层循环控制(提供最基础的节点-边执行引擎) |
| 中层 | LangChain | Agent Framework(智能体框架) | 抽象与集成(模型、工具、Agent循环、中间件) | 双层循环抽象(封装ReAct等模式,提供中间件扩展) |
| 上层 | Deep Agents | Agent Harness(智能体外壳/装备) | 预置工具、提示词、子智能体、上下文管理 | 多层嵌套循环(主智能体+子智能体+长期记忆+规划循环) |
二、LangGraph:底层单循环运行时
LangGraph作为编排框架与运行时,提供最基础的循环执行引擎。它采用**有状态图(StateGraph)**模型,将智能体逻辑建模为节点和边:
from langgraph.graph import StateGraph, MessagesState, START, END def mock_llm(state: MessagesState): return {"messages": [{"role": "ai", "content": "hello world"}]} # 构建工作流 graph = StateGraph(MessagesState) graph.add_node(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!"}]})循环层数分析:
- 单层循环控制:LangGraph本身不定义智能体的思考模式,只提供基础执行循环
- 显式控制流:开发者需要显式定义节点和边,控制流完全由开发者掌控
- 持久化执行:通过Checkpointer在每一步持久化状态,支持长时运行和中断恢复
典型的"模型+工具"循环在LangGraph中需要显式建模为:开始 → 模型节点 → 条件判断 → 工具节点 → 返回模型节点 → 结束
三、LangChain:中层双层循环框架
LangChain构建在LangGraph之上,通过create_agent工厂函数封装了智能体的核心循环。其1.0版本引入了中间件架构,形成了双层循环结构:
from langchain.agents import create_agent from langchain.chat_models import init_chat_model from langchain.agents.middleware import PIIMiddleware # 初始化模型 deepseek_llm = init_chat_model( model="deepseek-chat", model_provider="deepseek", api_key=DEEPSEEK_API_KEY, base_url=DEEPSEEK_BASE_URL, ) # 创建带中间件的Agent agent = create_agent( model=deepseek_llm, tools=[search_weather], middleware=[ PIIMiddleware("api_key", detector=r"sk-[a-zA-Z0-9]{32}", strategy="block"), ], system_prompt="你是一个AI智能助手,可以查询天气。", )循环层数分析:
- 核心ReAct循环:内部实现标准的"思考-行动-观察"循环(第一层)
- 中间件洋葱圈:中间件在关键阶段提供拦截钩子,形成外层包装循环(第二层)
- 可组合扩展:每个中间件专注单一功能,按任意顺序堆叠
中间件的拦截点包括:Agent执行前后、模型调用前后、工具调用前后等阶段,形成如下图所示的"洋葱圈"结构:
请求进入 → 中间件1前处理 → 中间件2前处理 → 核心ReAct循环 → 中间件2后处理 → 中间件1后处理 → 响应返回四、Deep Agents:上层多层嵌套循环
Deep Agents作为智能体Harness,构建在LangChain之上,引入了更复杂的循环结构:
4.1 主智能体循环 + 子智能体循环
Deep Agents通过task工具派生子智能体,形成主从循环结构:
from deepagents import create_deep_agent # 创建Deep Agent agent = create_deep_agent( model="anthropic:claude-sonnet-4-6", tools=[get_weather, task], # 包含子智能体工具 system_prompt="You are a helpful assistant", ) # 主智能体执行 result = agent.invoke({ "messages": [{"role": "user", "content": "分析多个城市的天气并生成报告"}] })循环嵌套关系:
- 主智能体循环:处理用户请求,决定是否派生子任务
- 子智能体循环:执行专门化任务,完成后返回结果
- 上下文压缩循环:当上下文过大时触发摘要或卸载机制
4.2 规划循环与执行循环
Deep Agents内置write_todos工具,智能体可以维护结构化任务清单,形成规划-执行循环:
| 阶段 | 工具/机制 | 循环作用 |
|---|---|---|
| 规划阶段 | write_todos | 创建带状态的任务清单(pending/in_progress/completed) |
| 执行阶段 | 各种工具调用 | 按清单顺序执行任务 |
| 监控阶段 | 状态持久化 | 跟踪任务进度,必要时调整计划 |
4.3 上下文管理循环
Deep Agents采用智能上下文管理机制,形成动态调整循环:
# 上下文管理决策流程(伪代码逻辑) def manage_context(current_context, model_max_tokens): if tool_input_output > 20000: # 大工具结果 offload_to_filesystem() # 卸载到文件系统 elif context_usage > 0.85 * model_max_tokens: # 上下文接近上限 if can_offload_more(): offload_old_tools() # 卸载旧工具调用 else: summarize_conversation() # 触发摘要 return optimized_context上下文循环流程:
- 监控循环:持续跟踪上下文token使用量
- 卸载循环:大工具结果→文件系统,历史中保留指针
- 摘要循环:上下文超限→生成结构化摘要替换历史
五、技术选型与循环复杂度对比
| 框架 | 循环层数 | 循环类型 | 适用场景 | 开发复杂度 |
|---|---|---|---|---|
| LangGraph | 单层 | 基础执行循环 | 需要细粒度控制、持久化执行的生产级工作流 | 高(需显式定义所有节点和边) |
| LangChain | 双层 | 核心ReAct循环 + 中间件包装循环 | 快速构建标准智能体,需要灵活扩展中间件 | 中(提供抽象但保留控制) |
| Deep Agents | 多层 | 主从循环 + 规划循环 + 上下文管理循环 | 复杂长时运行任务,需要开箱即用的高级功能 | 低(预置复杂循环逻辑) |
六、实际应用场景示例
场景1:简单问答机器人(适合LangChain)
# LangChain双层循环足够 agent = create_agent( model=llm, tools=[search, calculator], middleware=[logging_middleware], # 添加日志中间件 ) # 循环:用户输入 → 中间件处理 → ReAct循环 → 中间件后处理 → 响应场景2:复杂数据分析流水线(适合LangGraph)
# LangGraph显式控制多阶段循环 graph = StateGraph(WorkflowState) graph.add_node("data_extraction", extract_data) graph.add_node("data_cleaning", clean_data) graph.add_node("analysis", analyze_data) graph.add_node("reporting", generate_report) # 定义条件边实现复杂循环逻辑 graph.add_conditional_edges( "analysis", lambda state: "reporting" if state["quality"] > 0.8 else "data_cleaning" )场景3:自动化代码开发助手(适合Deep Agents)
# Deep Agents多层循环处理复杂任务 agent = create_deep_agent( model="claude-3-opus", tools=[write_todos, edit_file, execute, task], # 包含规划、执行、子智能体 system_prompt="你是一个全栈开发助手", interrupt_on={"edit_file": True}, # 人机协同循环 ) # 执行过程涉及: # 1. 规划循环:分析需求 → 创建任务清单 # 2. 执行循环:按清单执行编码、测试 # 3. 子智能体循环:派生子任务(如代码审查) # 4. 上下文循环:管理不断增长的代码上下文 # 5. 人机协同循环:关键编辑前等待确认七、总结:循环层数的演进路径
从技术演进角度看,这三个框架代表了智能体思考循环的不同抽象层级:
- LangGraph提供基础:单层显式循环控制,适合需要完全掌控执行流程的复杂工作流
- LangChain封装标准模式:双层循环(ReAct核心+中间件包装),平衡易用性与灵活性
- Deep Agents预置复杂逻辑:多层嵌套循环(主从、规划、上下文管理),开箱即用但定制性相对较低
选择时需要考虑:任务复杂度决定需要的循环层数,控制需求决定选择哪一层的抽象。简单任务用LangChain即可,需要完全控制用LangGraph,复杂长时任务用Deep Agents。
在实际开发中,可以从LangChain开始快速原型,复杂部分用LangGraph定制,生产级复杂应用考虑Deep Agents。这种分层架构让开发者可以根据具体需求选择合适的循环抽象层级,既避免过度工程,也确保系统可扩展性。
参考来源
- LangChain vs LangGraph vs Deep Agents技术对比详解
- [DeepAgents:LangChain平台的Harness-01]LangChain、LangGraph和DeepAgents三者之间的关系
- 【必学收藏】小白也能懂:LangChain、LangGraph、DeepAgents三层架构解析
- DeepAgents vs LangChain, LangGraph 如何技术选型?
- DeepAgents vs LangChain, LangGraph 如何技术选型?
- 【建议收藏】LangChain、LangGraph、DeepAgents三大框架区别解析,大模型开发入门必看
