Subagents / 子 AgentNote 33
01 默认 general-purpose subagent
它是什么
它是什么
Deep Agents 默认会添加一个同步 general-purpose subagent,除非你自己提供同名 subagent 或通过 profile 禁用它。主 Agent 通过 task 工具委派,等待子 Agent 完成后只接收最终结果。它解决的问题是:把复杂中间步骤隔离在子 Agent 上下文里,主 Agent 保持干净。
常用程度
高。你不配置自定义 subagent 时,它就是默认可用的“通用隔离区”。
适合:
- 临时多步骤任务,例如读几个文件、整理一段材料、做一次小研究。
- 你不想污染主 Agent 上下文,但也不需要专门 prompt 或专门工具。
- 任务不值得单独创建一个专家 subagent。
不适合:
- 明确需要专门工具、专门输出格式或权限控制。
- 简单一步任务,比如“把这句话翻译成英文”。
执行链路
用户请求
-> 主 Agent 判断需要委派
-> 主 Agent 调 task(subagent_type="general-purpose", description="...")
-> general-purpose 子 Agent 独立运行
-> 子 Agent 返回最终结果
-> 父 Agent 只看到 task 的 ToolMessage
这个链路的关键是:父 Agent 不会拿到子 Agent 内部每一步工具调用的完整上下文,只拿最终结果。上下文隔离就是这么来的。
最小代码
文件:deepagent_src/subagents_teach/01_default_general_purpose.py
agent = create_deep_agent(
model=get_real_model(),
system_prompt="delegate to the general-purpose subagent",
)
运行
uv run python deepagent_src/subagents_teach/01_default_general_purpose.py
预期输出末尾:
default general-purpose subagent real agent ok
验证方式
脚本真实调用主 Agent,并断言父 Agent 收到的 task 工具结果中包含 default-general-purpose-subagent-called。
你在输出里会看到:
Tool Calls:
task
subagent_type: general-purpose
Tool Message:
default-general-purpose-subagent-called
这说明主 Agent 不是自己回答,而是真实委派给了默认 subagent。
常见误区
默认 subagent 不是另一个常驻后台进程。同步 subagent 调用会阻塞主 Agent,直到子 Agent 返回最终结果。
另一个误区是以为 general-purpose 什么都“最合适”。它只是默认通用工具人,生产里稳定任务还是应该写明确的自定义 subagent。
相关资源
查看示例代码:deepagent_src/subagents_teach/01_default_general_purpose.py
from __future__ import annotations from deepagents import create_deep_agent from _model import get_real_model from deepagent_src.agent_output import invoke_and_pretty_print def main() -> None: agent = create_deep_agent( model=get_real_model(), system_prompt=( "You are a coordinator. For the user's request, delegate to the " "general-purpose subagent with the task tool and return its result." ), ) result = invoke_and_pretty_print( agent, { "messages": [ { "role": "user", "content": ( "请委派 general-purpose subagent 返回这句话:" "default-general-purpose-subagent-called" ), } ] }, ) task_outputs = [ getattr(message, "content", "") for message in result["messages"] if getattr(message, "name", "") == "task" ] assert any("default-general-purpose-subagent-called" in output for output in task_outputs) print("default general-purpose subagent real agent ok") if __name__ == "__main__": main()