Claude Code 的子代理(Sub Agents)功能,简单说就是让你把一个大模型拆成一支分工明确的小队:有人专管前端组件,有人盯 API 设计,有人只做代码审查,各自有独立的上下文窗口、系统提示词和工具权限。它适合已经在用 Claude Code 写代码、但被“一个助手什么都干、上下文越聊越乱”折磨过的开发者。这篇我会从职责拆分讲到多代理协作编排,并且全程用 TaoToken 的统一 Key 和 API 通道接入模型,给出可以直接复制的 agents 配置片段、环境变量写法和一次真实任务的验证步骤。你不需要先成为提示词高手,照着搭一遍就能跑起来。
1. 为什么单个 Claude Code 助手会越用越乱
1.1 一个上下文装下所有任务,代价是什么
刚开始用 Claude Code 的时候,大多数人都是同一个模式:一个会话里先聊需求,再让它写前端,接着改后端接口,最后顺手让它 review 一遍。前十分钟很爽,半小时后就开始出问题——它忘了你前面定的组件规范,把你明确说不要的 class 组件又写了出来;你让它改一个按钮样式,它顺手把整个 API 层重构了;上下文越来越长,响应越来越慢,token 消耗肉眼可见地涨。
这不是模型变笨了,是上下文被污染了。所有任务共享一个对话历史,前端偏好、后端约定、审查标准全糊在一起,模型每次都要在一大堆无关信息里找重点。我试过在一个会话里连续做三件事,到第三件时它已经开始引用第一件事里早就废弃的方案了。
子代理解决的正是这个问题。每个子代理有自己独立的上下文窗口,主对话只保留调度信息,专业任务丢给专业代理在自己的窗口里跑,跑完把结论带回来。主对话干净,子代理专注,token 也不会因为历史堆积而爆炸。
1.2 子代理到底是什么:四个可配置的维度
把子代理理解成一个“带配置的专家角色”就行,它的能力边界由四样东西决定:
| 维度 | 作用 | 配置位置 |
|---|---|---|
| 系统提示词 | 定义这个代理是谁、遵守什么规范、讨厌什么写法 | 配置文件正文 |
| 工具权限 | 它能读、能写、能执行哪些操作 | tools字段 |
| 触发条件 | 什么任务会自动路由给它 | description字段 |
| 上下文窗口 | 独立于主对话的执行环境 | 由 Claude Code 运行时管理 |
工具权限这块特别值得说。代码审查代理只给Read, Grep, Glob,它就只能看不能改,从机制上杜绝了“审查着审查着顺手把代码改了”的情况。前端代理给Read, Write, Edit, MultiEdit, Bash,因为它确实要动文件。最小权限不是洁癖,是让每个代理的行为可预测。
1.3 适合谁:三类最该上手的场景
第一类是技术栈固定的团队,比如全栈 Next.js + Prisma,把技术偏好写进代理提示词,新人接手也能产出风格一致的代码。第二类是代码质量要求高的项目,审查代理和验证代理能当自动化质量门。第三类是多项目并行的人,用户级代理建一次,所有项目复用,不用每个仓库重新调教。
反过来说,如果你只是偶尔让 AI 补个函数、写个正则,单助手完全够用,上子代理反而是过度设计。这套东西的价值在“重复性专业任务”上,任务越固定、规范越明确,收益越大。
2. TaoToken 统一 Key:让所有子代理走同一条 API 通道
2.1 为什么子代理场景更需要统一入口
子代理一多,模型调用就从“一个会话一条链路”变成“多个代理各自发请求”。如果每个代理背后配不同的 Key、不同的 Base URL,管理成本会迅速失控:哪个代理用的哪个额度、哪个通道限流了、换模型要改几处,全是坑。统一 Key 的价值就在这里——所有子代理共享一套接入配置,换模型、调额度、排查问题都只在一个地方动。
TaoToken 提供的就是这样一个统一入口:一个 API Key,一个 Base URL,兼容 Anthropic 风格的接口,Claude Code 直接指过去就能用。官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数,配置时别把跟踪参数拼进去。
2.2 拿到 Key 并写入环境变量
先去控制台创建 Key,入口是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,Key 管理页在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。创建完复制那串 Key,接下来写环境变量。
Linux / macOS 下写进 shell 配置文件,比如~/.zshrc或~/.bashrc:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="sk-你的TaoToken密钥"Windows PowerShell 用:
$env:ANTHROPIC_BASE_URL = "https://taotoken.net/api" $env:ANTHROPIC_AUTH_TOKEN = "sk-你的TaoToken密钥"想让配置持久化,PowerShell 里用[Environment]::SetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN","sk-xxx","User")写进用户级变量。改完记得重开终端,或者source ~/.zshrc让配置生效。
注意:
ANTHROPIC_AUTH_TOKEN和ANTHROPIC_API_KEY在不同版本的 Claude Code 里识别逻辑略有差异,如果只配了后者发现不生效,补上前者再试。两个都指向同一个 TaoToken Key 即可。
2.3 验证通道通了再谈子代理
配置完先别急着建代理,确认基础通道是通的。跑一个最小请求:
curl https://taotoken.net/api/v1/messages \ -H "x-api-key: $ANTHROPIC_AUTH_TOKEN" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "max_tokens": 64, "messages": [{"role": "user", "content": "回复两个字:通了"}] }'返回体里content数组有文本、stop_reason是end_turn,就说明 Key 和通道都没问题。这一步失败的话,后面所有子代理配置都是白搭,所以务必先过这关。模型 ID 以你账号下实际可用的为准,可以在模型对话页 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 里确认当前可用模型清单。
3. 可复制的 agents 配置:从零搭出四个专家
3.1 配置文件放哪、长什么样
Claude Code 的子代理配置是 Markdown 文件,带 YAML frontmatter。项目级代理放在项目根目录的.claude/agents/下,只对当前项目生效;用户级代理放在~/.claude/agents/下,所有项目可用。文件名就是代理标识,比如frontend-ui-expert.md。
frontmatter 里三个关键字段:name是代理名,description决定什么时候自动触发(写得好不好直接决定路由准不准),tools是工具白名单。正文就是系统提示词。下面四个配置都可以直接复制改。
3.2 前端 UI 专家配置
--- name: frontend-ui-expert description: Next.js、Tailwind 和 shadcn/ui 专家。在构建、修改或调试前端组件和 UI 元素时主动使用 tools: Read, Write, Edit, MultiEdit, Bash --- 你是我的前端 UI 专家。遵守以下约定: 技术栈偏好: - Next.js 14 App Router,不使用 Pages Router - Tailwind CSS 处理所有样式,不用 CSS Modules 或 styled-components - shadcn/ui 作为基础组件库 - 一律 TypeScript,不写纯 JavaScript - 函数组件加 hooks,不用 class 组件 设计原则: - 移动优先,从移动端向上扩展 - 极简风格,不用粗体大字和过度渐变 - 间距统一走 Tailwind 标准刻度 - 暗色模式用 CSS 变量支持 - 可访问性不可妥协:ARIA 标签、键盘导航必须到位 组件规范: - 单个组件不超过 100 行 - Props 用 TypeScript 接口定义 - 复杂逻辑抽成自定义 hook - 能用服务端组件就用,需要交互才用客户端组件 明确禁止: - 内联样式或样式对象 - 硬编码颜色 - 图片缺 alt - 非语义化 HTML - 不响应式的组件description里“在构建、修改或调试前端组件时主动使用”这句话是触发关键词,Claude Code 会根据任务描述匹配它来决定是否路由给这个代理,写得越贴近你的实际说法,命中率越高。
3.3 API 架构师与代码审查执行者
API 架构师:
--- name: api-architect description: REST 端点、数据库操作和服务器逻辑的后端 API 专家。在 API 开发任务时自动触发 tools: Read, Write, Edit, MultiEdit, Bash --- 你是我的后端 API 架构师。 架构约定: - RESTful 端点,HTTP 状态码要准确 - Express.js + TypeScript - Prisma 做数据库操作 - JWT 认证带刷新令牌 - Zod 做输入校验 - 自定义错误类做结构化错误处理 安全要求: - 所有输入校验并清洗 - 公共端点加限流 - 密钥一律走环境变量 - 密码用 bcrypt 哈希 - 参数化查询防注入 错误处理: - 统一错误响应格式 - 400/401/403/404/500 按语义使用 - 开发环境给详细错误,生产环境给通用信息 - 外部服务失败要优雅降级 代码组织:控制器管请求响应,服务层放业务逻辑,仓库层管数据访问,中间件处理横切关注点。代码审查执行者,注意工具只给只读:
--- name: code-review-enforcer description: 高级代码审查员。在任何代码更改后自动审查质量、安全性和最佳实践 tools: Read, Grep, Glob, Bash --- 你是我的高级代码审查员,按“明天就上生产”的标准审查每个改动。 关键问题(必须修复): - 安全漏洞:暴露的密钥、注入风险 - 逻辑错误或死循环 - 内存泄漏或性能瓶颈 - 外部调用缺错误处理 - 本该可配置的硬编码值 代码质量(应该修复): - 函数职责过多 - 可提取的重复代码 - 命名不清 - TypeScript 类型缺失或错误 审查风格:指出具体文件和行号,解释为什么有问题而不只是说有问题,给出具体改法,看到好实践要承认。3.4 研究助手与多代理协作编排
研究助手:
--- name: tech-research-assistant description: 查找文档、解释新技术和总结最佳实践的技术研究专家。需要了解新框架、API 或最佳实践时使用 tools: Read, Write, Bash --- 你是我的技术研究专家。 研究方法: - 优先查官方文档,注意文档日期 - 给可运行的示例,不只讲理论 - 相关时对比替代方案 - 讲清版本兼容性和破坏性变更 输出风格:先一句话说清是什么、为什么重要,然后立刻给代码示例,再诚实列优缺点和常见坑。四个代理建好后,协作编排靠的是主对话里的任务描述。你不需要写复杂的调度代码,只要在任务里点名代理,比如“先用 tech-research-assistant 调研 Next.js 15 的缓存变化,再让 api-architect 按结论调整接口层,最后 code-review-enforcer 过一遍”。Claude Code 会按顺序把子任务路由给对应代理,每个代理在自己的上下文里跑完,结论回到主对话。这就是“编程军团”的实际形态——不是代理之间互相调用,而是主对话当调度台,代理各干各的活。
4. 验证请求:一次真实任务看分工是否生效
4.1 造一个带问题的测试文件
配置写完必须验证,不然你不知道代理到底有没有被触发。造一个故意有毛病的文件test-login.js:
const express = require('express'); const app = express(); app.post('/login', (req, res) => { const password = req.body.password; if (password === 'admin123') { res.send({ token: 'abc123' }); } else { res.send('Invalid'); } }); console.log('Server starting...');这个文件塞了硬编码密码、硬编码令牌、糟糕的错误响应、遗留调试语句,正好是审查代理该抓的典型问题。
4.2 触发审查并检查调用链
在 Claude Code 里输入:
使用 code-review-enforcer 审查 test-login.js预期结果是它把任务委托给审查代理,代理在独立上下文里用 Read 读文件、Grep 搜模式,然后返回带行号的问题清单:硬编码凭据、错误处理缺失、调试语句残留、输入未校验、响应格式不一致。如果它直接在主对话里自己答了、没有走代理,说明description的触发词没匹配上,把任务描述改得更贴近配置里的措辞再试。
再验证一次前端代理:让它“用 frontend-ui-expert 建一个响应式用户资料卡组件”,看产出是不是函数组件、TypeScript 接口、Tailwind 类名、shadcn/ui 组件。两个代理都能按预期触发,说明配置和路由都通了。
4.3 用日志确认代理真的独立运行
想更确定一点,可以在任务执行时观察 Claude Code 的输出:走子代理的任务会显示代理名和独立执行的过程,而不是混在主对话流里。另一个信号是上下文——连续让审查代理看五个文件,主对话不会因此膨胀,因为文件内容都在代理自己的窗口里消化掉了。这个体感很明显,多跑几次就能分辨。
5. 常见报错排查:401、代理失败与配置不生效
5.1 401 与鉴权失败
最常见的报错是401 Unauthorized或authentication_error。先查三件事:Key 有没有复制全(前后空格、换行都算错)、环境变量有没有真的生效(echo $ANTHROPIC_AUTH_TOKEN看输出)、Base URL 是不是写成了带路径的https://taotoken.net/api/v1——正确写法是https://taotoken.net/api,版本路径由客户端自己拼。如果 curl 能通但 Claude Code 报 401,多半是终端没重开、环境变量没加载。
5.2 local proxy failed 与连接类错误
出现local proxy failed或连接超时,先确认网络能直连taotoken.net,用curl -I https://taotoken.net/api看返回头。如果公司网络有出口限制,找运维确认域名放行,不要自己折腾来路不明的转发工具。另一个常见原因是代理配置里把 Base URL 写成了http://而不是https://,协议错了直接连不上。
5.3 reading choices 与响应解析错误
error reading choices这类报错通常出现在响应体不是预期 JSON 的时候,比如网关返回了 HTML 错误页。用第 2.3 节的 curl 命令复现一次,看原始返回体到底是什么。如果是模型 ID 不存在,返回里会有明确提示,去模型对话页核对可用模型名。如果是max_tokens设得太小导致截断,把值调大再试。
5.4 OAuth 与配置不生效
有些版本会提示 OAuth 登录或oauth token expired,这通常是因为客户端优先走了交互式登录流程。确认环境变量ANTHROPIC_AUTH_TOKEN已设置,并且在启动 Claude Code 的同一个终端会话里。如果配置了代理但完全不触发,检查文件是不是放在了正确目录(项目级.claude/agents/、用户级~/.claude/agents/)、frontmatter 的---有没有写全、YAML 缩进有没有用空格而不是 Tab。改完配置要重启 Claude Code 会话才会重新加载。
6. 把统一 Key 接进你的日常编码流
配置跑通之后,日常用法就很简单了:新项目开工,先让研究助手调研技术选型,再让 API 架构师定接口骨架,前端专家按骨架搭组件,每轮改动结束让审查代理过一遍。所有代理共享同一个 TaoToken Key,换模型只改环境变量一处,额度在控制台统一看。
如果你还在单助手阶段,建议先从审查代理开始——它只读不写,风险最低,收益最直接。跑顺了再加前端和后端代理。需要长期跑编码任务、多代理高频调用的,可以看 Coding Plan 的额度方案 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ;接入细节和参数说明在文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ;Key 管理和新建在 API Keys 页 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。先把第 2.3 节那条 curl 跑通,剩下的就是复制配置、改提示词、验证触发,一步步来就行。