DeepAgents 主-子 Agent 的底层实现逻辑完全基于 LangGraph 的图机制。 它本质上是 LangGraph 的高层封装,主子 Agent 的协作完全建立在 LangGraph 的 StateGraph、CompiledGraph 和工具路由之上。
三层架构关系
DeepAgents、LangGraph、LangChain 三者的关系是逐层构建的:
DeepAgents(Agent Harness / 加速器)
└── LangGraph(Agent Runtime / 执行引擎)
└── LangChain Core(基础抽象)
DeepAgents 的 create_agent() 返回的就是一个编译好的 LangGraph CompiledGraph,可以直接使用 LangGraph 的 stream、invoke 等 API。
主子 Agent 的图实现细节
实际工程中,主子 Agent 的协作通常呈现为三层 LangGraph 嵌套结构:
- 外层 StateGraph(硬拓扑) :用
langgraph.graph.StateGraph构建,边是硬编码的,拓扑不依赖 LLM 决策,保证关键节点(如回调)一定触发。 - 中层 DeepAgent(主 Agent) :底层基于 LangGraph 的
create_react_agent构建,本身就是一个 ReAct 循环------LLM 决策是否调工具、调哪个,直到模型主动停止。 - 内层 CompiledSubAgent(子 Agent) :每个子 Agent 都是独立编译好的 LangGraph 图,拥有自己的 ReAct 循环 + 工具链 + 中间件栈。
task 工具的图机制本质
主 Agent 调用子 Agent 的 task 工具,本质上就是 LangGraph 的工具路由机制:
create_task_tool把各子 Agent 按 name 注册到字典,创建一个task(description, subagent_type)工具,并加入主 Agent 的工具列表。- 主 Agent 的 LLM 看到的是多态工具,天然用"调工具"的心智模型去编排子 Agent。
- 当 LLM 决策调用
task时,LangGraph 把调用路由到handle_langgraph_sub_agent,它完成上下文隔离(新 thread_id + 全新 messages)、单一返回值(只返回一条 ToolMessage)以及 files 合并(通过Command.update合并回主 Agent 的 state)。
一句话总结
DeepAgents 并没有另起炉灶,而是把 LangGraph 的图构建、状态管理、工具路由、子图(Subgraph)等机制封装成了"开箱即用"的抽象。主 Agent 是一个 ReAct 循环图,子 Agent 是独立编译的子图,task 工具是连接它们的边------整个协作完全运行在 LangGraph 的图执行引擎之上。