为什么使用子智能体?
核心目的:为什么用子智能体?
简单说,解决「上下文膨胀」问题
- 当主 AI(主智能体)调用工具(比如联网搜索、读取大文件、查数据库)时,工具会返回海量中间结果,大量日志、步骤、数据会直接占满主智能体的上下文窗口;
- 子智能体相当于独立干活的 “打工人”:复杂的工具调用、中间步骤全部交给它处理,主智能体只接收最终精简结果,不用管繁琐的几十步工具调用,避免主 AI 被冗余信息干扰、内存过载。
适合用子智能体的 4 种场景
- 多步骤复杂任务:步骤太多,会让主智能体的上下文混乱、逻辑出错,拆分给子智能体分步执行;
- 垂直专业领域:比如代码、医疗、金融,需要专属指令 / 专用工具,单独给子智能体定制;
- 需要不同模型能力:比如一个任务既要写文案、又要分析数据、还要画图,不同子智能体用不同能力的模型;
- 主智能体只做统筹:主智能体负责整体规划、调度,子智能体负责落地干活,主 AI 专注高级决策。
不适合用子智能体的 3 种场景
- 简单单步任务:一句话就能完成,拆分出子智能体纯属多此一举;
- 需要保留中间上下文:必须看到完整执行过程、中间步骤不能省略(比如调试、复盘),子智能体屏蔽了中间过程,就不适用;
- 成本大于收益:搭建、调用子智能体本身有算力、时间成本,简单任务用它得不偿失。
简单总结:子智能体就是给主 AI 减负,专门处理脏活累活,适合复杂、多步骤、专业化的任务,简单任务千万别用。
使用SubAgent
示例代码
1 | import os |
调用逻辑:完整任务链路
- 用户提问 → 主智能体接收;
- 主智能体识别是深度调研任务,自动下发给
research-agent; - 子智能体调用
internet_search工具,完成多轮搜索、信息整理; - 子智能体返回精简最终结论给主智能体;
- 主智能体整合结果,输出最终答案。
使用CompiledSubAgent
前面讲的普通 SubAgent 是简单配置式子智能体,而 CompiledSubAgent 是编译型 / 自定义可运行子智能体:
你可以用其他框架(比如 LangChain)提前完整开发一个独立智能体(带复杂工作流、工具链、决策逻辑),再把它包装成子智能体,接入主智能体的调度体系。
简单说:独立智能体既能单独运行,也能作为子智能体帮主智能体干活,实现跨框架、复杂能力复用。
示例代码
1 | from deepagents import create_deep_agent, CompiledSubAgent |
主智能体:用 Claude,负责整体统筹、联网搜索、任务规划
子智能体:独立的数据分析智能体,专门处理复杂数据计算、分析、建模
主智能体遇到数据分析任务,自动调度 data-analyzer 子智能体处理,隔离复杂内部逻辑,避免主智能体上下文膨胀
普通 SubAgent VS CompiledSubAgent(关键区别)
| 类型 | 实现方式 | 能力 | 适用场景 |
|---|---|---|---|
| 普通 SubAgent | 字典配置(name/prompt/tools) | 简单、轻量化,适合单工具、简单任务 | 搜索、文件读取等简单工具调用 |
| CompiledSubAgent | 外部完整智能体包装(LangChain 等) | 可包含复杂流程图、多轮决策、复杂工具链 | 数据分析、代码执行、复杂业务流程等重度任务 |
核心设计思想总结
- 解决复杂子智能体开发问题:简单子智能体用配置,复杂智能体用外部框架完整开发,再接入;
- 跨框架兼容:LangChain、LlamaIndex 等写的 Agent 都能包装成子智能体,接入 DeepAgents;
- 隔离上下文:复杂数据分析的内部多轮调用全部隔离在子智能体内部,主智能体只接收最终结果;
- 复用性强:独立智能体可单兵作战单独运行,也可团队协作作为子智能体。
最佳实践
核心原则
主智能体依靠子智能体的 description 决定调用对象,描述越具体,调度越精准;越笼统,越容易调度出错。
| 类别 | 示例文本 | 优点 / 问题分析 | 通用优化公式 |
|---|---|---|---|
| ✅ 好的描述(推荐) | 分析金融数据并生成带有置信评分的投资洞察 | 信息完整: 1. 明确领域:金融数据 2. 明确动作:分析 3. 明确输出格式:带置信评分 4. 明确最终产出:投资洞察主智能体可精准匹配任务场景 |
领域 + 核心动作 + 输出格式 + 最终用途 |
| ❌ 差的描述(不推荐) | 进行金融数据分析 | 过于笼统: 1. 无边界,未说明输出形式 2. 主智能体无法区分简单统计 / 深度投资分析 3. 多子智能体场景易职责冲突 |
缺少输出、用途约束,调度稳定性差 |
保持系统提示详细
这是子智能体系统提示词(system_prompt)的最佳实践:
必须写得详细、可执行,明确告诉子智能体:怎么用工具、怎么处理信息、输出格式、字数约束,以此保证输出规范、精简,避免上下文膨胀。
示例代码
1 | research_subagent = { |
整体结构
| 配置项 | 内容 & 作用 |
|---|---|
name |
research-agent:子智能体名称 |
description |
使用网络搜索进行深入研究并综合研究结果:给主智能体看的调用说明(遵循上一张图 “清晰描述” 的最佳实践) |
system_prompt |
核心!给子智能体自己看的执行手册,包含:职责步骤、工具用法、输出格式、字数限制 |
tools |
[internet_search]:绑定搜索工具 |
system_prompt 详细设计拆解(表格)
| 模块 | 内容 | 设计目的(对应前面理论) |
|---|---|---|
| 角色定位 | 你是一位严谨的研究员 | 明确子智能体身份,统一行为风格 |
| 执行步骤(工具使用规范) | 1. 拆分搜索关键词2. 调用internet_search检索3. 综合信息生成摘要4. 引用来源 + 链接 |
强制子智能体规范调用工具,避免无效搜索、冗余调用,减少上下文垃圾信息 |
| 输出格式约束 | - 2–3 段摘要- 要点列表- 来源 URL | 统一输出结构,只返回最终整理结果,屏蔽中间搜索过程,防止主智能体上下文膨胀 |
| 字数约束 | 控制在 500 字以内 | 严格精简输出,进一步降低 token 消耗,保持上下文清爽 |
好坏对比(结合前面所有最佳实践
| 写法 | 示例 | 问题 / 优势 |
|---|---|---|
| ❌ 差写法(简略) | system_prompt: "你是研究员,帮我搜索信息" |
无步骤、无格式、无字数限制输出杂乱、冗长,撑爆上下文 |
| ✅ 优写法(本图规范) | 明确步骤、工具用法、输出格式、字数约束 | 输出结构化、精简、规范,完美解决上下文膨胀问题 |
核心总结(串联所有最佳实践)
- description:写给主智能体,清晰具体,让主智能体知道什么时候调用;
- system_prompt:写给子智能体,详细规范,约束工具调用、输出格式、字数;
- 最终目的:子智能体只输出精简最终结果,隔离所有中间冗余信息,彻底解决上下文膨胀。
最小工具集
核心规则:只给子智能体提供必需工具,提升专注度与安全性
正确写法
1 | # ✅ 好:专注的工具集 |
错误写法
1 | # ❌ 不好:工具过多 |
对比说明
| 类型 | 核心说明 |
|---|---|
| 正确 | 工具仅保留邮件发送、邮箱校验,职责专一,无越权风险 |
| 错误 | 混入搜索、数据库、文件上传工具,冗余且存在安全隐患 |
根据任务选择模型
1 | subagents = [ |
核心原则
为不同子智能体匹配擅长对应任务的大模型,发挥各模型专属优势,这是子智能体的最佳实践之一。
两个子智能体拆解
合同审查子智能体(contract‑reviewer)
任务:审查长文本法律合同、文档
选用模型:
claude‑sonnet‑4‑5‑20250929原因:Claude 拥有超大上下文窗口,擅长读取、理解超长文档、法律条文
金融分析子智能体(financial‑analyst)
- 任务:股票价格、基本面、数值类金融数据分析
- 选用模型:
openai:gpt‑5 - 原因:GPT 系列数值计算、逻辑分析能力更强,适合金融量化、数据研判
结合前面所有最佳实践验证
- description:描述精准,主智能体可精准调度
- 最小工具集:每个子智能体仅挂载对应领域工具,无冗余
- 模型按需分配:不强制统一模型,专业任务匹配专业模型
- system_prompt:配置专属角色提示词,规范行为
核心收益
性能更强:每个垂直任务使用最优模型,结果更精准
成本可控:不用统一使用最强最贵的模型,按需分配节省算力
分工清晰:子智能体能力边界明确,避免任务混乱
返回简洁的结果
1 | data_analyst = { |
最佳实践核心
强制子智能体只返回精简摘要 / 结论,屏蔽原始数据、中间过程,从根源解决主智能体上下文膨胀问题。
system_prompt 设计拆解
要求返回内容(正向约束)
- 关键洞察:提炼 3-5 个核心结论
- 置信度评分:给出结果可靠性
- 后续行动:给出可执行建议 → 只输出最终可用成果
禁止返回内容(反向约束)
原始数据
中间计算过程
工具调用详细输出 → 完全隔离冗余中间信息,不让主智能体接收无效内容
字数约束
300字以内,严格控制输出长度,进一步降低 Token 消耗。
与整套体系的关联,和前面所有实践形成闭环:
- 清晰描述:主智能体精准调度
- 最小工具集:子智能体专注本职
- 匹配专属模型:垂直任务最优性能
精简结果输出:隔离冗余,保护主智能体上下文
常见模式
多个专门子能体
为不同领域创建专门的子能体
1 | from deepagents import create_deep_agent |
模式名称:多个专门子智能体(流水线分工模式)
将一个完整任务拆分为串行的专业步骤,每个步骤由独立垂直子智能体负责,类似流水线作业。
3 个子智能体分工(严格遵循前面所有最佳实践)
| 子智能体 | 职责 | 工具特点 |
|---|---|---|
| data‑collector 数据收集器 | 全网搜索、接口、数据库拉取原始数据 | 工具多,负责信息采集 |
| data‑analyzer 数据分析器 | 对数据做统计、提取核心洞察 | 仅统计分析工具,专注计算 |
| report‑writer 报告撰写器 | 基于洞察生成格式化专业报告 | 仅文档格式化工具,专注输出 |
- 每个子智能体都使用了最小化工具集,职责完全隔离
- 每个
description描述清晰,主智能体可精准调度
标准工作流程
- 主智能体创建整体计划
- 委托数据收集器采集原始数据
- 交给数据分析器提炼洞察
- 交给报告撰写器生成最终报告
- 主智能体整合输出最终结果
核心优势
- 上下文隔离:每个子智能体只处理自己环节的信息,互不干扰,主智能体只接收最终报告,彻底避免上下文膨胀
- 高度专业化:每个智能体只干一件事,精准度更高
- 可复用:数据收集、分析、撰写模块可在其他项目直接复用
- 易维护:某一环节出错,只需要修改对应子智能体,不影响整体流程
故障排除
子智能体未被调用
现象:主智能体不调用子智能体,自己硬扛复杂任务,会造成上下文膨胀、结果质量差。
两套解决方案
方案 1:把子智能体的
description写得更具体好示例:明确能力范围、使用时机,主智能体一看就知道什么时候该交给它
差示例:描述太笼统模糊,主智能体识别不出什么时候调用
1
2
3
4
5# ✅ 好的描述
{"name": "research-specialist", "description": "使用网络搜索对特定主题进行深入研究。当您需要需要多次搜索的详细信息时使用。"}
# ❌ 不好的描述
{"name": "helper", "description": "帮助处理事务"}
方案 2:在主智能体的
system_prompt强制要求委托- 直接命令主智能体:复杂任务必须用工具把任务交给子智能体,以此强制分工,避免主智能体大包大揽。
1
2
3
4
5
6
7# 主智能体强制委托配置
agent = create_deep_agent(
system_prompt="""...你的指令...
重要提示:对于复杂任务,请使用task()工具将任务委托给你的子智能体。
这可以保持你的上下文清晰并提高结果质量。""",
subagents=[...]
)
- 核心原理
主智能体是靠子智能体的描述判断要不要调用;描述越精准、约束越强,调用越稳定。
同时可以在顶层直接下达强制指令,兜底避免不调用的问题。
上下文仍然膨胀
即使已经使用了子智能体,但返回的内容还是太长、冗余信息过多,依旧撑爆主智能体上下文窗口。
两套解决方案
方案 1:强制子智能体精简输出
约束:只给摘要,禁止原始数据、中间搜索过程、工具详情
硬性字数限制:500 字以内
目的:直接压缩子智能体返回给主智能体的内容体量
1
2
3
4
5# 方案1:指示子智能体返回简洁结果
system_prompt="""
重要提示:只返回必要的摘要。
不要包含原始数据、中间搜索结果或详细的工具输出。
你的回复应控制在500字以内。"""
方案 2:海量数据落地到文件
针对超大批量数据:
- 子智能体把原始海量数据直接写入本地文件,不往对话上下文里塞
- 只把精简后的分析摘要返回给主智能体
- 原始数据通过文件持久化存储,完全不占用上下文 token
1
2
3
4
5
6
7# 方案2:使用文件系统存储大数据
system_prompt="""当你收集大量数据时:
1. 将原始数据保存到/data/raw_results.txt
2. 处理和分析数据
3. 只返回分析摘要
这可以保持上下文清晰。"""
核心逻辑
- 子智能体解决的是工具调用步骤隔离
- 这一步解决的是子智能体输出内容本身的冗余
- 超大数据直接落文件,是终极兜底方案,彻底避免上下文被海量原始数据填
选择了错误的子智能体
主智能体在处理任务时,调用了不匹配、不合适的子智能体,比如简单事实查询调用深度调研子智能体,或复杂报告调用快速搜索子智能体,导致效率低、结果错误。
1 | subagents = [ |
核心解决方案
在子智能体的
description描述里,明确区分各自适用场景、使用边界,让主智能体能精准判断该调用哪一个。两个子智能体边界清晰划分
| 子智能体名称 | 适用场景 | 调用时机 |
| :————————————— | :——————- | :—————————————————— |
| quick‑researcher 快速研究员 | 简单、单次查询 | 查基础事实、名词定义,仅需 1-2 次搜索 |
| deep‑researcher 深度研究员 | 复杂、深度任务 | 多次搜索、综合分析、撰写完整报告 |设计核心逻辑
给每个子智能体写排他性、差异化描述,明确什么场景用谁、什么场景不用谁
主智能体通过描述的差异,自动区分调用对象,避免匹配错误
本质还是贯彻前面的最佳实践:描述越具体,调度越精准
总结
子智能体核心优势
保持主智能体上下文清晰
隔离工具调用、中间过程、原始数据,解决上下文膨胀、Token 过载问题。
实现任务专业化
按领域拆分垂直子智能体(调研、分析、报告、法律、金融等),分工明确、执行精准。
优化模型使用
不同子智能体匹配适配任务的专属模型,长文档用 Claude、数值分析用 GPT,算力成本最优。
提高系统可维护性
模块独立,修改、调试、复用更简单,适合流水线式复杂任务。
核心开发关键建议
为复杂任务使用子智能体
简单单步任务不用;多步骤、多工具、长流程任务,必须拆分。
保持子智能体专注
遵循最小工具集原则,只给完成本职必需的工具,避免越权、混乱。
编写清晰的描述和提示
description:精准、具体,明确适用场景,让主智能体正确调度;system_prompt:详细约束步骤、工具用法、输出格式。
优化返回结果简洁性
强制子智能体只输出摘要 / 结论,屏蔽原始数据、中间计算;超大原始数据落地到文件存储。
最终价值
合理使用子智能体,可搭建高效、可扩展、易维护的多智能体系统,全程保障上下文干净、逻辑可控。