第 29 章
Code 中的 Subagent
用 AGENTS.md 文件定义自定义子代理,让 Deep Agents Code 委派专门任务
从"SDK 编码"到"声明式配置"的轻量之路为什么需要它
你已经知道子代理好用——但在 Code 模式下怎么定义它们?
SDK 方式的局限
- 必须写 JavaScript/TypeScript 代码来定义子代理
- 每次修改提示词都要改代码、重新部署
- 团队中非开发人员无法参与调优提示词
- 配置和逻辑混在一起,难以单独审查
AGENTS.md 的解法
- 用 Markdown 文件声明式定义子代理
- 修改提示词只需编辑文本文件,无需动代码
- 团队中任何人都能审阅和调整提示词
- YAML frontmatter + Markdown 正文,结构清晰
核心价值:AGENTS.md 让子代理的定义从"写代码"变成"写文档"。你只需要一个 Markdown 文件就能声明子代理的名称、描述、模型和系统提示词——Deep Agents Code 自动加载并注册。
文件位置
子代理的定义文件放在哪里?项目级和用户级两条路径
每个子代理位于自己的文件夹中,包含一个 AGENTS.md 文件:
# 项目级——随项目代码一起版本管理
.deepagents/agents/{subagent-name}/AGENTS.md
# 用户级——个人专属子代理,跨项目可用
~/.deepagents/{agent}/agents/{subagent-name}/AGENTS.md
项目级(推荐)
- 放在
.deepagents/agents/下 - 随项目提交到 Git,团队共享
- 适合与项目业务强相关的子代理
- 优先级高于用户级同名子代理
用户级
- 放在
~/.deepagents/{agent}/agents/下 - 个人专属,不随项目走
- 适合个人偏好类子代理
- 被同名项目级子代理覆盖
优先级规则:项目级 subagent 会覆盖同名的用户级 subagent。如果你在项目中定义了一个名为
researcher 的子代理,它会取代你用户目录下同名的那个。
文件格式
YAML frontmatter 声明元数据,Markdown 正文作为系统提示词
一个完整的 AGENTS.md 文件由两部分组成:
---
name: researcher # 子代理的唯一标识符
description: Research topics on the web before writing content # 主代理据此决定何时委派
model: anthropic:claude-haiku-4-5-20251001 # 可选:指定小模型以降低成本
---
You are a research assistant with access to web search.
## Your Process
1. Search for relevant information
2. Summarize findings clearly
Frontmatter(必填)
name— 子代理的唯一标识符description— 功能描述,主代理据此决定何时委派model— 可选,覆盖主代理模型
Markdown 正文
- 正文成为子代理的
system_prompt - 支持完整的 Markdown 格式
- 可包含工作流程、输出格式等指令
与 SDK SubAgent 字段对应:
name 和 description 对应字典规范中的必填字段;Markdown 正文对应 system_prompt;model 在 AGENTS.md frontmatter 中暴露(沿用 SDK 的可选字段)。
模型覆盖
用 model 字段为子代理指定不同的模型——省成本、提速度
model 是 AGENTS.md 特有的可选字段,使用 provider:model-name 格式:
---
name: general-purpose # 与内置子代理同名,覆盖它
description: General-purpose agent for research and multi-step tasks
model: anthropic:claude-haiku-4-5-20251001 # 使用 Haiku 降低成本
---
You are a general-purpose assistant.
Complete the task efficiently and return a concise summary.
不设 model(继承主代理)
- 子代理使用与主代理相同的模型
- 适合需要强大推理能力的任务
- 成本与主代理调用一致
设置 model(覆盖主代理)
- 子代理使用指定的小模型
- 适合简单、重复性的委派任务
- 大幅降低 token 成本
高性价比策略:主代理用强模型做高层协调,简单委派任务路由到便宜的小模型。一行
model 配置就能实现成本和性能的最佳平衡。
覆盖内置代理
用 AGENTS.md 替换默认的 general-purpose 子代理——零代码实现
Deep Agents Code 内置了一个 general-purpose 子代理。你可以通过定义同名子代理来覆盖它:
---
name: general-purpose # 与内置子代理同名,实现覆盖
description: General-purpose agent for research and multi-step tasks
model: anthropic:claude-haiku-4-5-20251001 # 指定便宜的小模型
---
You are a general-purpose assistant.
Complete the task efficiently and return a concise summary.
覆盖效果
- 所有原本路由到内置 general-purpose 的任务自动转向你的版本
- 使用指定的小模型执行,降低成本
- 自定义提示词让输出更符合项目需求
典型场景
- 主代理用 Claude Opus 做规划
- 委派给 general-purpose 时走 Haiku
- 日常任务成本降低 80%+
- 关键决策仍由强模型把关
如何生效:将文件放在
.deepagents/agents/general-purpose/AGENTS.md,Deep Agents Code 启动时自动加载并替换内置版本。
当前限制
AGENTS.md 能做什么、不能做什么——了解边界才能用好它
AGENTS.md 支持的字段
name— 子代理名称(必填)description— 功能描述(必填)model— 模型覆盖(可选)- Markdown 正文 — 系统提示词
暂不支持的字段
tools— 工具配置middleware— 中间件interrupt_on— 中断配置skills— 技能加载response_format— 结构化输出
AGENTS.md 方式
- 适合快速定义子代理
- 自动继承主代理的工具
- 无法精细控制工具和中间件
- 声明式、零代码
SDK 方式
- 适合完全控制子代理行为
- 可自定义工具、中间件、技能等
- 需要编写和部署代码
- 编程式、全功能
重要提示:异步子代理目前在 Deep Agents Code 中尚不可用。通过
AGENTS.md 定义的自定义子代理会继承主代理的工具——无法通过 frontmatter 限制或扩展工具集。如需完全控制,请直接使用 SDK。
实战演练
从零创建一个项目级子代理——三步搞定
1. 创建目录
在项目中新建子代理文件夹
2. 编写 AGENTS.md
填写 frontmatter 和提示词
3. 启动验证
运行 Code 代理,确认加载
# 第一步:创建子代理目录(目录名即子代理标识)
mkdir -p .deepagents/agents/researcher
# 第二步:创建 AGENTS.md 文件(YAML frontmatter + Markdown 正文)
cat > .deepagents/agents/researcher/AGENTS.md << 'EOF'
---
name: researcher
description: >
Performs in-depth web research on technical topics.
Use when you need comprehensive information requiring
multiple searches and source verification.
model: anthropic:claude-haiku-4-5-20251001
---
You are a meticulous research assistant with access to web search tools.
## Your Workflow
1. Decompose the research question into searchable queries
2. Execute searches systematically
3. Cross-reference findings across sources
4. Synthesize a comprehensive but concise summary
## Output Format
- Executive Summary (2-3 sentences)
- Key Findings (bullet points with sources)
- Confidence Level (high/medium/low)
- Recommended Next Steps
Keep your response under 500 words to maintain context efficiency.
EOF
# 第三步:提交到 Git,让团队成员也能使用该子代理
git add .deepagents/agents/researcher/AGENTS.md
git commit -m "feat: add researcher subagent"
验证方式:启动 Deep Agents Code 后,向主代理提问一个需要调研的问题。如果主代理自动将任务委派给
researcher 子代理,说明配置生效。你也可以检查日志中的 lc_agent_name 元数据来确认。
多代理组合
定义多个子代理,各司其职——完整的项目级配置示例
.deepagents/agents/
├── researcher/
│ └── AGENTS.md # 深度调研,用便宜模型
├── code-reviewer/
│ └── AGENTS.md # 代码审查,用强模型
├── translator/
│ └── AGENTS.md # 文档翻译,用便宜模型
└── general-purpose/
└── AGENTS.md # 覆盖内置通用代理
# .deepagents/agents/code-reviewer/AGENTS.md
---
name: code-reviewer # 子代理名称
description: >
Reviews code changes for bugs, security issues,
and best practices. Use for PR reviews and code audits.
model: anthropic:claude-opus-4-7 # 代码审查需要强推理能力,用 Opus
---
You are a senior code reviewer. Focus on:
1. Correctness and edge cases
2. Security vulnerabilities
3. Performance implications
4. Code style and maintainability
Rate each finding as critical/warning/info.
Provide specific fix suggestions.
模型分配策略
- researcher → Haiku(低成本、多搜索)
- code-reviewer → Opus(高推理、深分析)
- translator → Haiku(语言任务、低成本)
- general-purpose → Haiku(日常委派)
提示词设计要点
- 明确工作流程步骤
- 指定输出格式和长度限制
- 描述要具体到何时使用
- 控制输出长度以节省上下文
常见问题
子代理没加载?没被调用?模型没生效?逐个排查
子代理未被加载
- 检查文件路径是否正确:
.deepagents/agents/{name}/AGENTS.md - 确认文件名是
AGENTS.md(不是agent.md) - 确认 frontmatter 格式正确,
name和description必填
子代理未被调用
description太模糊,主代理不知何时委派- 在主代理提示词中明确指示委派策略
- 确保描述中包含具体的触发条件
模型覆盖未生效
- 检查
model格式:provider:model-name - 确认 provider 拼写正确(如
anthropic而非Anthropic) - 确认模型名称拼写正确且 API 可用
YAML 解析错误
- 确保 frontmatter 用
---正确包裹 - 多行描述用
>或|折叠 - 检查是否有特殊字符未转义
调试技巧:在 LangSmith 中查看
lc_agent_name 元数据,确认子代理是否被正确加载和调用。如果元数据中没有出现你定义的子代理名称,说明配置文件未被识别。
本章回顾
AGENTS.md 是 Deep Agents Code 中定义子代理的声明式方案
你学到了什么
- 用
AGENTS.md文件声明式定义子代理——零代码 - 项目级优先于用户级的加载规则
model字段实现高性价比模型分配- 覆盖内置
general-purpose子代理的方法 - 当前限制:不支持 tools、middleware 等高级配置
- 需要完全控制时,回退到 SDK 方式
后续章节预告
- Code Providers:模型提供商的配置和切换
- Code Configuration:Code 模式的全局配置项
- Code MCP Tools:集成外部工具到 Code 代理
- Code Data Locations:所有配置文件的路径规范
核心结论:AGENTS.md 是"够用就好"的哲学体现。对于大多数场景——定义名称、描述、提示词和模型——它已经足够。当你需要精细控制工具、中间件或技能时,再升级到 SDK 方式。两种方式可以共存,按需选择。
延伸阅读
继续本课程
- 下一章:Code Providers -- 模型提供商配置
- 第 10 章:子代理(Subagents) -- SDK 方式完整参考
官方文档
- Deep Agents Code Subagents -- 官方 API 参考
- Subagent 规范 -- SubAgent 字典完整规范
- GitHub 仓库 -- 源码和示例
相关概念
- Code Data Locations -- 所有文件路径规范
- 第 15 章:技能系统 -- 为子代理加载技能