Deep Agents 完全学习教程
基于 deepagents v0.6.8 | 最后更新:2026-06-10
目录
- 第一章:项目概览与核心概念
- 第二章:快速上手
- 第三章:核心 API — create_deep_agent 详解
- 第四章:模型配置与 Provider Profile
- 第五章:Harness Profile — 运行时行为调优
- 第六章:内置工具体系
- 第七章:Backend 后端系统
- 第八章:中间件体系
- 第九章:子代理(Subagents)
- 第十章:异步子代理(Async Subagents)
- 第十一章:Skills 技能系统
- 第十二章:Memory 记忆系统
- 第十三章:文件系统权限与安全
- 第十四章:Human-in-the-Loop 人机协作
- 第十五章:上下文管理与对话压缩
- 第十六章:Rubric 中间件 — 自我评估迭代
- 第十七章:流式输出与状态管理
- 第十八章:实战案例解析
- 第十九章:生产部署指南
- 第二十章:架构全景与扩展指南
- 附录
第一章:项目概览与核心概念
1.1 什么是 Deep Agents?
在当今的 AI 智能体开发领域,开发者面临一个核心问题:如何在构建简单智能体和打造生产级智能体之间找到平衡。LangChain 生态为此提供了分层解决方案,而 Deep Agents 正是这个分层体系中处于最上层的关键组件。
要真正理解 Deep Agents 的定位,需要先理解它所在生态中的三个层次:
LangGraph 是最底层的图运行时引擎。它提供了构建有状态智能体的基础设施——流式输出、持久化存储、检查点机制、并发控制和优雅的中断恢复。但 LangGraph 的设计哲学是"提供砖块,但不提供房子"。如果你要构建一个需要多步推理、条件分支和状态管理的智能体,LangGraph 是基础,但它没有预设任何智能体行为模式——你需要自己定义图结构、工具循环、状态管理策略。
LangChain 的 create_agent 是在 LangGraph 之上构建的轻量级智能体框架。它为你搭了一个"能跑的基础框架"——智能体接收消息,决定调用哪个工具,获取工具结果,继续推理。但它的设计哲学是"极简主义"——刻意不做太多默认假设。它没有内置的对话压缩(长对话会溢出上下文窗口)、没有子代理概念(无法委托任务)、没有文件系统抽象(每个开发者的文件操作方式都不同)。
Deep Agents 是在 create_agent 之上构建的"装配齐全的整车"。它在保留 LangGraph 全部能力的同时,提供了一套"有主见"(opinionated)的完整方案——内置了子代理管理、文件系统操作、对话压缩、持久化记忆、技能系统、人机协作等生产级特性。这些特性不是随意堆砌的,而是经过团队在大量真实使用场景中验证过的标配能力。
+----------------------------------+
| Deep Agents | <-- 开箱即用的完整框架,包含所有生产级特性
| +----------------------------+ |
| | LangChain create_agent | | <-- 轻量级智能体框架,最小工具循环
| | +----------------------+ | |
| | | LangGraph | | | <-- 图运行时引擎,提供状态管理和流式输出
| | +----------------------+ | |
| +----------------------------+ |
+----------------------------------+
1.2 核心设计原则
Deep Agents 的设计遵循四条核心原则。它们不是空洞的口号,而是体现框架每一个设计决策中的指导思想:
原则一:Opinionated(有主见但不固执)。 "有主见"意味着框架为你做了很多决策——这些决策基于团队在大量真实使用场景中的实践经验。例如,默认开启对话摘要(因为长对话必然导致上下文溢出是生产环境最常见的问题)、默认添加通用子代理(因为任务委托是处理复杂任务的最佳策略)、默认使用增量消息归约器(因为 O(N²) 的检查点增长在生产中不可接受)。你不用从零开始——你获得的是经历过生产环境考验的起点。当然,如果你不同意这些默认值,可以通过 Profile 系统或中间件排除来覆盖它们。
原则二:Extensible(可扩展但不需要)。 可扩展性体现在三个层面:配置级(Profile 系统,不需要写代码)、中间件级(实现 AgentMiddleware 接口插入自定义逻辑)、组件级(替换整个后端、创建自定义子代理、修改状态 Schema)。但关键是——大多数场景下你不需要扩展,开箱即用已经足够强大。扩展机制是为那些真正需要深度定制的特殊场景准备的。
原则三:Model-agnostic(模型无关)。 框架不绑定任何特定模型提供商。从 OpenAI 的 GPT 到 Anthropic 的 Claude,从 Google 的 Gemini 到自托管的 Ollama 模型,任何支持工具调用的 LLM 都可以使用。这种灵活性通过 init_chat_model 标准化接口实现——框架内部只与 BaseChatModel 接口交互,完全不关心底层模型是谁。这意味着你可以根据任务需求、成本预算和延迟要求灵活选择模型。
原则四:Production-ready(生产就绪)。 Deep Agents 不是实验室玩具。建立在 LangGraph 之上意味着你免费获得所有 LangGraph 的生产级特性。开发环境和生产环境用的是同一套代码——不需要"原型写完再重写"。框架内部做了大量生产环境优化,如增量检查点、流式输出、优雅的错误恢复等。
1.3 核心特性一览
Deep Agents 的八大核心特性各有侧重,它们通过统一的中间件栈协同工作:
| 特性 | 说明 | 解决的核心问题 |
|---|---|---|
| Sub-agents | 将任务委托给拥有独立上下文窗口的子代理 | 复杂任务分解 + 上下文隔离 + Token 节省 |
| Filesystem | 可插拔的本地/沙箱/远程文件系统后端 | 智能体文件操作的统一抽象层 |
| Context management | 长对话自动摘要,工具输出卸载到磁盘 | 上下文窗口溢出——长对话的头号敌人 |
| Shell access | 在沙箱环境中执行命令 | 智能体需要执行代码、运行测试 |
| Persistent memory | 跨会话记忆,可插拔的存储后端 | 会话间的知识延续 |
| Human-in-the-loop | 工具调用前的人工审批 | 安全控制和质量把关 |
| Skills | 按需加载的可复用行为模式 | 知识复用和工作流标准化 |
| Tools | 自定义函数或任何 MCP 服务器 | 能力扩展 |
1.4 仓库结构
Deep Agents 采用 monorepo 结构。核心 SDK 在 libs/deepagents/,配套工具在其他目录:
deepagents/
+-- libs/
| +-- deepagents/ # 核心 SDK(本教程重点)——所有智能体逻辑
| +-- cli/ # CLI 部署工具——init/dev/deploy 命令
| +-- code/ # Deep Agents Code 终端编码助手
| +-- acp/ # Agent Context Protocol 支持
| +-- evals/ # 评估套件——回归测试和性能基准
| +-- partners/ # 第三方集成(Daytona、Modal、QuickJS 等)
+-- examples/ # 示例项目——学习实战用法的最佳起点
+-- .github/ # CI/CD 工作流
核心 SDK 内部结构。建议对照源码阅读后续章节:
libs/deepagents/deepagents/
+-- graph.py # 核心入口:create_deep_agent 函数
+-- _models.py # 模型字符串解析逻辑
+-- _tools.py # 工具描述覆写机制
+-- _messages_reducer.py # 增量消息归约器(DeltaChannel 实现)
+-- backends/ # 后端实现——存储抽象层
| +-- protocol.py # BackendProtocol 接口定义
| +-- state.py # StateBackend——内存/临时存储
| +-- filesystem.py # FilesystemBackend——本地文件系统
| +-- local_shell.py # LocalShellBackend——本地 Shell + 文件系统
| +-- composite.py # CompositeBackend——路径路由组合
| +-- store.py # StoreBackend——LangGraph BaseStore
| +-- sandbox.py # BaseSandbox——沙箱基类
| +-- langsmith.py # LangSmithSandbox——远程安全执行
| +-- context_hub.py # ContextHubBackend——LangSmith Hub
+-- middleware/ # 中间件——扩展机制核心
| +-- filesystem.py # 文件系统中间件 + 内置文件工具
| +-- subagents.py # 同步子代理中间件
| +-- async_subagents.py # 异步子代理中间件
| +-- memory.py # 记忆中间件
| +-- skills.py # 技能中间件
| +-- summarization.py # 对话摘要中间件
| +-- rubric.py # 自我评估迭代中间件
| +-- permissions.py # 权限模块(向后兼容重导出)
| +-- patch_tool_calls.py # 修补悬空工具调用
+-- profiles/ # 配置档案
+-- harness/ # Harness Profile——运行时行为调优
+-- provider/ # Provider Profile——模型构造参数
第二章:快速上手
2.1 安装与环境配置
Deep Agents 的安装非常直接。推荐 uv 作为包管理器:
# 使用 uv(推荐——依赖解析速度远优于 pip)
uv add deepagents
# 或使用 pip
pip install deepagents
环境要求: Python >= 3.11。这是因为框架内部使用了 typing.Self、ExceptionGroup 和 tomllib 等 Python 3.11+ 特性。
验证安装:
import deepagents
print(deepagents.__version__) # 应输出 '0.6.8' 或更高
2.2 最简示例
下面是创建和运行一个基础 Deep Agent 的最简代码。虽然只有几行,但框架在背后自动完成了大量工作:
from deepagents import create_deep_agent
# 创建智能体——使用模型字符串格式
agent = create_deep_agent(
model="openai:gpt-5.5",
)
# 调用智能体
result = agent.invoke({"messages": "你好,请介绍一下你自己"})
print(result["messages"][-1].content)
背后发生了什么? 调用 create_deep_agent 时,框架在内部自动完成以下步骤:
-
模型解析:将字符串
"openai:gpt-5.5"解析为BaseChatModel实例,同时自动应用 OpenAI 的 Provider Profile(启用 Responses API、设置默认参数)。 -
中间件栈组装:按预定义顺序组装 12 层中间件——从待办事项管理到文件系统、子代理、对话摘要、人机协作等。这个多层架构让智能体获得了丰富的内置能力。
-
工具注册:注册 9 个内置工具——
write_todos、ls、read_file、write_file、edit_file、glob、grep、execute、task。即使你一个工具都没指定,智能体也已具备完整的文件操作和任务管理能力。 -
系统提示词组装:生成包含文件系统使用指南、工具规范、行为约束的完整系统提示词。这是按
USER → BASE → SUFFIX三段式结构组织的。 -
图编译:将所有组件编译为 LangGraph
CompiledStateGraph,验证图的完整性、优化执行路径、设置检查点策略。
agent.invoke() 返回的结果中,messages 列表包含完整的对话历史,最后一条消息的 content 就是智能体的最终回复。
2.3 添加自定义工具
为智能体添加自定义能力非常简单。LangChain 的 @tool 装饰器会自动将 docstring 转为工具描述、将类型注解转为 JSON Schema:
from deepagents import create_deep_agent
from langchain_core.tools import tool
@tool
def get_weather(city: str) -> str:
"""获取指定城市的天气信息。"""
# 实际使用中替换为真实 API 调用
return f"{city}今天晴,温度25度"
agent = create_deep_agent(
model="openai:gpt-5.5",
tools=[get_weather],
system_prompt="你是一个天气助手,帮助用户查询天气信息。",
)
result = agent.invoke({"messages": "北京今天天气怎么样?"})
print(result["messages"][-1].content)
关于 system_prompt: 你传入的系统提示词被放在整个提示词体系的最前面,获得最高优先级。框架随后会追加自己的基础提示词(文件系统指南等)和尾部提示词(模型调优指导)。如果你需要完全替换基础提示词,使用第五章介绍的 Harness Profile。
2.4 流式输出与多轮对话
流式输出让用户看到智能体"正在思考"的过程,对于长时间任务至关重要:
from deepagents import create_deep_agent
agent = create_deep_agent(model="openai:gpt-5.5")
# 流式输出
for chunk in agent.stream(
{"messages": "请写一首关于春天的诗"},
config={"configurable": {"thread_id": "poem-session"}},
stream_mode="values",
):
if "messages" in chunk:
messages = chunk["messages"]
last_msg = messages[-1]
if hasattr(last_msg, "content") and last_msg.content:
print(last_msg.content, end="", flush=True)
关键参数: thread_id 是会话标识符——同一个 ID 的多次调用共享对话历史,这是实现多轮对话的基础。stream_mode="values" 每次返回完整状态,flush=True 确保输出立即显示。
2.5 异步调用
异步接口适合 FastAPI 等异步框架:
import asyncio
from deepagents import create_deep_agent
async def main():
agent = create_deep_agent(model="openai:gpt-5.5")
result = await agent.ainvoke({"messages": "你好"})
print(result["messages"][-1].content)
asyncio.run(main())
所有异步方法在同步方法名前加 a 前缀:invoke → ainvoke、stream → astream。注意后端和 checkpointer 也需要使用异步版本(如 AsyncPostgresSaver)。
第三章:核心 API — create_deep_agent 详解
create_deep_agent 是整个框架的唯一入口函数。深入理解它的每个参数和内部工作机制,是从"会用"迈向"精通"的关键。
3.1 完整签名
18 个参数初看可能让人望而生畏,但按功能分组后非常清晰:
def create_deep_agent(
# === 核心配置 ===
model: str | BaseChatModel | None = None, # 智能体的"大脑"
tools: Sequence[BaseTool | Callable | dict] | None = None, # 自定义工具
system_prompt: str | SystemMessage | None = None, # 自定义系统提示词
*,
# === 高级特性 ===
middleware: Sequence[AgentMiddleware] = (), # 额外中间件
subagents: Sequence[SubAgent | CompiledSubAgent | AsyncSubAgent] | None = None,
skills: list[str] | None = None, # 技能路径
memory: list[str] | None = None, # 记忆文件路径
permissions: list[FilesystemPermission] | None = None,
# === 基础设施 ===
backend: BackendProtocol | BackendFactory | None = None,
checkpointer: Checkpointer | None = None,
store: BaseStore | None = None,
cache: BaseCache | None = None,
# === 行为控制 ===
interrupt_on: dict[str, bool | InterruptOnConfig] | None = None,
response_format: ResponseFormat | type | dict | None = None,
# === 高级定制 ===
state_schema: type[DeepAgentState] | None = None,
context_schema: type[ContextT] | None = None,
debug: bool = False,
name: str | None = None,
) -> CompiledStateGraph
分组理解:
- 核心配置(model, tools, system_prompt):定义智能体的"大脑"和能力基础
- 高级特性(subagents, skills, memory, permissions):启用 Deep Agents 的独特功能
- 基础设施(backend, checkpointer, store, cache):配置持久化和执行环境
- 行为控制(middleware, interrupt_on, response_format):微调运行时行为
- 高级定制(state_schema, context_schema, name, debug):深度定制
3.2 内置工具体系
默认情况下,智能体拥有 9 个内置工具:
| 工具 | 类型 | 说明 | 典型场景 |
|---|---|---|---|
write_todos |
任务管理 | 创建和管理待办事项 | 复杂多步骤任务规划 |
ls |
文件操作 | 列出目录(单层,不递归) | 探索项目结构 |
read_file |
文件操作 | 分页读取(默认100行) | 查看源码和文档 |
write_file |
文件操作 | 创建新文件(不覆盖已存在) | 创建新脚本和配置 |
edit_file |
文件操作 | 精确字符串匹配编辑 | 修改现有代码 |
glob |
文件操作 | glob 模式递归查找 | 查找特定类型文件 |
grep |
文件操作 | 字面量文本搜索(非正则) | 搜索函数定义和引用 |
execute |
Shell | 沙箱中执行命令 | 运行测试和构建 |
task |
子代理 | 委托任务给子代理 | 分解复杂任务 |
关于 grep 的重要说明: 使用的是字面量文本匹配而非正则表达式。"def my_func" 会精确匹配,"def my_func.*" 不会被视为正则——这是为了避免 LLM 在正则语法上出错。
关于 execute 的可用性: 仅在实现了 SandboxBackendProtocol 的后端(如 LocalShellBackend、LangSmithSandbox)上可用。
3.3 系统提示词组装
最终系统提示词按三段式严格拼接:
USER(用户 system_prompt)—— 最前面,获得最高注意力
|
BASE 或 CUSTOM(默认或自定义基础提示词)
|
SUFFIX(HarnessProfile 尾部提示词)—— 最后面,最接近对话
两个关键不变量:
- USER 在最前面:用户的指令拥有最高优先级,无论框架添加了多少内置指令
- SUFFIX 在最后面:模型调优指导最接近对话历史,对即时行为影响最大
3.4 中间件栈完整顺序
Base Stack(基础栈——从外到内):
1. TodoListMiddleware -- 任务规划,最先执行
2. SkillsMiddleware -- 技能加载
3. FilesystemMiddleware -- 文件系统(必需,不可排除)
4. SubAgentMiddleware -- 同步子代理(有子代理时必需)
5. SummarizationMiddleware -- 对话摘要
6. PatchToolCallsMiddleware -- 修补悬空工具调用
7. AsyncSubAgentMiddleware -- 异步子代理
<-- 用户自定义 middleware 插入位置 -->
Tail Stack(尾部栈——从外到内):
8. Harness Profile extra_middleware
9. _ToolExclusionMiddleware -- 工具排除
10. AnthropicPromptCachingMiddleware
11. MemoryMiddleware -- 记忆加载
12. HumanInTheLoopMiddleware -- 人机协作(最外层防线)
设计考量: FilesystemMiddleware 在 SubAgentMiddleware 之前(子代理也需要文件系统);SummarizationMiddleware 在 PatchToolCallsMiddleware 之前(先压缩再修补);MemoryMiddleware 靠近外层(记忆注入在提示词修改完成后);HumanInTheLoopMiddleware 在最外层(所有工具调用的最后防线)。
3.5 DeepAgentState 与 DeltaChannel
class DeepAgentState(AgentState):
messages: Required[Annotated[
list[AnyMessage],
DeltaChannel(_messages_delta_reducer, snapshot_frequency=50)
]]
解决的问题: 在 LangGraph 中,每次状态更新创建检查点。不优化的话存储开销以 O(N²) 增长。DeltaChannel 将开销降到 O(N)——每 50 步做一次完整快照,快照之间只存增量。读取时从最近快照 + 增量重建完整状态。对开发者完全透明。
第四章:模型配置与 Provider Profile
4.1 三种模型指定方式
# 方式 1:字符串格式(强烈推荐——自动应用 Profile)
agent = create_deep_agent(model="openai:gpt-5.5")
# 方式 2:预初始化实例(跳过 Profile 自动应用)
from langchain.chat_models import init_chat_model
model = init_chat_model("anthropic:claude-sonnet-4-6", temperature=0.0)
agent = create_deep_agent(model=model)
# 方式 3:None(已弃用——会触发 DeprecationWarning)
agent = create_deep_agent(model=None)
为什么推荐字符串格式? 框架会自动应用 Provider Profile(优化模型构造参数)和 Harness Profile(优化运行时行为)。预初始化实例会跳过这两步。如果你需要精确控制,更好的做法是自定义 Profile 而非跳过它。
4.2 模型解析流程
用户传入 "openai:gpt-5.5"
↓
init_chat_model("openai:gpt-5.5", **provider_profile_kwargs)
↓
ProviderProfile 查找(优先级递减):
第1优先级:精确匹配模型全名 "openai:gpt-5.5"
第2优先级:精确匹配 provider "openai"(含别名匹配)
第3优先级:无匹配 → 使用默认参数
↓
返回 BaseChatModel 实例
4.3 ProviderProfile vs HarnessProfile
| 维度 | ProviderProfile | HarnessProfile |
|---|---|---|
| 作用阶段 | 模型构造(init_chat_model) |
智能体运行(create_deep_agent) |
| 控制内容 | 构造参数(temperature, max_tokens等) | 运行时行为(提示词、工具、中间件) |
| 类比 | 引擎的制造参数 | 车辆的操作手册 |
from deepagents import register_provider_profile, ProviderProfile
register_provider_profile(
"my-provider",
ProviderProfile(
init_kwargs={"temperature": 0.0, "max_tokens": 4096},
),
)
内置 Provider Profile:
openai:默认启用 Responses API(对工具调用支持更好)openrouter:强制最低 openai SDK 版本 + 应用归属 HTTP 头
4.4 OpenAI 特殊配置
# 切换回 Chat Completions API
model = init_chat_model("openai:gpt-5.5", use_responses_api=False)
# 零数据留存(ZDR)
model = init_chat_model(
"openai:gpt-5.5",
use_responses_api=True,
store=False,
include=["reasoning.encrypted_content"],
)
4.5 支持的模型提供商
- 前沿 API:OpenAI、Anthropic、Google(适合主智能体和复杂任务)
- 开源托管:Baseten、Fireworks、Together AI(适合子代理和高吞吐)
- 自托管:Ollama、vLLM、llama.cpp(适合离线运行和隐私敏感场景)
按角色选模型: 主智能体用最强模型(负责规划推理);同步子代理用中等模型(原子任务较简单);对话摘要用最轻量模型(任务简单)。
第五章:Harness Profile — 运行时行为调优
5.1 设计理念
HarnessProfile 是基于一个核心洞察设计的:不同模型有不同的"个性",应该用不同的运行时配置来匹配。Claude Sonnet 在决策前倾向仔细规划探索;GPT-5.5 倾向快速行动;Haiku 擅长高效执行原子任务。
Profile 的自动匹配: 使用字符串模型时,框架自动查找并应用匹配的 HarnessProfile。匹配逻辑与 ProviderProfile 相同——先精确匹配模型名,再回退 provider 名。
5.2 字段详解
@dataclass(frozen=True)
class HarnessProfile:
base_system_prompt: str | None = None # 完全替换 BASE 提示词
system_prompt_suffix: str | None = None # 追加到末尾(最常用!)
excluded_tools: list[str] | None = None # 排除内置工具
excluded_middleware: list[type | str] | None = None # 排除中间件
extra_middleware: list[AgentMiddleware] | None = None # 额外中间件
general_purpose_subagent: GeneralPurposeSubagentProfile | None = None
tool_description_overrides: dict[str, str] | None = None # 覆写工具描述
system_prompt_suffix 是最常用的字段。 它在提示词末尾追加内容,不破坏 BASE 结构。典型用途:添加"使用简洁的语言"、指定输出格式、设定行为约束。
base_system_prompt 是完全替换。 你需要提供完整的文件系统指南等内容。通常只在完全自定义智能体行为时使用。
5.3 注册和使用
from deepagents import register_harness_profile, HarnessProfile, GeneralPurposeSubagentProfile
register_harness_profile(
"anthropic:claude-haiku-4-5",
HarnessProfile(
system_prompt_suffix="使用简洁的回答风格。不超过3句话,除非用户要求详细说明。",
general_purpose_subagent=GeneralPurposeSubagentProfile(
description="轻量级研究助手。用于搜索和收集信息的简单任务。",
),
excluded_tools=["execute"], # Haiku 不需要 Shell
),
)
5.4 通用子代理配置
profile = HarnessProfile(
general_purpose_subagent=GeneralPurposeSubagentProfile(enabled=False),
)
何时禁用: 已有专门子代理且不想被推卸任务;希望主智能体自己处理以获得精确控制。禁用且无其他同步子代理时,task 工具不暴露。
5.5 内置 Profile
| 模型 | 设计思路 |
|---|---|
anthropic:claude-sonnet-4-6 |
全面文件指南;鼓励"先探索再行动" |
anthropic:claude-haiku-4-5 |
简化提示词;快速决策导向 |
anthropic:claude-opus-4-7 |
深度推理导向;三思而后行 |
openai:codex |
代码为中心;强调测试和 lint |
5.6 不可排除的中间件
以下中间件排除会抛 ValueError:
FilesystemMiddleware:支撑 6 个文件工具 + 权限系统SubAgentMiddleware:支撑task工具和子代理机制
第六章:内置工具体系
6.1 文件操作工具
文件操作是智能体最基本的能力。Deep Agents 提供了 6 个精心设计的文件工具。
ls — 列出目录
class LsSchema(BaseModel):
path: str # 绝对路径
只列出当前目录,不递归遍历。这是有意为之——避免大型目录产生巨大输出浪费 token。需要递归探索时用 glob。
read_file — 分页读取
class ReadFileSchema(BaseModel):
file_path: str # 绝对路径
offset: int = 0 # 起始行号(0索引)
limit: int = 100 # 默认100行
分页设计防止大文件吞噬上下文窗口。支持多模态——图片、音频、视频、PDF 返回为多模态内容块。读取超过 5000 行后自动附加环境信息(文件路径、行号范围)。
write_file — 创建新文件
class WriteFileSchema(BaseModel):
file_path: str
content: str
只能创建新文件,不能覆盖。 如果文件已存在则失败。这是安全设计——防止意外丢失代码。修改文件请用 edit_file。
edit_file — 精确匹配编辑
class EditFileSchema(BaseModel):
file_path: str # 绝对路径
old_string: str # 精确匹配文本
new_string: str # 替换文本
replace_all: bool = False
为什么不用行号? 行号在文件修改后会偏移,而精确字符串匹配不受影响。编辑前必须先 read_file 读取文件——这个约束由中间件强制执行。
glob — 模式查找
class GlobSchema(BaseModel):
pattern: str # glob 模式
path: str | None = None # 搜索根目录
支持 wcmatch 语法:**/*.py、src/**/*.ts、*.{js,ts}、**/test_*.py。
grep — 内容搜索
class GrepSchema(BaseModel):
pattern: str # 字面量文本,非正则
path: str | None = None
glob: str | None = None # 文件过滤
output_mode: Literal["files_with_matches", "content", "count"] = "files_with_matches"
三种模式:files_with_matches(默认,效率最高)、content(匹配行+上下文)、count(快速评估相关性)。
6.2 Shell 工具
class ExecuteSchema(BaseModel):
command: str
timeout: int | None = None
仅在沙箱后端可用(LocalShellBackend、LangSmithSandbox)。非沙箱后端返回错误。
使用 LocalShellBackend 时无沙箱隔离,生产环境务必配合 HITL 中间件。
6.3 write_todos — 任务管理
帮助智能体将复杂任务分解为有序步骤,标记各步骤状态(pending/in_progress/completed),在长对话中保持上下文。
6.4 task — 子代理入口
由 SubAgentMiddleware 提供。详见第九章。
第七章:Backend 后端系统
Backend 是存储抽象层,决定了智能体在哪里存储文件、如何执行命令、数据如何在会话间流转。
7.1 为什么需要后端抽象?
开发阶段你可能希望直接操作本地文件。生产环境你需要沙箱隔离。多租户场景你需要按用户隔离存储。Backend 抽象让你只需改变一个参数就在所有场景间切换,代码逻辑完全不变。
7.2 BackendProtocol
class BackendProtocol:
def ls(self, path: str) -> LsResult | list[FileInfo]: ...
def read(self, path: str) -> ReadResult: ...
def write(self, path: str, content: str | bytes) -> WriteResult: ...
def edit(self, path: str, old: str, new: str, replace_all: bool) -> EditResult: ...
def glob(self, pattern: str, path: str | None) -> GlobResult: ...
def grep(self, pattern: str, path: str | None, ...) -> GrepResult: ...
def download_files(self, paths: list[str]) -> list[FileDownloadResponse]: ...
def upload_files(self, files: list[tuple[str, bytes]]) -> list[FileUploadResponse]: ...
class SandboxBackendProtocol(BackendProtocol):
def execute(self, command: str, timeout: int | None) -> ExecuteResponse: ...
7.3 内置后端选择
| 后端 | 持久性 | Shell | 存储 | 适用场景 |
|---|---|---|---|---|
StateBackend |
线程内 | 否 | 内存状态 | 原型、测试 |
FilesystemBackend |
磁盘持久 | 否 | 本地文件 | 本地脚本 |
LocalShellBackend |
磁盘持久 | 是 | 本地文件 | 本地开发 |
CompositeBackend |
取决于路由 | 取决于路由 | 路径路由 | 混合存储 |
StoreBackend |
跨线程持久 | 否 | BaseStore | 生产记忆 |
LangSmithSandbox |
沙箱内 | 是 | 远程沙箱 | 安全执行 |
ContextHubBackend |
持久 | 否 | Hub 仓库 | Hub 管理 |
选择决策树:
- 需要 Shell?→ 沙箱隔离 →
LangSmithSandbox;本地可信 →LocalShellBackend - 需要磁盘持久?→
FilesystemBackend;不需要 →StateBackend - 需要跨线程持久?→
StoreBackend
7.4 各后端详解
StateBackend — 内存后端:
from deepagents.backends import StateBackend
agent = create_deep_agent(model="openai:gpt-5.5", backend=StateBackend())
# 通过 files 参数预加载文件
result = agent.invoke(
{"messages": "读取 /data/task.md"},
files={"/data/task.md": FileData(content="# 任务\n...", encoding="utf-8")},
)
FilesystemBackend — 本地文件:
from deepagents.backends import FilesystemBackend
agent = create_deep_agent(
model="openai:gpt-5.5",
backend=FilesystemBackend(root_dir="/path/to/project"),
)
CompositeBackend — 路由组合:
from deepagents.backends import CompositeBackend, StateBackend, StoreBackend
composite = CompositeBackend(
default=StateBackend(), # 临时工作文件
routes={"/memories/": StoreBackend()}, # 记忆持久化
)
StoreBackend — 生产持久化:
from deepagents.backends import StoreBackend
from langgraph.store.memory import InMemoryStore
store = InMemoryStore()
agent = create_deep_agent(
model="openai:gpt-5.5",
backend=StoreBackend(store=store),
store=store, # 需要是同一个实例
)
第八章:中间件体系
8.1 洋葱模型
请求方向 ——>
+------------------------------------------+
| 中间件A before(先执行) |
| +----------------------------------+ |
| | 中间件B before | |
| | +------------------------+ | |
| | | 核心(模型调用) | | |
| | +------------------------+ | |
| | 中间件B after(后执行) | |
| +----------------------------------+ |
| 中间件A after(后执行) |
+------------------------------------------+
<—— 响应方向
每层中间件可在请求和响应两个方向上处理数据。这就是为什么顺序至关重要。
8.2 生命周期钩子
| 钩子 | 调用时机 | 典型用途 |
|---|---|---|
before_agent |
智能体执行前 | 加载数据、初始化 |
after_agent |
智能体执行后 | 清理、保存结果 |
modify_request |
模型请求发送前 | 注入提示词、修改消息 |
wrap_model_call |
包装模型调用 | 日志、缓存、重试 |
before_tool_call |
工具调用前 | 权限检查、参数验证 |
after_tool_call |
工具调用后 | 结果后处理 |
after_response |
模型响应后 | 自我评估、迭代 |
8.3 自定义中间件
基础——日志中间件:
from langchain.agents.middleware.types import AgentMiddleware, ModelRequest
class LoggingMiddleware(AgentMiddleware):
def wrap_model_call(self, request: ModelRequest, handler):
messages = request.state.get("messages", [])
print(f"[日志] 消息数: {len(messages)}")
response = handler(request) # 转交给内层
if hasattr(response, 'tool_calls') and response.tool_calls:
print(f"[日志] 工具调用: {[tc['name'] for tc in response.tool_calls]}")
return response
agent = create_deep_agent(model="openai:gpt-5.5", middleware=[LoggingMiddleware()])
进阶——重试中间件:
from langchain_core.messages import ToolMessage
class RetryMiddleware(AgentMiddleware):
def __init__(self, max_retries: int = 3): self.max_retries = max_retries
def after_tool_call(self, result, *, tool_call_id, tool_name, state, runtime):
if "error" in str(result).lower():
state["messages"].append(ToolMessage(
content=f"工具调用失败: {result}\n请重试。",
tool_call_id=tool_call_id,
))
return result
handler 的关键理解: 它代表"下一个中间件 + 核心逻辑"的组合。调用 handler(request) 将请求传递给内层。你可以:修改 request 再传、修改 response 再返回、甚至不调用 handler 直接返回(短路)。
8.4 中间件排除
register_harness_profile("lightweight", HarnessProfile(
excluded_middleware=["SummarizationMiddleware", "TodoListMiddleware"],
))
短对话不需要摘要,简单任务不需要规划。但 FilesystemMiddleware 和 SubAgentMiddleware 不可排除。
第九章:子代理(Subagents)
子代理让智能体拥有"团队协作"能力。主智能体做规划和决策,子代理执行具体任务。
9.1 解决的四大问题
- 上下文窗口污染: 50 次搜索结果会填满上下文,导致"忘记"早期指令。子代理有独立上下文,只返回浓缩结果。
- 无法并行: 单智能体串行处理三个独立任务。子代理允许并行执行,总耗时缩短。
- 缺乏专业分工: "全能"智能体不如各有专长的代理。研究代理有搜索工具,编码代理有执行工具。
- Token 成本: 主智能体需要强模型,子任务只需要便宜模型(Haiku 价格约为 Sonnet 的 1/10)。
9.2 SubAgent 声明式定义
from deepagents import create_deep_agent, SubAgent, FilesystemPermission
researcher: SubAgent = {
"name": "researcher",
# description 是最重要的字段——主智能体据此决定何时委托
"description": (
"研究特定主题并返回结构化发现。"
"用于需要深度搜索和分析的任务。"
"不要用于简单问答——主智能体直接回答即可。"
),
"system_prompt": "你是研究助手。搜索信息后返回结构化结果。",
"model": "anthropic:claude-haiku-4-5",
"tools": [web_search],
"skills": ["/skills/research/"],
"permissions": [FilesystemPermission(operations=["read"], paths=["/research/**"], mode="allow")],
}
agent = create_deep_agent(model="openai:gpt-5.5", subagents=[researcher])
description 编写建议: 这是最重要的字段。明确功能范围、给出正面示例(何时委托)、给出反面示例(何时不委托)、100-300 字。
9.3 状态传递与隔离
传入: 主智能体最近对话上下文 + 任务描述
传出: 仅最后一条 AI 消息文本(+ 结构化输出如果有 response_format)
排除: messages(完整历史)、todos、structured_response、_ 开头字段
排除完整历史意味着中间搜索和思考不进入主智能体上下文——这正是上下文隔离的核心价值。
9.4 最佳实践
- 3-5 个子代理通常足够,每个有明确且不重叠的职责
- 主智能体综合结果——子代理产原材料,主智能体综合后交付
- 独立任务并行调用——三个研究任务用三次
task调用 - 子代理用便宜模型——Haiku 约为 Sonnet 价格的 1/10
第十章:异步子代理(Async Subagents)
异步子代理实现"发射并遗忘"——启动任务后立即继续其他工作。
10.1 同步 vs 异步
| 特性 | 同步 | 异步 |
|---|---|---|
| 执行方式 | 阻塞等待 | 立即返回 task_id |
| 结果获取 | 调用返回时 | 主动查询状态 |
| 适用场景 | 短任务(秒~分钟) | 长任务(分钟~小时) |
| 运行位置 | 同进程 | 远程服务器 |
10.2 定义
from deepagents import create_deep_agent, AsyncSubAgent
processor: AsyncSubAgent = {
"name": "data-processor",
"description": "在远程处理大型数据集。",
"graph_id": "data-processing-graph",
"url": "https://my-server.example.com",
"headers": {"Authorization": "Bearer xxx"},
}
可用工具: start_async_task、check_async_task、update_async_task、cancel_async_task、list_async_tasks
10.3 典型工作流
start_async_task → task_id → 继续工作 → check_async_task → 完成/调整
第十一章:Skills 技能系统
Skills 将可复用行为封装为文件,智能体按需加载。解决了"每次重复粘贴指令"的问题。
11.1 价值
没有 Skills 时,每次创建代码审查智能体都要在提示词中粘贴完整审查清单。有了 Skills,写一次 SKILL.md,通过路径引用。团队可以维护共享技能库。
11.2 Skill 结构
/skills/user/web-research/
+-- SKILL.md # 必需:YAML 元数据 + Markdown 指令
+-- helper.py # 可选:辅助文件
---
name: web-research
description: 结构化网络研究方法论
allowed-tools: web_search read_file
---
# Web Research Skill
## 何时使用
- 用户要求研究主题
- 需要收集综合多个信息源
## 工作流程
1. 明确研究目标
2. 使用 web_search 初步搜索
3. 进行 2-3 次针对性搜索
4. 综合发现,标注来源
5. 返回结构化结果
YAML 字段: name(必需,1-64字符,匹配目录名)、description(必需,1-1024字符)、license(可选)、allowed-tools(可选,限制可用工具)、metadata(可选,键值对)
11.3 使用
agent = create_deep_agent(
model="openai:gpt-5.5",
skills=["/skills/user/", "/skills/project/"], # 后加载覆盖先加载
backend=FilesystemBackend(root_dir="/my/project"),
)
层叠: 多个来源按顺序加载,后加载的同名技能覆盖先加载的(last one wins)。基础层定义通用技能,项目层覆盖定制。
第十二章:Memory 记忆系统
12.1 设计理念
传统对话中智能体每次启动都是"一张白纸"。Memory 让智能体访问预定义知识库——项目规范、编码风格、架构说明等。
Memory 不是"学到的记忆"。 不会自动学习。更新需要明确写入操作。这是有意设计——自动记忆可能导致噪声积累。
12.2 AGENTS.md
# 项目概述
电商后端服务,FastAPI + SQLAlchemy。
## 构建/测试
- 构建:make build
- 测试:make test
## 代码风格
- Google 风格 docstring
- 行宽 120 字符
HTML 注释在注入提示词前被自动剥离。
12.3 使用
agent = create_deep_agent(
model="openai:gpt-5.5",
memory=["./AGENTS.md", "~/.deepagents/AGENTS.md"],
backend=FilesystemBackend(root_dir="/"),
)
多来源按顺序拼接,文件不存在时静默跳过。内容注入系统提示词的 <agent_memory> 标签。
12.4 更新指导
中间件自动注入:何时更新(用户明确要求、提供反馈)、何时不更新(临时信息、简单问答)、安全规则(不存储密钥)、信任验证(记忆可能过时)。
第十三章:文件系统权限与安全
13.1 安全模型
Deep Agents 采用"信任 LLM"模型,但有重要前提:在工具/沙箱层面强制执行边界,而非期望模型自我约束。
13.2 FilesystemPermission
from deepagents import FilesystemPermission
permissions = [
FilesystemPermission(operations=["read"], paths=["/project/**"], mode="allow"),
FilesystemPermission(operations=["write"], paths=["/secrets/**"], mode="deny"),
FilesystemPermission(operations=["write"], paths=["/production/**"], mode="interrupt"),
]
三种模式: allow(允许)、deny(拒绝+返回错误)、interrupt(暂停等待审批,自动启用 HITL)
评估规则: 按声明顺序评估,第一个匹配生效。路径以 / 开头,不支持 .. 和 ~。
13.3 工具与操作映射
ls、read_file、glob、grep → read;write_file、edit_file → write
13.4 安全最佳实践
- 在工具/沙箱层面执行边界
- 用
permissions限制访问范围 - 用 HITL 审批敏感操作
- 在隔离环境运行(Docker、沙箱)
- 永远不暴露密钥给智能体
第十四章:Human-in-the-Loop 人机协作
14.1 基本配置
from deepagents import create_deep_agent
agent = create_deep_agent(
model="openai:gpt-5.5",
interrupt_on={
"write_file": True, # 写文件前审批
"edit_file": True, # 编辑文件前审批
"execute": True, # 执行命令前审批
},
checkpointer=checkpointer, # HITL 需要 checkpointer
)
14.2 InterruptOnConfig
from langchain.agents.middleware import InterruptOnConfig
agent = create_deep_agent(
model="openai:gpt-5.5",
interrupt_on={
"execute": InterruptOnConfig(
description="Shell 命令执行审批",
approve_label="允许执行",
reject_label="拒绝执行",
),
},
)
14.3 权限驱动中断
FilesystemPermission(mode="interrupt") 自动生成 interrupt_on 配置。
14.4 审批流程
智能体请求执行工具 → HITL 拦截 → 用户审批/编辑/拒绝 → 继续/终止
第十五章:上下文管理与对话压缩
15.1 SummarizationMiddleware
当 token 使用超过阈值时自动压缩对话:
from deepagents.middleware.summarization import SummarizationMiddleware
from deepagents.backends import FilesystemBackend
summ = SummarizationMiddleware(
model="openai:gpt-5.5-mini",
backend=FilesystemBackend(root_dir="/data"),
trigger=("fraction", 0.85), # 窗口 85% 时触发
keep=("fraction", 0.10), # 保留最近 10%
)
agent = create_deep_agent(model="openai:gpt-5.5", middleware=[summ])
15.2 触发条件
trigger=("tokens", 8000) # 按 token 数
trigger=("messages", 50) # 按消息数
trigger=("fraction", 0.85) # 按窗口比例
15.3 大参数截断
在完整摘要前先截断旧消息的大工具参数:
from deepagents.middleware.summarization import TruncateArgsSettings
summ = SummarizationMiddleware(
model="openai:gpt-5.5-mini",
trigger=("fraction", 0.85),
keep=("fraction", 0.10),
truncate_args=TruncateArgsSettings(
trigger=("fraction", 0.60), # 60% 时开始截断
keep=("fraction", 0.20), # 保留最近 20% 不截断
max_length=500, # 参数最大长度
),
)
第十六章:Rubric 中间件 — 自我评估迭代
16.1 概念
RubricMiddleware 让你声明"完成标准"。智能体完成前由独立评审子代理评估,不满足则继续迭代。
16.2 工作流程
智能体完成任务 → 评审子代理评估(对照 rubric)
↓
satisfied → 返回结果
needs_revision → 注入反馈,继续迭代
failed/max_iterations → 终止
16.3 使用
from deepagents import create_deep_agent, RubricMiddleware
rubric = RubricMiddleware(
rubric="""
- 代码通过所有测试
- 符合项目风格指南
- 包含错误处理
- 不引入新 lint 警告
""",
model="openai:gpt-5.5-mini",
max_iterations=3,
)
agent = create_deep_agent(model="openai:gpt-5.5", middleware=[rubric])
第十七章:流式输出与状态管理
17.1 流式模式
# stream_mode="values" -- 每步返回完整状态
for chunk in agent.stream({"messages": "你好"}, stream_mode="values"):
print(chunk["messages"][-1].content)
# stream_mode="updates" -- 仅增量更新
for chunk in agent.stream({"messages": "你好"}, stream_mode="updates"):
print(chunk)
17.2 Checkpointer — 会话持久化
from langgraph.checkpoint.memory import MemorySaver
agent = create_deep_agent(
model="openai:gpt-5.5",
checkpointer=MemorySaver(),
)
# 第一次对话
agent.invoke({"messages": "我叫张三"}, config={"configurable": {"thread_id": "user-1"}})
# 同一会话继续
agent.invoke({"messages": "我叫什么名字?"}, config={"configurable": {"thread_id": "user-1"}})
17.3 Store — 跨会话存储
from langgraph.store.memory import InMemoryStore
agent = create_deep_agent(model="openai:gpt-5.5", store=InMemoryStore())
第十八章:实战案例解析
18.1 内容创作智能体
展示 memory、skills、subagents 的综合使用:
content-builder-agent/
+-- AGENTS.md # 品牌声音和写作标准
+-- content_writer.py # 主程序
+-- subagents.yaml # 子代理配置
+-- skills/
+-- blog-post/SKILL.md
+-- social-media/SKILL.md
from deepagents import create_deep_agent
from deepagents.backends import FilesystemBackend
agent = create_deep_agent(
memory=["./AGENTS.md"],
skills=["./skills/"],
tools=[generate_cover, generate_social_image],
subagents=load_subagents("subagents.yaml"),
backend=FilesystemBackend(root_dir=EXAMPLE_DIR),
)
设计模式: Memory 提供品牌指导、Skills 提供结构化流程、Subagent 隔离研究上下文、自定义工具扩展能力。
18.2 深度研究智能体
agent = create_deep_agent(
model=init_chat_model("anthropic:claude-sonnet-4-5", temperature=0.0),
tools=[tavily_search, think_tool],
system_prompt=INSTRUCTIONS,
subagents=[{
"name": "research-agent",
"description": "研究主题并返回发现。每次只给一个主题。",
"system_prompt": RESEARCHER_INSTRUCTIONS,
"tools": [tavily_search, think_tool],
}],
)
设计模式: 主智能体做编排分解,子代理执行具体研究。多个研究子代理可并行运行。
18.3 编码智能体
# Coding Agent
## 工作流
### 阶段1:规划 → 探索仓库 → 定位文件 → write_todos
### 阶段2:实施 → 逐步修改 → 运行测试
### 阶段3:审查 → 完整测试 → Linter → 端到端审查
### 阶段4:交付 → 提交 → 总结
第十九章:生产部署指南
19.1 部署架构
用户请求 → LangGraph Platform → Deep Agent → Backend(沙箱/远程)→ LangSmith(追踪监控)
19.2 CLI 部署
deepagents init my-agent
deepagents dev # 本地开发
deepagents deploy # 部署到 LangGraph Platform
19.3 生产配置
from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver
from langgraph.store.postgres.aio import AsyncPostgresStore
agent = create_deep_agent(
model="openai:gpt-5.5",
checkpointer=AsyncPostgresSaver(conn_string="postgresql://..."),
store=AsyncPostgresStore(conn_string="postgresql://..."),
)
19.4 LangSmith 集成
os.environ["LANGSMITH_API_KEY"] = "your-key"
os.environ["LANGSMITH_TRACING"] = "true"
os.environ["LANGSMITH_PROJECT"] = "my-agent"
19.5 安全最佳实践
- 生产用
LangSmithSandbox或自定义沙箱 - 配置
FilesystemPermission限制访问 - 启用 HITL 审批敏感操作
- 不暴露密钥给智能体
- 配置命令超时和输出截断
19.6 性能优化
- 提示缓存:Anthropic 模型启用
add_cache_control=True - 对话压缩:配置
SummarizationMiddleware - 子代理并行:独立任务并行委托
- DeltaChannel:默认启用,O(N²)→O(N)
- 模型选择:子代理用便宜模型
第二十章:架构全景与扩展指南
20.1 完整架构图
+----------------------------------------------------+
| create_deep_agent |
| |
| +-----------+ +--------------+ +----------+ |
| | Model | | System Prompt| | Tools | |
| | (resolved)| | (assembled) | | (merged) | |
| +-----+-----+ +------+------+ +-----+----+ |
| | | | |
| +-----+---------------+---------------+------+ |
| | Middleware Stack(12层) | |
| +--------------------------------------------+ |
| |
| +--------------------------------------------+ |
| | Backend | |
| +--------------------------------------------+ |
| |
| +--------------------------------------------+ |
| | LangGraph Runtime | |
| | Checkpointer / Store / Cache / Streaming | |
| +--------------------------------------------+ |
+----------------------------------------------------+
20.2 扩展点
| 扩展点 | 方式 |
|---|---|
| 自定义工具 | tools 参数,添加 @tool 函数 |
| 自定义中间件 | 实现 AgentMiddleware 接口 |
| 自定义后端 | 实现 BackendProtocol 接口 |
| 自定义沙箱 | 继承 BaseSandbox |
| Provider Profile | register_provider_profile() |
| Harness Profile | register_harness_profile() |
| 自定义子代理 | SubAgent / CompiledSubAgent |
| 自定义技能 | SKILL.md 文件 |
| MCP 服务器 | MCP 协议工具集成 |
20.3 自定义 Backend 示例
from deepagents.backends.protocol import BackendProtocol, ReadResult, WriteResult
class RemoteAPIBackend(BackendProtocol):
def __init__(self, api_url: str, api_key: str): ...
def ls(self, path: str): ...
def read(self, path: str): ...
def write(self, path: str, content: str | bytes): ...
def edit(self, path: str, old: str, new: str, replace_all: bool): ...
def glob(self, pattern: str, path: str | None): ...
def grep(self, pattern: str, path: str | None, ...): ...
def download_files(self, paths: list[str]): ...
def upload_files(self, files: list[tuple[str, bytes]]): ...
20.4 第三方插件
通过 importlib.metadata 入口点加载:
[project.entry-points."deepagents.provider_profiles"]
my_profile = "my_package:register_my_provider"
[project.entry-points."deepagents.harness_profiles"]
my_harness = "my_package:register_my_harness"
20.5 生态关系
| 组件 | 关系 |
|---|---|
| LangGraph | 底层运行时,Deep Agents 构建其上 |
| LangChain | 提供模型抽象、工具框架 |
| LangSmith | 追踪、评估、监控、沙箱 |
| deepagents.js | JavaScript 版本 |
附录
A. 公共 API 速查
from deepagents import (
create_deep_agent, DeepAgentState,
SubAgent, CompiledSubAgent, AsyncSubAgent,
SubAgentMiddleware, AsyncSubAgentMiddleware,
FilesystemMiddleware, FilesystemPermission,
MemoryMiddleware, RubricMiddleware,
HarnessProfile, HarnessProfileConfig,
GeneralPurposeSubagentProfile,
ProviderProfile,
register_harness_profile, register_provider_profile,
__version__,
)
B. 后端速查
from deepagents.backends import (
StateBackend, FilesystemBackend, LocalShellBackend,
CompositeBackend, StoreBackend,
LangSmithSandbox, ContextHubBackend,
BackendProtocol,
)
C. 常用模型字符串
| 提供商 | 格式 |
|---|---|
| OpenAI | openai:gpt-5.5 |
| Anthropic | anthropic:claude-sonnet-4-6 |
google_genai:gemini-2.5-pro |
|
| OpenRouter | openrouter:anthropic/claude-sonnet-4-6 |
D. 环境变量
| 变量 | 说明 |
|---|---|
OPENAI_API_KEY |
OpenAI API 密钥 |
ANTHROPIC_API_KEY |
Anthropic API 密钥 |
LANGSMITH_API_KEY |
LangSmith API 密钥 |
LANGGRAPH_API_KEY |
LangGraph Platform API 密钥 |
LANGSMITH_TRACING |
启用追踪(true) |
TAVILY_API_KEY |
Tavily 搜索 API 密钥 |
E. 学习路径建议
入门(1-2天):第二章(快速上手)→ 第三章(API详解)→ 第六章(工具)
进阶(3-5天):第七章(Backend)→ 第九章(子代理)→ 第十一/十二章(Skills/Memory)
高级(5-7天):第八章(中间件)→ 第十三/十四章(安全/HITL)→ 第十五章(压缩)
专家(持续深入):第四/五章(Profile)→ 第十六章(Rubric)→ 第十九/二十章(部署/架构)
参考资源:
评论区