Skip to content

前置阅读:无(本章是第五部分的入口) 学习目标:理解多 Agent 编排的必要性,建立"为什么要这么复杂"的直觉


先从一个真实场景说起

假设你让 AI 帮你做这件事:

"帮我在这个 React 项目里加一个用户登录功能:前端表单、后端 API、数据库表、测试用例,并且最后做一次 Code Review。"

你打开 Claude,把需求发出去,然后等待。

Claude 开始工作了。它写前端,写后端,写数据库迁移脚本……

40 分钟后,任务还没完。上下文窗口快满了。Claude 开始忘记它之前写了什么。它重复实现了一个已经写过的函数,把前端的 API 路径写错了,最后的 Code Review 只有两句话,因为它已经没有多少"精力"了。

这不是 Claude 的问题,这是单模型处理复杂任务的结构性局限。


单模型的三个结构性局限

局限 1:上下文窗口是有限的

Claude 的上下文窗口是 200K token,听起来很多,但一个中等规模的任务(写代码 + 读现有代码 + 对话历史)很容易吃掉它。

当上下文接近上限时,模型的行为会退化:

  • 开始忘记早期的约束
  • 代码质量下降
  • 开始重复自己

更糟糕的是,你无法预测"退化从什么时候开始"。

局限 2:不同任务需要不同的"大脑模式"

写代码和做 Code Review,需要完全不同的思维模式:

  • 写代码:创造性的,需要构建,适当的温度,愿意尝试
  • Code Review:批判性的,需要挑剔,低温度,找问题

同一个模型在同一个会话里做这两件事,往往哪个都不够专注。写代码的时候已经"入戏"了,再切换去做 Review,会不自觉地为自己刚写的代码辩护。

局限 3:所有工具权限都开着

当你让 Claude 做一个只读的调研任务("分析一下这个模块的架构"),它仍然拥有写文件的能力。

在长任务里,这是一个真实的风险——模型可能会在"调研过程中"顺手修改一些它认为"顺带可以改掉"的东西。这不是故意的,但它会发生。


多 Agent 编排是怎么解决这些问题的

oh-my-openagent 的核心思路是:把一个大任务拆给多个专门的 Agent,每个 Agent 只做自己擅长的那一块,用完即走。

回到刚才的登录功能需求:

用户 → Sisyphus(主编排器)

         ├── "前端部分" → Sisyphus-Junior (frontend 分类)
         │                  └── 完成后返回结果

         ├── "后端部分" → Hephaestus(深度编码)
         │                  └── 完成后返回结果

         ├── "数据库设计咨询" → Oracle(只读顾问)
         │                        └── 给出建议,不写文件

         └── "Code Review" → Momus(批评者)
                               └── 专门挑毛病

每个 Agent 只处理自己那一小块上下文,干完就结束。

没有一个 Agent 需要在内存里同时装着"前端代码 + 后端逻辑 + 数据库结构 + 对话历史"。


三个局限是怎么被解决的

解决局限 1:上下文碎片化

每个 Agent 启动时只收到精炼的任务描述,不是完整的对话历史。Sisyphus 会提取"这个子任务需要知道的信息",压缩后传给下游 Agent。

一个后端 API 开发的 Agent,它的上下文里只有:"实现 /api/login 接口,接收 email + password,验证后返回 JWT token,使用已有的 User 模型"——而不是整个对话的 40 页历史。

解决局限 2:专门化的模式

不同 Agent 用不同的模型和参数:

任务Agent为什么
复杂编码Hephaestus + GPT-5 Codex代码专用模型
查询建议Oracle + GPT-5.4 high高推理,低温度
快速探索Explore + Grok-Fast快,不需要写文件
Code ReviewMomus + GPT-5.4 xhigh极高推理,找问题

Oracle 在设计上就是"只给建议不动手"的模式。它的温度低、工具受限(不能写文件),天然适合批评性思维。

解决局限 3:工具权限隔离

Oracle 的代码里:

typescript
const restrictions = createAgentToolRestrictions([
  "write",
  "edit",
  "apply_patch",
  "task",
])

这不是 prompt 里说“你不能写文件”,这是代码层面的硬约束。无论 prompt 如何,Oracle 在能力配置上都拿不到这些写入工具。


但这不是"越多越好"

多 Agent 有代价:

  • 延迟:委托任务需要启动新的 Agent 会话,有开销
  • 成本:每个 Agent 调用都消耗 API 配额
  • 复杂性:调试多个 Agent 协作的问题比调试单模型难

所以 oh-my-openagent 的设计原则不是"把所有事都委托出去",而是:

只有当子任务可以并行、或者需要专门化能力时,才委托。

Sisyphus 在面对一个简单的"改一行代码"需求时,会直接自己做,不会去委托 Hephaestus——委托的开销不值得。


用一句话总结

多 Agent 编排解决的不是"模型能力不足",而是任务的结构性问题

  • 复杂任务超出单次上下文能装下的信息量
  • 不同子任务需要不同的"专注模式"
  • 某些角色天然需要权限隔离(顾问不能动手)

理解了这个,接下来读 oh-my-openagent 的源码,你就不会再问"为什么要搞这么复杂"——而是"哦,原来这里是这样解决的"。


想先跑起来再读?三步装好

如果你是边用边学的类型,可以先装上再读后面的章节:

bash
# 交互式安装(推荐新手)
bunx oh-my-opencode install

# 验证安装是否正常
bunx oh-my-opencode doctor

装完之后什么都不需要配置就能用——空配置会自动启用全部默认功能。如果你想调整模型或禁用某些功能,看完第19章:配置系统实战再改。

后面的章节(第18-22章)是拆解源码,解释"为什么这样设计"。第23章把整个流程串起来,第24章是实际动手扩展的案例。你可以按顺序读,也可以先跑起来用几天再回来读源码章节。



下一章第18章:插件系统概述

插件的入口文件只有 120 行,但它协调了整个系统的初始化。下一章逐行拆解它。