认知篇 EP.01

从 Agent Framework 到 Agent Harness — Deep Agents 的诞生逻辑

在 GitHub 编辑此页

配套实验:第 1 章 Notebook:Agent Harness 与最小运行结构。

本章是《Deep Agents 实战》系列的开篇。我们不急着写代码,而是先回答一个根本问题:在 Agent 开发领域已经有那么多框架的今天,Deep Agents 为什么还要存在?它解决了什么问题?

一个真实的困境

假设你要构建一个 AI 编程助手。它需要:

如果你从零开始用 LangChain 搭建,你会发现自己在重复造轮子:手写文件读写工具、手写任务追踪逻辑、手写子 Agent 的调度机制……而这些能力,几乎每一个”认真”的 Agent 应用都需要。

这就是 Deep Agents 要解决的问题。

Agent 开发的三个层次

在 LangChain 的技术栈中,Agent 开发被划分为三个层次。理解这三个层次,是理解 Deep Agents 定位的关键。

底层:Agent Runtime(运行时层)— LangGraph

Agent Runtime 是整个技术栈的基座,它解决的是”Agent 怎么可靠地运行”的问题:

LangGraph 就是这个底层运行时。它提供了一个基于图(Graph)的执行引擎,支持上面所有这些生产级特性。你可以把它理解为 Agent 世界的”操作系统”——所有上层应用都运行在它之上。

同一层的其他选手包括:Temporal、Inngest 等持久化执行引擎。

中间层:Agent Framework(框架层)— LangChain

Agent Framework 构建在 Runtime 之上,提供更高层次的开发体验:模型抽象、工具接口、Agent 循环、中间件(Middleware)等。

LangChain 就是这样一个框架。LangChain 1.0 构建在 LangGraph 之上——它利用 LangGraph 的图执行引擎和状态管理能力,但对外提供了更简洁的 API。你在使用 LangChain 时,通常不需要直接接触 LangGraph 的底层 API:

示意片段:这里只展示 create_agent() 的 API 形态;web_search 和 calculator 代表应用自行实现并注册的工具,不是 LangChain 自动提供的全局函数。

from langchain.agents import create_agent

agent = create_agent(
    model="gpt-4.1",
    tools=[web_search, calculator],
    system_prompt="You are a helpful assistant."
)

框架层的价值在于标准化和易上手。你不需要关心底层的执行引擎、状态持久化逻辑,框架帮你处理好了。

同一层的其他选手包括:Vercel 的 AI SDK、CrewAI、OpenAI Agents SDK、Google ADK、LlamaIndex 等。

上层:Agent Harness(工具层)— Deep Agents

这是最上面的一层,也是本系列课程的主角。

Agent Harness 是一个”开箱即用”的 Agent 套件,它在 Runtime 和 Framework 的基础上,预置了一整套经过验证的工具接口和中间件框架。从 v0.7 开始,Harness 仍提供这些能力,但不再替所有应用默认打开每一种策略。

这个概念怎么理解?打个比方:

Deep Agents 就是这样一个 Harness。它利用 LangChain 的核心构建块(模型、工具接口),运行在 LangGraph 的运行时之上,提供以下能力;其中一部分默认装配,一部分需要应用按需配置:

能力说明
虚拟文件系统read_file、write_file、edit_file、delete、ls、glob、grep 七个文件操作工具
任务规划按需启用 TodoListMiddleware 后获得 write_todos,把复杂任务拆解为可追踪的步骤
子 Agent 委派task 工具,让 Agent 能将子任务派发给专门的 Agent
Skills配置技能目录后,按需加载领域知识、操作流程和脚本说明
上下文管理通过摘要缩短模型输入,将大结果卸载到文件,控制长任务中的上下文体积
记忆加载指定的记忆文件;结合持久化 Backend 保存跨对话的信息

同一层的其他选手包括:Anthropic 的 Claude Agent SDK、Manus 等。

三层关系一览

用一张表来总结(从底层到上层):

层次代表核心价值适用场景
Runtime(底层)LangGraph持久化执行、流式输出、人机协作、状态管理需要精细控制的长期运行 Agent 和复杂工作流
Framework(中间层)LangChain模型抽象、工具接口、Agent 循环、中间件快速上手、构建标准化的 Agent 应用
Harness(上层)Deep Agents预置工具接口、中间件框架、子 Agent、长期记忆复杂多步骤任务、自主性较高的 Agent

三者不是互相替代的关系,而是自底向上层层构建。LangGraph 是底层运行时,LangChain 构建在 LangGraph 之上提供更高层抽象,Deep Agents 则在两者之上提供开箱即用的 Agent 能力。你可以根据需求选择在不同层次上工作——需要最大灵活性就直接用 LangGraph,需要快速开发就用 LangChain,需要解决复杂任务就用 Deep Agents。

Agent 开发三层架构:底层 LangGraph (Runtime)、中间层 LangChain (Framework)、上层 Deep Agents (Harness),侧边 LangSmith 贯穿提供可观测性

三层如何选择与组合

三层的差别还体现在:哪些工作由框架预先做好,哪些决策需要你自己编码。

你的需求合适的起点你主要负责什么
需要文件操作、上下文管理和子任务委派,让 Agent 自主完成多步骤任务Deep Agents 的 create_deep_agent()配置业务工具、提示词、后端和需要启用的能力
需要标准的模型—工具循环,希望自行决定上下文策略与中间件组合LangChain 的 create_agent()组合工具与 Middleware,定制每轮模型和工具调用的行为
流程包含固定步骤、条件分支,或需要精确控制整体执行路径LangGraph 的 StateGraph定义节点、边与路由,把确定性步骤和 Agent 调用编排在一起

如果还没有必须自定义的流程,可以先从 Deep Agents 开始;当需求超出当前抽象提供的控制范围时,再深入 LangChain 或 LangGraph。直接使用 LangGraph 也可以构建高度自主的 Agent,区别在于你需要自己定义更多执行结构。

三者可以组合使用。 例如,在 LangGraph 中先用固定代码校验输入,再把研究任务交给一个 Deep Agent,最后进入人工审核节点;也可以把已经写好的 LangGraph 工作流包装成 CompiledSubAgent,交给主 Agent 委派。后者的具体实现见第 5 章。

这一选择与组合方式参考官方博客 Deep Agents vs LangChain vs LangGraph。

为什么需要 Agent Harness?

你可能会问:运行时和框架已经提供了构建 Agent 所需的一切,为什么还需要一个 Harness?

答案来自一个观察:成功的 Agent 产品都长得差不多。

看看市面上那些真正能完成复杂任务的 Agent 产品——Claude Code、Manus、Cursor——它们虽然各有特色,但核心能力惊人地相似:

  1. 都有文件系统操作能力:能读写、搜索、编辑文件
  2. 都有任务规划能力:能把大任务拆成小步骤
  3. 都有子任务委派能力:能把部分工作交给子 Agent
  4. 都有上下文管理策略:防止对话过长导致 LLM “失忆”

这些共性不是巧合。当 Agent 面对的任务足够复杂时,这些能力就是必需的。而 Agent Harness 的价值就在于:把这些被验证过的模式固化下来,让你不需要每次都从头实现。

Deep Agents 的核心设计理念:Context Engineering

Deep Agents 的技术核心可以用一个概念概括:Context Engineering(上下文工程)。

传统做法的问题

传统的 Agent 开发中,所有信息都塞在 prompt 里:

System: 你是一个编程助手。
User: 请帮我重构 src/ 下的代码。
[附带: 20 个文件的完整内容,共 50000 tokens]

这种做法有几个致命问题:

Deep Agents 的做法

Deep Agents 的解决方案是引入一个虚拟文件系统,让 Agent 像人类一样工作:

这样,Agent 的上下文里只保留当前步骤真正需要的信息,其余的都存在文件系统中,需要时再取。

更巧妙的是,这个”文件系统”是虚拟的、可插拔的:

这就是 Context Engineering——不是把所有信息都喂给 LLM,而是为 LLM 构建一个高效获取和管理信息的基础设施。

Context Engineering 对比:左侧传统 Prompt Stuffing 导致上下文溢出、注意力稀释、不可扩展;右侧 Deep Agents 通过虚拟文件系统按需读取,实现结构化存储和无限扩展

Deep Agents vs 竞品对比

市场上有三个主要的 Agent Harness:Deep Agents、Claude Agent SDK、Codex SDK。我们来看看它们的异同。

定位差异

维度Deep AgentsClaude Agent SDKCodex SDK
用途通用 Agent(含编程)自定义 AI 编程 Agent预构建的编程 Agent
模型支持模型无关(Anthropic、OpenAI、Google、开源等 100+)绑定 Claude 系列绑定 OpenAI 系列
SDK 语言Python + TypeScriptPython + TypeScriptTypeScript
执行环境本地 + 远程沙箱 + 虚拟文件系统本地本地运行 Codex CLI;托管云端运行由 Agents API 提供
开源协议MITMIT(底层 Claude Code 专有)Apache-2.0

核心能力对比

三者在核心工具层面非常接近——文件读写、Shell 执行、搜索、规划、子 Agent、MCP、人机协作、Skills——都有覆盖。

真正的差异在架构层面:

Deep Agents 的独有优势:

Claude Agent SDK 的独有优势:

Codex SDK 的独有优势:

三大 Agent Harness 对比:Deep Agents(模型无关、虚拟文件系统、长期记忆)、Claude Agent SDK(Claude 深度集成、Hooks 系统)、Codex SDK(OS 级沙箱、MCP Server 模式),共同能力包括文件读写、Shell 执行、规划、子 Agent 等

如何选择?

Deep Agents 的技术全景

学习到这里,你可能还想知道:Deep Agents 的整体架构是什么样的?文件系统、子 Agent、记忆等能力,究竟怎样连接起来?

创建时:能力如何装配

核心关系是:Deep Agents 在 LangChain 的 Agent 循环周围装配 Middleware,最终由 LangGraph 执行。 Middleware 可以提供工具、扩展状态,也可以在模型调用和工具执行等环节介入处理。它们的 hooks 运行在编译后的执行图中。

Deep Agents 整体架构图:应用配置进入 create_deep_agent,装配文件系统、子 Agent、摘要和按需中间件,再通过 LangChain create_agent 构建 Agent 循环,最终在 LangGraph 上运行;LangSmith 从侧边提供观测

打开原尺寸 SVG 架构图,可放大查看组件细节。

从上到下读这张图,可以分成四步:

  1. 应用提供业务配置:选择模型,注册自定义工具,定义系统提示词,并配置 Backend、Skills、记忆文件等。
  2. create_deep_agent() 装配 Harness:根据参数和当前 Harness profile,组装内置与自定义 Middleware,并准备工具和状态定义。
  3. LangChain 构建 Agent 循环:create_deep_agent() 内部调用 create_agent(),把模型、工具、中间件和运行配置交给框架。
  4. LangGraph 执行编译后的图:返回的 Agent 支持 invoke() / stream();配置 Checkpointer 和 Store 后,可以分别保存线程状态和跨线程数据。LangSmith 用于观察、调试和评测运行过程。

这里的调用关系可以在 Deep Agents v0.7.1 的 graph.py 中核对。理解 Middleware 如何介入循环,可继续阅读 LangChain Middleware Overview。

各项能力分别由谁负责?

官方把 Harness 能力归为执行环境、上下文管理、任务委派和人机控制四组。下表把这些能力与课程章节对应起来,方便你从整体架构进入具体实现:

能力分组关键组件与职责后续章节
执行环境FilesystemMiddleware 提供文件工具,Backend 决定文件存到哪里;沙箱后端支持 Shell 执行,Interpreter 提供代码编排;自定义工具和 MCP 接入业务系统文件系统 · 沙箱 · MCP · Interpreter
上下文管理摘要中间件缩短模型输入并保存可回查的历史;大结果卸载到文件;SkillsMiddleware 提供技能元数据与读取指引,正文由模型按需调用 read_file 获取;MemoryMiddleware 加载指定的记忆文件;持久化 Backend 保存可跨对话使用的信息上下文与 Backend · Skills · 记忆
任务委派SubAgentMiddleware 提供 task,让子 Agent 用独立上下文处理任务并返回结果;TodoListMiddleware 提供显式计划与进度状态任务规划 · 子 Agent · 异步子 Agent · 动态子 Agent
人机控制HumanInTheLoopMiddleware 在指定工具调用前暂停;文件权限规则限制具体路径的操作,也可以触发人工审批人机协作 · 文件权限

Tool、Middleware 和 Backend 各司其职。 Tool 是模型可以请求的动作;Middleware 提供能力并控制执行环节;Backend 实现文件操作和存储。例如,模型请求 read_file,文件系统中间件提供这个工具,工具再通过配置的 Backend 读取内容。Backend 本身也不是 Agent 循环,它负责存储与环境操作。

记忆也需要分清两件事:memory= 指定启动时加载哪些记忆文件,文件能否跨线程保存则取决于存储后端;Checkpointer 保存的是线程执行状态。完整配置见第 8 章。

[!NOTE] v0.7 能力与默认值:图中展示的是整体能力及装配关系。标准配置会装配文件系统、子 Agent 和摘要等核心能力;任务规划需要显式传入 TodoListMiddleware,Skills、记忆加载与人工审批需要相应配置,execute 需要支持执行的沙箱后端,Interpreter 也需要单独启用。实际可执行的操作还会受 Backend 能力、权限与 Harness profile 影响;支持某项能力不代表每个任务都会调用它。默认基础提示词为空,业务提示词由应用定义。版本变化见 v0.7 更新章,能力分类参考 官方 Overview。

小结

本章我们理解了 Deep Agents 的设计定位:

  1. Agent 开发分为三个层次:Runtime(LangGraph)→ Framework(LangChain)→ Harness(Deep Agents),自底向上层层构建
  2. Agent Harness 的价值在于把文件系统、子 Agent 和上下文管理等能力装配到 Agent 循环中,并允许应用按需启用规划、Skills、记忆等策略
  3. Context Engineering 是 Deep Agents 的核心理念——用虚拟文件系统按需管理上下文,而不是把所有信息塞进 prompt
  4. 与竞品相比,Deep Agents 的最大优势是模型无关性、虚拟文件系统的可插拔后端、长期记忆、以及完整的生产部署方案

下一章,我们将动手实践,用 5 分钟构建第一个 Deep Agent。

课件下载

相关资源

Lec 01: Agent 三层架构与 Deep Agents 定位 B 站视频讲解 小红书图文
Lec 02: Context Engineering 与竞品对比 B 站视频讲解 小红书图文