LangChain Deep Agents实战:规划、子Agent、文件系统上下文管理

深度Agent教程展示如何用LangChain+LangGraph构建能规划多步任务、通过文件系统管理上下文、动态生成子Agent的复杂系统。超越简单的提示-响应模式,Agent能自主分解任务、管理依赖关系、在子Agent间协调工作流。教程涵盖Agent状态图设计、工具集成、长短期记忆机制和生产级部署策略。

LangChain Deep Agents 实战:从概念到生产部署

什么是 Deep Agent?

传统 LLM Agent 的运作模式相当简单:接受一个问题,调用一次或几次工具,返回答案。这种模式在处理单步骤任务时表现不错,但面对"研究竞争对手并生成完整分析报告"这类复杂任务时就会力不从心。**Deep Agent** 的出现正是为了解决这个问题——它能自主规划多步骤任务、管理复杂的依赖关系、在文件系统中维护持久化的工作上下文,并在必要时动态生成子 Agent 协作完成任务。

简单来说,Deep Agent 是一种具备"项目管理能力"的 AI 智能体:它不仅能执行单个任务,还能将复杂目标拆解成子任务,分配给不同的执行单元,汇总结果,并在出错时自动调整策略重新尝试。

---

核心架构:LangGraph 状态机

LangChain 生态中实现 Deep Agent 的关键工具是 **LangGraph**——一个用有向图(DAG)定义 Agent 状态机的框架。与传统的线性链(Chain)不同,LangGraph 允许 Agent 在节点之间循环、分支,实现真正的自主决策流程。

一个典型的 Deep Agent 由以下核心节点构成:

  • **Planner 节点**:接收用户目标,调用 LLM 生成结构化的执行计划。计划通常包含任务列表、每个任务的依赖关系、预期输出格式等。
  • **Executor 节点**:逐一执行计划中的具体工具调用,如代码运行、网页抓取、API 请求等。
  • **Reviewer 节点**:对 Executor 的输出进行质量检查,判断结果是否满足预期。如果不满足,可以触发重试或请求 Planner 修订计划。
  • **SubAgent Spawner**:当某个子任务复杂度超过阈值时,动态创建独立的子 Agent 来专门处理该任务,并将结果汇总到主 Agent 的上下文中。

这种图结构带来的最大优势是**灵活性**:Agent 可以根据中间结果动态调整后续行为,而不是机械地按预设脚本执行。

---

文件系统上下文管理

Deep Agent 处理的任务往往超出单次 LLM 上下文窗口的承载能力。为此,需要设计完善的**持久化上下文策略**:

中间结果落盘:每个任务执行完毕后,Agent 将结果写入本地文件系统的指定目录(如 `./workspace/task_001_result.json`)。这样即使主进程崩溃重启,也能从断点继续。

子 Agent 信息共享:当多个子 Agent 并行工作时,它们通过共享的文件空间交换信息。例如,负责数据收集的子 Agent 写入 `data/raw/`,负责分析的子 Agent 从该目录读取并写入 `data/analyzed/`,最终由主 Agent 汇总。

长期记忆架构:通过向量数据库(如 Chroma、Pinecone)+ 文件索引的组合实现跨会话的长期记忆。Agent 在开始新任务时,会先检索历史相关记忆,避免重复劳动。

---

关键工程技巧

构建生产级 Deep Agent 时,以下技巧至关重要:

1. 结构化输出约束:要求 Planner 以 JSON Schema 格式输出执行计划,防止 LLM 生成难以解析的自由文本。使用 `with_structured_output()` 方法可以优雅地实现这一点。

2. 防无限循环:设置 `max_iterations` 参数限制单个任务的最大执行轮次。建议生产环境设置为 10-20 次,开发测试时可以适当放宽。

3. 分层错误处理:

  • 工具调用失败 → 自动重试(最多 3 次)
  • 重试耗尽 → 触发回退策略(使用更保守的工具或方法)
  • 整体任务失败 → 保存现场快照,通知人工介入

4. LangSmith 可观测性:通过 LangSmith 追踪每次 Agent 运行的完整轨迹,包括每个节点的输入输出、耗时、Token 消耗等。这对于调试复杂的多步骤 Agent 至关重要,也是优化成本的基础数据。

---

子 Agent 设计模式

子 Agent 的设计需要遵循**单一职责原则**:每个子 Agent 专注于一种能力,如"网页研究 Agent"只负责搜索和抓取,"代码执行 Agent"只负责运行代码并返回结果。

子 Agent 之间的协调由主 Agent 负责,避免子 Agent 之间直接通信带来的复杂性。主 Agent 维护一个全局任务图,追踪每个子任务的状态(待执行、进行中、完成、失败)。

---

部署到生产环境

LangServe 部署:使用 LangServe 将 Deep Agent 暴露为标准 REST API,支持流式输出(SSE)。客户端可以实时接收 Agent 的中间思考过程,而不是等待最终结果。

资源与超时配置:为每个子 Agent 设置独立的超时限制,防止单个任务阻塞整个流程。推荐配置:单工具调用超时 30 秒,单子 Agent 超时 5 分钟,整体任务超时 30 分钟。

Human-in-the-Loop 检查点:对于风险较高的操作(如发送邮件、修改数据库、执行系统命令),在 LangGraph 中设置人工审核检查点。Agent 执行到此处时暂停,等待人工确认后再继续。

成本控制:Deep Agent 因为多步骤调用,Token 消耗可能很高。建议为 Planner 使用高智能模型(如 GPT-4o),为 Executor 的简单工具调用使用轻量模型(如 GPT-4o-mini),在性能和成本之间取得平衡。

---

总结

LangChain + LangGraph 的组合为构建生产级 Deep Agent 提供了完整的技术栈。核心思路是:用图结构实现灵活的决策流程,用文件系统解决上下文超限问题,用 LangSmith 保证可观测性,用 Human-in-the-Loop 控制风险边界。随着 AI Agent 从实验室走向实际业务,这套架构将成为越来越多团队的标准选择。