前言
上篇文章中,笔者详细剖析了 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-codeis a prebuilt terminal coding agent built on top of thedeepagentsSDK. 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.py、agent.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智能体开发免费获取。