这篇适合谁,读完能做到什么
适合已经在用 AI 编程助手或智能体框架、却发现一次长对话越来越难管的人。本文讲三种把工作分给多个智能体的方式:Claude Code 的子 agent(subagent)、OpenAI Agents SDK 的交接(handoff),以及 LangGraph 里的编排者–工人(orchestrator-worker)模式。读完你应该能写出第一个 Claude Code 子 agent 文件,明白交接是怎么回事,也知道上下文和 token 成本会在哪里限制你。
三种方式各是什么
Claude Code 的子 agent 是专门处理某一类任务的助手。每个子 agent 有自己的上下文窗口、自定义的系统提示、可用的工具和独立的权限,完成后只把摘要返回给主对话。[2]Claude Code 还内置了几种并行方式:/batch 会把一次大改动拆给 5 到 30 个子 agent,每个都在自己的 worktree 里隔离运行;claude agents 打开 agent 视图;/tasks 列出后台任务,包括已经结束的子 agent。[3]更大的任务可以用动态工作流:Claude 为任务写一段 JavaScript 脚本,由运行时在后台执行,官方给出的规模是每次运行几十到几百个 agent。循环、分支和中间结果都由脚本保存,所以 Claude 的上下文里只放最终答案。[4]内置的 /deep-research <question> 就是一个例子:它从几个角度并行搜索网页,交叉核对来源,对每条论点投票,最后给出带引用的报告,没有通过交叉核对的论点会被过滤掉。[4]
OpenAI Agents SDK 走的是另一条路。它的 README 把自己描述为轻量而强大的多智能体工作流框架,与模型供应商无关,支持 OpenAI 的 Responses 和 Chat Completions API,也支持 100 多种其他大模型。[6]它的核心是交接:一个 agent 把任务转给另一个 agent,对模型来说,交接本身就是一个工具。例如交给名为 Refund Agent 的 agent,会暴露为名为 transfer_to_refund_agent 的工具。[7]SDK 还支持把 agent 当工具用,经理 agent 通过 Agent.as_tool() 保持控制权;而在交接方式里,分诊 agent 把对话路由给专家 agent,由专家接管。[10]
LangGraph 是一个图的框架。它的文档把工作流和 agent 分开:工作流有预先写好的代码路径,按固定顺序运行;agent 则自己决定流程和工具的使用。[11]对于可以同时进行的工作,LangGraph 的 Send API 会动态创建工作节点,每个节点带有自己的状态。在编排者–工人的配置里,编排者把任务拆成子任务、分派给工人,再把结果综合起来;ToolNode 会自动并行执行工具调用。[11]
三者的主要区别在于协调逻辑放在哪里。Claude Code 的子 agent 由主对话启动,只返回摘要。SDK 的交接会转移控制权,接手的 agent 能看到之前的全部对话历史。[7]LangGraph 则把协调写进图本身:当条目数量只有运行时才知道时,Send 可以对每个条目运行同一个节点;Command 则在一次返回里同时更新状态并选择下一个节点。[13]
准备
Claude Code 的子 agent 文件放在当前项目的 .claude/agents/ 里,或者放在 ~/.claude/agents/ 里供你所有项目使用。还有其他作用范围,同名时优先级高的位置生效。[2]
OpenAI Agents SDK 需要 Python 3.10 或更高版本。README 给出的安装命令是 pip install openai-agents,运行示例前要设置环境变量 OPENAI_API_KEY。[6]
LangGraph 用 pip install -U langgraph 安装。[12]
成本要一开始就算进去。同时开多个会话或子 agent,会成倍增加 token 用量。[3]每个子 agent 在运行时也会消耗它自己的 token。[2]
上手步骤
- 创建第一个 Claude Code 子 agent。官方快速入门用的是用户级文件
~/.claude/agents/code-improver.md,内容如下:[2]
---
name: code-improver
description: Scans files and suggests improvements for readability, performance, and best practices. Use after writing or modifying code.
tools: Read, Grep, Glob
model: sonnet
---
You are a code improvement specialist. For each issue you find, explain
the problem, show the current code, and provide an improved version.前置信息里只有 name 和 description 是必填的。Markdown 正文会成为这个子 agent 的系统提示。[2]
- 把
description写短。所有自定义子 agent 的description合计超过 15,000 个 token 时,Claude Code 启动时会显示带总数的警告。官方建议把细节移到各个子 agent 的系统提示里。[2]
- 给简单任务选更便宜的模型。官方文档把「把任务交给 Haiku 这类更快、更便宜的模型」列为子 agent 的好处之一。
CLAUDE_CODE_SUBAGENT_MODEL用来设默认模型;把CLAUDE_CODE_SUBAGENT_MODEL_FORCE设为1,则所有子 agent、队友和工作流 agent 都使用同一个模型。[2]Claude Code 按 API 的 token 消耗计费,/usage的 Session 部分会显示 API token 用量。[5]
- 读一个交接的示例。先用
pip install openai-agents装好 SDK,再读官方交接指南里的最小示例:[7]
from agents import Agent, handoff
billing_agent = Agent(name="Billing agent")
refund_agent = Agent(name="Refund agent")
# (1)!
triage_agent = Agent(name="Triage agent", handoffs=[billing_agent, handoff(refund_agent)])这里 triage_agent 通过 handoffs 参数拿到另外两个 agent,handoff(refund_agent) 把其中一个包装起来以便自定义。handoff() 还接受 tool_name_override、tool_description_override、on_handoff、input_type、input_filter、is_enabled 和 nest_handoff_history 等选项。[7]运行入口有三个方法:Runner.run()、Runner.run_sync() 和 Runner.run_streamed()。[8]
- 试一个 LangGraph 子图。子图就是被用作另一张图里某个节点的图。如果父图和子图的状态结构不同,就在节点里用包装函数调用子图;如果两者共享状态键,就直接用
add_node把编译好的子图加进去。[12]
我们的做法
TellWorld 的新闻增量更新就是这种分工的一个例子。每次更新,我们把搜集分成三个方向,每个方向一个子 agent:美国和欧洲的模型厂商;中国公司;跨公司的话题,比如机器人、芯片、政策、诉讼和大额交易。[1]三个子 agent 在后台运行,主 agent 不轮询它们的输出,而是在每个子 agent 结束时收到通知。[1]主 agent 的职责刻意收窄:分配任务、接收文件、运行流水线脚本,并打开最重要的三到五条条目的来源做抽查。[1]
下面这个案例依赖的正是这种抽查。2026 年 11 月 13 日,一个子 agent 报告英伟达 CEO 辞职。主 agent 没有直接采信,而是抓取了英伟达自己的新闻稿,核对了人名和日期之后才接受这条。[1]
大批量的积压任务则交给腾讯的智能体 App WorkBuddy,不交给我们的子 agent。任务写成 Markdown 任务单,在一张队列表里登记。到 2026 年 11 月,队列里已有 29 个已交付的任务。[1]WorkBuddy 每开始一个新文件之前,都要先读一个反馈文件,并先执行里面待办的指示。这样维护者不用停掉一个长时间运行的 agent,也能调整它的方向。[1]
几个 agent 可能返回同一条条目,所以合并步骤是设计的一部分。多个文件里有同一条目时,intake 脚本会合并其中的事实,并重新编号出处,而不是保留多份。[1]
这是我们的场景和选择:几个边界清楚的搜集方向,加上对少数重要条目的原始来源核对,最后有一步合并。它不是通用的最佳实践。
限制和常见问题
- 子 agent 的结果会回到主对话。如果很多子 agent 各自返回大量细节,会占用可观的上下文。[2]
- 默认情况下,同时运行 20 个子 agent 时,再用 Agent 工具启动新的子 agent 会失败,并提示
Concurrent subagent limit reached。CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS可以修改这个上限。子 agent 默认还可以再派生自己的子 agent,最多三层。[2] - 并行适合彼此独立的调查。官方文档说,研究路径之间没有依赖时效果最好。[2]
- 前台子 agent 会阻塞主对话直到结束;后台子 agent 则与主对话并发运行。[2]
- 交接只在一次运行之内有效。输入护栏只作用于第一个 agent,输出护栏只作用于产生最终输出的那个 agent。[7]
max_turns超过时 runner 会抛出MaxTurnsExceeded;设为max_turns=None则取消限制。[8]
下一步
先读 Claude Code 的子 agent 文档[2]和并行运行的说明。[3]再读 OpenAI 的 agent 编排指南[10],以及 LangGraph 的子图文档。[12]每个框架先用一个小任务跑通,扩大规模前用 /usage 看一下 token 用量。[5]
来源
- 1
- 2Create custom subagentsAnthropic
- 3Run agents in parallelAnthropic
- 4
- 5Manage costs effectivelyAnthropic
- 6OpenAI Agents SDK READMEOpenAI (GitHub)
- 7HandoffsOpenAI
- 8Running agentsOpenAI
- 9
- 10Agent orchestrationOpenAI
- 11Workflows and agentsLangChain Docs
- 12SubgraphsLangChain
- 13Use Send and CommandLangChain
- 14Build sequences, branches, and loopsLangChain Docs
- 15Thinking in the Graph APILangChain Docs
引用本页: 多个智能体怎么分工:子 agent、并发和模型分级. TellWorld, https://www.tellworld.net/zh/practice/practice-multi-agent. 更新于 2026-11-14