LangChain DeepAgents 速通指南(九)—— 生产级智能体框架 DeepAgents Code 源码导读

前言

上篇文章中,笔者详细剖析了 DeepAgents 的流式输出机制。至此,DeepAgents 框架的核心特性与基本用法已基本覆盖完毕。

不过,了解知识只是第一步,真正检验理解深度的,永远是实战。最近不少读者在后台私信笔者,希望能看到一个生产级别 的智能体项目,而不是简单的 Demo。LangChain 团队基于 DeepAgents 框架开源的 DeepAgents Code 智能体就是一个不错的范例,它直接对标 Claude Code,是一个完全开放、工业级的编程助手。通过学习这个项目,大家将掌握智能体开发的关键要素:一个生产级系统需要关注哪些重要机制?如何从零设计并落地这样的系统?大家通读这个项目后,无论是对 LangChain DeepAgents 框架本身,还是对生产级智能体的整体设计思路,都会有一个质的飞跃。

前八篇文章,笔者侧重于"术"------把 DeepAgents 的核心原理、基础用法、高级特性和流式输出都讲了一遍,属于"教你怎么用"。但很多读者更想知道:"如何用DeepAgents SDK开发一个真正跑在生产环境里的编程智能体,它的代码结构长什么样?" 从本篇开始笔者将从"教用法"转向"读项目",以 DeepAgents Code 这个 LangChain 团队的官方项目为牵引,带大家走进智能体开发的深水区。在这个过程中,大家不仅要关注"某个功能如何实现",更要思考"为什么这样设计"------理解设计背后的核心思想,远比记住 API 调用更重要。

今天这篇文章笔者先做项目代码总览,帮助大家建立宏观认知:这个项目整体长什么样,用到了哪些技术栈,各个模块之间如何有机协作。后续几篇再逐一攻破其中的关键技术点。

一、 DeepAgents Code 项目简介

1.1 为什么要阅读源码?如何阅读源码?

读完前八篇文章,大家想必已经对 DeepAgents 的 API 烂熟于心了。调用 create_deep_agent,按需接入 Skill、多智能体协作机制,再配上流式输出,似乎一个智能体系统就能轻松搭建起来。但坦白说,这离一个真正的生产级项目还差得很远。

API 是原材料,生产级项目是成品菜。大家现在知道了调料怎么用,但没有大量工程实践的淬炼,依然炒不出一道色香味俱全的硬菜。在实际开发中,大家常常会遇到这样的棘手问题:

  • 多模型动态切换要怎么设计,才能在不中断用户会话的前提下平滑生效?
  • 长期记忆、本地上下文、技能系统------这些高级特性之间如何有序协作,才能避免相互干扰?
  • 终端工具的 UI 偶发卡死,如何从架构设计层面从根本上规避?

这个时候,DeepAgents Code 就是官方给出的"参考答案" 。它是 LangChain 官方团队基于 DeepAgents API 搭建的真实产品。读它的源码,本质上就是学习这个星球上最懂智能体的一群人,是如何将一套开发框架真正落地到生产环境中的。

当然,读源码也要讲究方法。大家的目的不是「背诵」每一行实现细节,而是理解设计思想和约束权衡------为什么选这个架构、为什么这样拆模块、为什么需要延迟加载和 SSRF 防护。每个决策背后,都是真实的工程约束(启动速度、安全性、可扩展性)在驱动。理解了这些,大家就能把同样的思路迁移到任何基于 DeepAgents API 搭建的项目中去。

1.2 DeepAgents Code 是什么

DeepAgents Code(简称 dcode)是 LangChain 开源的一个终端编码智能体工具,源码位于:github.com/langchain-a... 。它是 LangChain 官方团队受 Claude Code 启发,利用 DeepAgents SDK 实现的一款类似 Claude Code 的编程智能体助手。

它的功能相当丰富,具备:模型灵活切换、文件读写编辑、Shell 命令执行、任务规划与追踪、子智能体委派、Web 搜索、跨会话持久记忆、远程沙箱运行代码,以及人机协作的审批机制等能力。

在 DeepAgents Code 的 README.md 中,LangChain 团队明确给出了它的定位:

deepagents-code is a prebuilt terminal coding agent built on top of the deepagents SDK. It is a reference implementation.

翻译过来就是:它是基于 DeepAgents SDK 构建的一个开箱即用 的终端编码智能体,同时也是一份参考实现 。所以,DeepAgents Code 的定位非常清晰------它是 DeepAgents SDK 的首个正式用户 ,也是最权威的生产级工程范例。掌握它的源码,对大家基于 LangChain DeepAgents 框架开发智能体,具有极大的教学和启发意义。

接下来,笔者将详细解读 DeepAgents Code 的整体设计结构。

二、DeepAgents Code 整体架构

用代码编辑器打开 DeepAgents Code 项目,初学者往往会被复杂的一堆代码文件吓到:哪些是重点?该从哪里看起?了解一个项目的最佳方式是先建立全局认知,再按图索骥定位关键文件,不必通读每一行实现。

2.1 DeepAgents 架构总览:客户端与服务端分离

先看看项目目录下有没有整体介绍------可以找到 ARCHITECTURE.md 文件。其中有一个 ASCII 架构图,清晰展示了 DeepAgents Code 的核心设计理念:客户端和服务端相互独立,运行在不同的进程中。客户端负责展示与输入,服务端负责智能体运行时。

有粉丝可能会问:一个终端工具而已,直接把这两部分写进同一个进程不行吗?如果那样做,会遇到几个典型问题:

  • UI 卡死:智能体执行 Shell 命令或运行代码时,可能耗时数十秒甚至数小时(我们在写 Demo 时几乎遇不到这种情况)。如果客户端和服务端在一个进程里,UI 会被阻塞,产生假死状态,体验极差。
  • 状态管理混乱:复杂项目中,DeepAgents 需要管理各类数据和状态,如果与 UI 状态纠缠在一起,管理逻辑会异常复杂。
  • 扩展性受限:如果未来系统要支持远程执行、多用户共享,单进程架构会直接成为瓶颈。

因此,DeepAgents Code 采用了这种客户端-服务端(C/S)分离架构------Claude Code、Cursor 终端版也都采用了同样的设计。客户端负责展示和输入,服务端负责执行和状态管理,两者通过流式协议通信。下图展示了DeepAgents Code 客户端与服务端各自包含的功能模块:

2.2 DeepAgents Code 代码分层:各模块归属速查

了解了客户端-服务端分离的架构模式后,大家就可以对照代码,快速判断每个文件属于哪一侧,从而将注意力聚焦到自己关心的部分。笔者将分析结果整理为下表,供大家参考:

分类 文件 归属
智能体核心 main.pyagent.py, server_graph.py, server.py, server_manager.py 服务端
工具系统 tools.py, mcp_tools.py, mcp_auth.py, mcp_commands.py, mcp_oauth_ui.py, mcp_login_service.py, mcp_trust.py, mcp_providers/ 服务端
状态与记忆 sessions.py, resume_state.py, offload.py, memory_guard.py 服务端
技能与子智能体 skills/, subagents.py, built_in_skills/ 服务端
配置与上下文 config.py, configurable_model.py, local_context.py, model_config.py, project_utils.py 共享
沙箱集成 integrations/ 服务端
服务端杂项 onboarding.py, update_check.py, hooks.py, file_ops.py, clipboard.py, notifications.py, auth_store.py, auth_commands.py, managed_tools.py, state_migration.py, filesystem_empty_result.py 服务端
Textual应用 app.py, app.tcss, editor.py, input.py, output.py 客户端
UI组件 widgets/(全部) 客户端
客户端适配与显示 textual_adapter.py, remote_client.py, ui.py, formatting.py, theme.py, tool_display.py, media_utils.py 客户端
命令系统 command_registry.py, config_commands.py, auth_display.py 客户端
终端能力 terminal_capabilities.py, terminal_escape.py, unicode_security.py, itern_cursor_guide.py 客户端
共享基础设施 _constants.py, _env_vars.py, _paths.py, _version.py, _cli_context.py, _session_stats.py, _startup_error.py, _debug.py, event_bus.py, doctor.py, extras_info.py 共享
测试专用 _testing_models.py, _textual_patches.py 测试

有了这张表,大家就可以快速定位到自己最感兴趣的模块,按需深入阅读。

2.3 DeepAgents Code 技术栈解析

理解了整体架构和文件归属之后,大家再来总览一下 DeepAgents Code 的技术选型。DeepAgents Code项目的技术栈很有意思------它没有追求"最新最酷",而是让每个选择都服务于"本地优先、生产可用"这个核心定位。具体包括以下几个方面:

1. DeepAgents SDK:智能体的"骨架"

DeepAgents Code 建立在 DeepAgents SDK 之上(大家在前八篇文章中已经学过 SDK 的用法)。DeepAgents SDK 通过 create_deep_agent 快速将模型、中间件、工具等组件组装成可执行的智能体,同时还提供了状态管理、后端沙箱等基础设施,让 DeepAgents Code 只需关注"业务逻辑"即可。

2. Textual+Rich:终端UI框架

DeepAgents Code 的交互式界面使用 Textual 构建。Textual 不仅支持富文本渲染,还提供了完整的 UI 框架(组件、布局、事件系统)。Textual 的一个关键特性是响应式属性(reactive attributes) :当状态变化时,UI 会自动更新,无需手动刷新。这在处理流式输出时尤为实用------模型每生成一个 Token,状态更新一次,UI 随之刷新一次。

app.py 中,DeepAgentsApp 类继承自 textual.app.App,整个 TUI 的组件树、事件处理、样式管理都遵循 Textual 的范式;app.tcss 文件则是 Textual 的 CSS 样式表,控制着终端界面的视觉呈现。而 Rich 作为 Textual 的底层依赖,负责所有"渲染"相关的工作:语法高亮、Markdown 渲染、进度条、表格等------在欢迎横幅、帮助屏幕、工具输出等场景中都能看到它的身影。

3. SQLite+aiosqlite:轻量级持久化

用户与大模型的会话记录和状态保存在哪里?DeepAgents Code 直接选用了 SQLite 数据库。SQLite"零配置、单文件"的特性,完美契合了 DeepAgents Code 本地优先的工具属性。

为了不阻塞 UI 线程,DeepAgents Code 将 aiosqlite 包装成异步接口,在后台线程中执行数据库操作,主线程则继续响应用户输入。(当然,这是针对本地应用的方案;如果是 Web 应用,还是推荐使用 PostgreSQL、MySQL 等数据库。)

4. 流式协议:客户端-服务端通信

前面说到客户端和服务端是两个独立进程,那它们之间如何通信?DeepAgents Code 采用的是一套流式协议 ------基于 LangGraph 的 astream_events API,服务器将智能体的执行过程以事件流的形式推送给客户端。每个事件包含类型(模型输出、工具调用、状态更新等)和数据。客户端解析事件后,更新 UI:渲染文本、显示工具调用进度、更新状态栏。

5. DeepAgents Code 的本地文件策略

DeepAgents Code 在使用过程中还涉及大量本地文件。首先是配置文件,采用 TOML 格式------相比 YAML,TOML 更明确、易读,且没有缩进敏感等问题,模型提供商、MCP 服务、沙箱设置等都使用这种格式。

此外,DeepAgents Code 将智能体运行中的长期记忆、Skill 定义、子智能体定义、系统提示 等内容写入本地 Markdown 文件。这种"文件即数据库"的理念,大幅降低了用户的定制门槛------用户可以直接编辑这些 Markdown 文件来调整智能体行为,无需接触代码。

数据类型 文件格式 存储位置
长期记忆 AGENTS.md ~/.deepagents/<agent>/.deepagents/
技能定义 SKILL.md ~/.deepagents/<agent>/skills/.deepagents/skills/
子智能体定义 AGENT.md .deepagents/agents/
系统提示 system_prompt.md 包内资源

以上就是本文的全部内容。到这里,大家应该对 DeepAgents Code 项目的整体架构、模块划分、技术选型和本地文件策略有了一个清晰的宏观认知。关于DeepAgents Code 大家如果不想登录github下载的话可关注笔者的同名微信公众号大模型真好玩 ,每期分享涉及的代码均可在公众号私信: LangChain智能体开发免费获取。

三、总结

本文明确了读源码的核心目的------理解设计思想与工程约束 ,而非死磕实现细节。随后介绍了 DeepAgents Code 的定位:DeepAgents SDK 的首个正式用户 ,也是一份权威的生产级参考实现 。在架构层面重点剖析了客户端与服务端分离的设计,并梳理了DeepAgents Code的技术栈。

从下一篇开始,笔者将正式进入深度阅读模式 ,聚焦服务端的 Agent Server 模块。届时会逐一剖析:一个生产级的智能体服务至少需要包含哪些核心模块?启动流程、会话管理、中间件链、工具注册与调用机制如何设计?状态如何跨轮次保持连贯?大家敬请期待~

本系列相关内容均列于笔者的专栏《深入浅出LangChain&LangGraph AI Agent 智能体开发》,该专栏适合所有对智能体开发感兴趣的学习者,无论之前是否接触过 LangChain。该专栏基于笔者在实际项目中的深度使用经验,系统讲解了使用LangChain/LangGraph如何开发智能体,目前已更新 47 讲,并持续补充实战与拓展内容。欢迎感兴趣的同学关注笔者的掘金账号与专栏,也可关注笔者的同名微信公众号大模型真好玩 ,每期分享涉及的代码均可在公众号私信: LangChain智能体开发免费获取。

相关推荐
用户252736278141 小时前
【踩坑复盘】我在本地跑 RAG 知识库时踩了 5 个大坑,吐血整理避坑指南
人工智能
用户3134672143542 小时前
LangChain 入门:LCEL 链式开发、LangSmith 追踪、RAG 检索与自定义 Agent 工具实战
agent
用户018349301694 小时前
用Zustand管理AI多会话状态
人工智能
武子康6 小时前
调查研究-198 Agent 到底该记住什么?读懂《What Must Generalist Agents Remember?》
人工智能·openai·agent
aqi006 小时前
15天学会AI应用开发(九)利用Chroma持久化向量数据
人工智能·python·大模型·ai编程·ai应用
武子康8 小时前
调查研究-197 FAISS vs Elasticsearch 全面对比:从向量检索、全文搜索到 RAG 选型指南
人工智能·elasticsearch·agent
leeyi8 小时前
Checkpoint 机制:Agent 怎么在断电后接着跑
redis·aigc·agent
青禾网络8 小时前
Web 前端如何接入 AI 音效生成:从零到可用的完整方案
人工智能·设计模式