从实际 vibe coding 的效果来看,并非每个任务选择最强模型就是最佳选择,也不是无脑新开子 Agent 就能保持最佳上下文和执行效率。
最贵模型的推理思考能力很强,但处理普通任务,例如读写文件、代码搜索、格式化、简单查询时,效率经常很低。
背后的原因也很简单,强模型的 thinking 和 reasoning tokens 开销很大,而这些任务并不需要深度推理,过度思考只会增加延迟和 token 消耗。例如,用 Opus 做一次 Glob 搜索和用 Haiku 做,结果基本一样,但成本会差出两个数量级。
要把任务做好,关键不在于模型是不是最强,而是看任务能否正确匹配模型的能力密度。Claude Code 在创建 Sub-Agent 时,就围绕这方面做了大量设计:
1)当需要保留当前对话上下文继续工作时,例如并行探索不同方案、在后台执行独立子任务,它会 fork 一个 Agent,继承当前上下文,让任务在同一语境中延续;
2)当任务目标明确且不依赖父会话上下文,例如代码搜索、方案规划、结果验证,它会直接使用内置 Agent,包括 Explore、Plan、verification、general-purpose 等,调度的时候,会给 Agent 分配一个清晰的任务目标;
3)设计了 Agent Team 模式,支持让多个 Sub-Agent 协同工作,分工不同的子任务,互相之间通过消息传递和共享上下文来配合完成更复杂的工作。Agent Team 跟普通 subagent 的不同之处是,成员 Agent 之间允许通讯。
在 Sub-Agent 的模型选择上,Claude Code 是动态设定的,例如 Explore Agent 采用的就是 Haiku 模型,而 Plan 和 verification 默认会继承父模型。
Haiku 模型延迟最低、单 token 成本也最低,在文件搜索、代码定位、文档分析等等只读场景下,准确率已经足够了,整体性价比也是最优的。
有了模型选择的基础,再往下就是执行方式的优化。要同时兼顾成本和效率,核心思路是并行执行,将任务拆成多个上下文隔离的子任务,再分派多个 Sub-Agent 并发处理。也分享几个在 Claude Code 中的小技巧,用起来可以让成本、效率和效果达到一个更好的平衡:
1)通过环境变量 CLAUDE_CODE_SUBAGENT_MODEL 可以统一指定子 Agent 的默认模型,主会话用强模型做调度和决策,子 Agent 用轻量模型做执行,配置简单,几乎零成本接入。
2)通过 Fork 模式复用父会话的 Prompt Cache,让并行子任务共享上下文前缀的 KV 缓存,10 个并行 fork 的成本接近 1 + 9 × delta,在大规模并行场景中非常省钱。直接跟主对话说“从当前上下文 Fork 子进程处理”即可。
3)通过 .claude/agents/ 目录下的声明式 Markdown 文件定义专用 Agent,可以精细控制模型选择、工具权限、最大轮次、执行模式、隔离方式、记忆范围、MCP 服务、Hooks 等,适合那些会反复出现的固定角色,例如 code reviewer、security auditor 等等。项目长期使用的专用 Agent 可以考虑用这种方式来定义,后续维护和迭代也更方便。
好模型的 token 成本会越来越高,获取难度也是越来越大,短期内一定是供不应求的,因此模型的推理能力需要被转换为一种精细化分配的资源。中低难度的任务把国内模型用起来就好了,反而效率更高,还省钱。
在 vibe coding 的时候,学会让不同能力的模型组合完成任务,将会是一项必备技能。😄
显示更多