多 Agent 架构
让一个 AI Agent 连续执行 50 次工具调用,还要记得你最初想要什么——这并不现实。
Helix 的答案是:别让一个 Agent 包办所有事。 用三层角色分工,让每一层各司其职。
单 Agent 系统的两个致命问题
在真实的工程任务里,单 Agent 系统几乎不可避免地会遇到两种失败模式:
1. 目标漂移
Agent 需要读文件、查符号、执行命令、分析结果……每一步都在消耗上下文。30 步之后,它已经完全沉浸在细节里,丢失了用户真正的意图。你让它“重构鉴权模块”,结果它去改了一个完全不相关的配置文件。
2. 上下文污染
每次工具调用的输出——文件内容、命令结果、搜索匹配项——都堆积在对话历史里。重要的推理与决策被淹没在中间数据的海洋中。模型的注意力被分散,输出质量陡降。
三层执行结构
Helix 用三种执行角色来同时解决这两个问题:
第一层:Manager Agent(治理层)
Manager Agent 唯一的职责是确保最终结果与用户意图一致。
它不做实施工作,而是:
- 保留用户的原始目标
- 判断 Execution Agent 的输出是否“达成”
- 在最终交付前执行质量验收
可以把它想象成“项目经理”——它不写代码,但它知道任务什么时候才算真正完成。
第二层:Execution Agent(交付层)
这是主力。Execution Agent 负责:
- 驱动主要的编码与工具流程
- 调用 MCP 工具:读写文件、执行命令、搜索代码、调用 LSP
- 在需要时把任务拆成子任务并委派给 SubAgent
- 持续迭代直到任务完成
它在主会话里串行运行,每一步对用户都是可见的。
第三层:SubAgent(并行深度工作层)
SubAgent 是 Helix 最具特色的设计。当任务存在可独立执行的分支时,Execution Agent 会启动一个或多个 SubAgent,在完全隔离的上下文中并行工作。
Execution Agent
├─ SubAgent A: "搜索所有鉴权相关文件" ──→ 返回摘要
├─ SubAgent B: "分析数据库迁移的影响" ──→ 返回摘要
└─ SubAgent C: "检查前端路由的改动点" ──→ 返回摘要
↑ 并行执行,互不干扰,总耗时 = max(A, B, C)
SubAgent 实现细节
SubAgent 不是“被简化”的 Agent——它是功能完整、独立执行、上下文完全隔离的实体。 以下细节来源于后端源码:
独立子会话
每个 SubAgent 创建一个独立的子会话,ID 格式为 sub_{parentSessionID}_{timestamp}。子会话拥有自己的对话历史,与主会话完全隔离。主会话的上下文不会被子任务的中间步骤污染。
递归保护
SubAgent 自动过滤三个危险工具:
run_subagent—— 防止 SubAgent 无限嵌套创建更多 SubAgentcreate_worktree_binding—— 避免子任务内部产生分支操作冲突start_code_review—— 审查流程应由主会话控制
此外,整个 builtin_subagent MCP server 都会从 SubAgent 的工具列表中排除。
智能结果摘要
当 SubAgent 完成时,结果需要返回主会话。但原始对话可能很长,直接返回会污染主会话上下文。
Helix 的处理策略:
- 若结果 ≤ 2,000 字符,直接返回
- 若超过 2,000 字符,由 AI 生成 ≤ 500 字符的提炼摘要
- 若摘要失败,结果会被截断
这样主会话始终拿到的是干净、提炼后的子任务结果,而不是原始数据倾倒。
完整的工具能力
尽管上下文隔离,SubAgent 依然几乎可以使用所有工具——文件读写、shell 命令、LSP 代码分析、搜索等。SubAgent 不是“弱化版”Agent,而是聚焦于特定任务的全功能专家。
Dual Agent 模式:双模型协作
除了 Manager / Execution / SubAgent 三层架构外,Helix 还提供独特的 Dual Agent 模式——让两个不同的模型(通常是 Claude 与 DeepSeek)就同一个问题进行结构化协作。
四阶段流程
| 阶段 | 描述 | 执行方式 |
|---|---|---|
| Thinking | Claude 与 DeepSeek 各自独立思考同一个问题 | 并行 |
| Discussion | 交叉评审——每个模型评论对方的答案 | 多轮 |
| Synthesis | Claude 综合两方优点形成最终方案 | 单次 |
| Execution | 按最终方案执行(保留阶段) | 可选 |
为什么用两个模型?
不同模型有不同的盲点。Claude 在结构化推理与安全分析上更强;DeepSeek 在代码理解与性价比上有优势。让它们各自独立思考再交叉评审,盲点会被对方捕捉,最终方案更全面。
UI 中的分阶段呈现
在 helix 中,Dual Agent 模式的执行通过清晰的阶段分隔展示:
- 每个阶段以
--- 阶段名 ---分隔符开始 - 不同模型的回复会带上各自的角色标签(Claude / DeepSeek)
- Synthesis 阶段标注为
🎯 Final Solution - 工具调用显示为
🔧 AgentName calls tool
并行调度的真正价值
时间效率
传统串行方式:
任务 A (30s) → 任务 B (25s) → 任务 C (20s) = 总计 75s
Helix 并行方式:
任务 A (30s) ─┐
任务 B (25s) ─┼─→ 总计 30s
任务 C (20s) ─┘
上下文质量
在串行执行中,每个任务的中间输出都堆积在主对话里,持续降低后续任务的输入质量。并行执行下,主会话只接收提炼后的摘要,上下文始终保持干净。
用户可观测性
在 helix 中,SubAgent 状态实时更新:
- 创建时:显示子任务描述与父会话链接
- 执行中:用户可以打开独立窗口实时观察 SubAgent 的对话
- 完成时:摘要结果自动回传主会话
何时使用 SubAgent
✅ 适合 SubAgent 的场景:
- “并行搜索多个模块的安全风险与迁移阻塞点”
- “分别分析后端和前端的改动影响”
- “在动手前调研多个仓库中的引用关系”
- 任何具有独立分支的调研或分析任务
❌ 不适合 SubAgent 的场景:
- 单文件的简单编辑
- 步骤之间存在严格顺序依赖的任务
- SubAgent 启动开销大于收益的轻量任务
相关文档
- 上下文管理 —— SubAgent 如何与 Cache/Compact 协同
- Workspace 架构 —— 子任务在 Workspace 边界内运行
- 开发工具 —— SubAgent 可用的工具集