专业 Agent 编排与委托模式
专业 Agent 编排与委托模式
学习目标
- 理解 11 个专业 Agent 的角色分工
- 掌握工具权限矩阵的设计模式
- 实现委托链防死锁(Sisyphus-Junior 禁止再委托)
- 识别不同模型家族工具调用格式差异
前置知识
本章涉及 Agent 设计的通用原理,建议先阅读:
下文假设你已理解 Agent 核心循环和路由模式,直接聚焦 Oh-My-OpenAgent 的具体实现。
项目实践
11 个专业 Agent 的角色分工
Oh-My-OpenAgent 将 Agent 分为四组,每组有明确的职责范围和工具权限:
核心 Agent:
| Agent | 默认模型 | 角色 |
|---|---|---|
| Sisyphus | claude-opus-4-7 | 主编排器:规划、委托、并行执行 |
| Hephaestus | gpt-5.5 | 深度工匠:自主研究 + 端到端执行 |
| Oracle | gpt-5.5 | 架构咨询:只读分析、代码审查 |
| Librarian | gpt-5.4-mini-fast | 文档搜索:OSS 实现示例、API 查询 |
| Explore | gpt-5.4-mini-fast | 快速 grep:代码库模式发现 |
| Multimodal-Looker | gpt-5.5 | 视觉分析:PDF、图像、图表解析 |
规划 Agent:
| Agent | 默认模型 | 角色 |
|---|---|---|
| Prometheus | claude-opus-4-7 | 战略规划:Interview 模式需求澄清 |
| Metis | claude-sonnet-4-6 | 计划顾问:预规划分析,识别歧义 |
| Momus | gpt-5.5 | 计划审查:验证清晰度、可验证性 |
编排 Agent:
| Agent | 默认模型 | 角色 |
|---|---|---|
| Atlas | claude-sonnet-4-6 | Todo 编排器:执行计划、分配任务 |
| Sisyphus-Junior | Category 决定 | 分类执行器:禁止再委托 |
工具权限矩阵
Oh-My-OpenAgent 通过严格的工具权限限制防止 Agent 越权操作:
| Agent | 限制 | 理由 |
|---|---|---|
| Oracle | 只读:禁止 write/edit/task/call_omo_agent | 咨询角色,不应修改代码 |
| Librarian | 只读:禁止 write/edit/task/call_omo_agent | 搜索角色,不应修改代码 |
| Explore | 只读:禁止 write/edit/task/call_omo_agent | 探索角色,不应修改代码 |
| Multimodal-Looker | 白名单:仅 read | 视觉分析,无需写操作 |
| Atlas | 禁止 delegate:无 task/call_omo_agent | 执行者,不应产生子任务 |
| Momus | 只读:禁止 write/edit/task | 审查角色,不应修改代码 |
委托链防死锁:Sisyphus-Junior
当使用 Category 路由时,系统创建 Sisyphus-Junior 作为执行 Agent。关键约束:
- 禁止再委托:Sisyphus-Junior 不能调用 task 或 call_omo_agent 委托给其他 Agent
- 目的:防止无限委托链(A 委托 B,B 委托 C,C 委托 A…)
- 实现:通过工具权限限制,在 Agent 配置中移除 delegate 工具
Sisyphus 的动态 Prompt 组装
Sisyphus 的系统提示不是静态字符串,而是按模型家族动态组装的:
Sisyphus Prompt 结构:├── Agent Identity(角色定义)├── Intent Gate(每条消息的意图分类)├── Key Triggers(技能触发词)├── Tool Selection Table(可用工具表)├── Delegation Table(可委托的 Agent)├── Category Skills Guide(Category + Skill 组合指南)├── Parallel Delegation(并行委托策略)├── Task Management(Todo 驱动工作流)├── Hard Blocks(禁止行为列表)└── Anti-Patterns(反模式列表)不同模型家族的组装函数不同:
- Claude Opus 4.7:
buildClaudeOpus47SisyphusPrompt() - GPT-5.5:
buildGpt55SisyphusPrompt() - Kimi K2.6:
buildKimiK26SisyphusPrompt() - Gemini:
buildGemini...()系列函数
问题与规避
不同模型家族的工具调用格式差异
问题:Claude、GPT、Gemini 对工具调用的响应格式不同。Claude 使用 <antThinking> thinking block,GPT 使用 reasoning 模式,Gemini 需要显式的 tool mandate。
规避:Oh-My-OpenAgent 为每个模型家族构建专门的 prompt 函数,在函数内部处理该家族特有的工具调用格式要求。例如 Gemini 需要 buildGeminiToolMandate() 和 buildGeminiDelegationOverride()。
委托链深度过深
问题:如果每个 Agent 都可以再委托,委托链深度指数增长,导致上下文爆炸和任务漂移。
规避:
- Sisyphus-Junior 禁止再委托
- Atlas 禁止 delegate 工具
- 只有 Sisyphus 和 Hephaestus 可以创建子 Agent
设计取舍
专用 Agent vs 通用 Agent
| 方案 | 优势 | 代价 |
|---|---|---|
| 专用 Agent(11 个) | 每个 Agent 针对特定任务优化,工具权限精确控制 | 配置复杂度高,需要维护多个 Agent 定义 |
| 通用 Agent(1-2 个) | 配置简单,上下文切换少 | 权限模糊,模型选择不灵活 |
推荐:当任务类型差异大(研究 vs 实现 vs 审查)时,专用 Agent 的收益远大于维护成本。