2026-07-16
Grok Build 对话编排系统深度解析:多 Agent 架构的设计哲学
2026 年 7 月 15 日,xAI 开源了 Grok Build——一个 132 万行 Rust、77 个 crate 的终端 AI 编程 Agent。各大媒体都在报道它的安装方式、定价策略和隐私争议,但很少有人深入它的对话编排系统。
这篇文章聚焦一件事:Grok Build 是如何编排 Agent 对话的? 尤其是它的多 Agent 并行架构,是目前所有终端 coding agent 中最激进的设计。
免责声明:本文基于 xAI 官方博客、GitHub 仓库、社区逆向分析以及公开文档,部分细节来自源码层面的推断。
一、最底层:Agent 核心循环
所有 coding agent 的本质是一个 while 循环。Grok Build 也不例外:
while (not done) {
1. REASON → 模型读取完整上下文,决定下一步
2. ACT → 调用工具(读文件、编辑、执行命令等)
3. OBSERVE → 工具返回结果,追加回上下文
4. REPEAT → 回到步骤 1
}
这个循环由 xai-grok-shell crate(约 336K 行代码,整个项目中最大的核心 crate)管理。它是 Grok Build 编排系统的心脏。
关键建模细节: 模型本身没有记忆。每次迭代,模型看到的是累计的完整上下文——它从零开始推理。这就意味着上下文窗口耗尽是一个现实问题。Grok Build 用 500K tokens 的窗口(当前版本),当水位接近上限时,编排系统必须做压缩决策:摘要化旧轮次、丢弃已读文件的完整内容、保留用户意图和未完成任务。
TUI 里那个不断跳动的 ↕39.8k 计数器,就是 Agent "工作记忆" 的实时水位。
二、进程架构:Leader–Follower 模型
这是理解 Grok Build 编排的起点。它不是一个单进程单体应用,而是一个多进程架构:
┌───────────────────────────────────────────────────────┐
│ 你的机器 │
│ │
│ ┌────────────────────────────────────────────────┐ │
│ │ Leader 进程(唯一「大脑」) │ │
│ │ 管理所有 Agent 状态,持久化到 ~/.grok/ │ │
│ │ 监听 Unix Socket: ~/.grok/leader.sock │ │
│ │ 核心 crate: xai-grok-shell │ │
│ └──────────────┬─────────────────────────────────┘ │
│ │ ACP (Agent Client Protocol) │
│ │ JSON-RPC over Unix Socket │
│ ┌────────────┼────────────┬──────────────┐ │
│ ▼ ▼ ▼ ▼ │
│ ┌────────┐ ┌─────────┐ ┌──────────┐ ┌────────────┐ │
│ │ TUI │ │Headless │ │ IDE 扩展 │ │ 其他进程 │ │
│ │(pager) │ │ (-p) │ │Zed/Neovim│ │(外部工具) │ │
│ └────────┘ └─────────┘ └──────────┘ └────────────┘ │
└───────────────────────────────────────────────────────┘
这个设计很聪明:
- Leader 是唯一的有状态进程——它持有所有会话状态、正在运行的 Agent、上下文历史。持久化到
~/.grok/目录。 - 所有前端都是无状态客户端——TUI、无头模式、IDE 插件都通过 ACP 协议(JSON-RPC over Unix Socket)连接到 Leader。
- 一台机器只有一个 Leader——多个终端窗口可以同时连接到同一个 Leader,共享会话列表。
这意味着:你在 TUI 里启动一个任务,关掉终端,然后用另一个终端继续——会话状态在 Leader 里,没有丢失。
三、单 Agent 会话生命周期
当用户执行 grok build "重构 auth 模块" 时,编排系统内部走以下流程:
阶段 1:会话创建
Leader 收到 ACP 请求,创建一个 Session 对象。这一步会读取当前项目的所有配置:
AGENTS.md/CLAUDE.md——项目级 Agent 指令.grok/config.yaml——工具、模型、子 Agent 配置- Skills、Plugins、Hooks——扩展系统
- MCP Servers——外部工具集成
阶段 2:上下文组装
Leader 将以下内容组装为一个上下文窗口:
[系统提示词] + [项目配置] + [相关代码库文件] + [用户消息] + [工具定义]
一并发送给模型。Grok Build 有专门的 xai-grok-agent crate(21.4K LOC)处理提示词模板和上下文组装。
阶段 3:Agent 循环
模型返回后,Leader 解析响应(xai-grok-shell 中的 Parsing 模块):
- 如果是文本回复 → 输出给用户
- 如果是工具调用 → 通过
xai-grok-toolscrate 执行 - 工具结果 → 追加回上下文 → 再次请求模型
阶段 4:上下文压缩
当上下文窗口接近满时,编排系统必须做压缩决策。这是所有 Agent 编排中最棘手的问题之一。Grok Build 的策略包括:
- 摘要化:对早期轮次进行内容摘要
- 丢弃文件内容:只保留工具调用记录和返回值摘要
- 保留关键信息:用户意图、已修改的代码、未完成的任务
四、多 Agent 编排(核心亮点)
这是 Grok Build 最独特的设计。当任务足够复杂时,Orchestrator(编排器 Agent)会自动拆解任务,并行执行。
4.1 完整流程
假设你输入:*"Add user authentication with JWT, including login/register endpoints, middleware, and tests"*
Orchestrator
│
├─ 1. 任务分析(Task Analysis)
│ ├─ 读取提示 + 扫描代码库
│ └─ 理解语义结构
│
├─ 2. 任务分解(Decomposition)
│ ├─ 分析文件依赖 + import 图
│ ├─ 构建 Dependency Graph
│ └─ 拆解为子任务:
│ [1] JWT 工具函数 (utils/jwt.ts)
│ [2] 端点 (routes/auth.ts)
│ [3] 中间件 (middleware/authenticate.ts)
│ [4] 测试 (tests/auth.test.ts)
│
├─ 3. 依赖分析:确定执行阶段
│ ├─ Phase 1 (并行): [1] 工具函数
│ ├─ Phase 2 (并行): [2, 3] 端点 + 中间件
│ └─ Phase 3 (并行): [4] 测试
│
├─ 4. 上下文分配
│ ├─ 编排器: 12K tokens
│ ├─ 子 Agent 1: 34K
│ ├─ 子 Agent 2: 48K
│ ├─ 子 Agent 3: 28K
│ └─ 子 Agent 4: 41K
│
└─ 实际输出:
🔄 Analyzing task...
📋 Decomposed into 4 subtasks:
[1/4] 🔧 Creating auth utilities (2.1s)
[2/4] 🔧 Building endpoints (3.1s)
[3/4] 🔧 Adding middleware (2.4s)
[4/4] 🔧 Writing tests (3.8s)
⚡ Running 4 subagents in parallel...
✅ [1/4] Auth utilities complete (2.1s)
✅ [3/4] Middleware complete (2.4s)
✅ [2/4] Endpoints complete (3.1s)
✅ [4/4] Tests complete (3.8s)
🔀 Merging results...
✅ All changes applied. 4 files created, 1 modified.
Total time: 4.2s (vs ~12s sequential estimate)
总耗时取决于最慢的子 Agent,而不是所有子任务之和。
4.2 每个子 Agent 是独立的循环
这是一个非常重要的架构决策:子 Agent 之间不共享上下文。
子 Agent 1(JWT 工具函数):
┌─ 上下文: [系统提示 + 项目配置 + utils/jwt.ts + 任务描述]
├─ 自己的 while 循环: 推理 → 读写文件 → 观察 → ...
└─ 输出: 文件修改集合 + 摘要
子 Agent 2(端点):
┌─ 上下文: [系统提示 + 项目配置 + routes/auth.ts + 任务描述]
├─ 自己的 while 循环: 推理 → 读写文件 → 观察 → ...
└─ 输出: 文件修改集合 + 摘要
每个子 Agent 不知道其他人的存在,直到合并阶段。
4.3 拆解策略
Orchestrator 如何决定拆解方式?Grok Build 内部通过分析文件依赖图(import graph)和请求的语义结构来决定。如果任务涉及的文件之间没有依赖关系(如 jwt.ts 和 auth.ts 互相独立),它们会被并行化。如果存在顺序依赖(如测试依赖于端点和中间件的输出),则按阶段执行。
实践中,社区发现了以下模式:
| 拆解策略 | 触发条件 | 示例 |
|---|---|---|
| feature-layer | 按功能层拆分 | utilities / routes / middleware / tests |
| module-based | 按模块拆分 | user-service / order-service / payment-service |
| concern-based | 按关注点拆分 | implementation / documentation / tests |
| sequential | 有顺序依赖 | schema → API → tests |
目前拆解策略是自动化的,用户不能自定义。
4.4 子 Agent 的物理隔离
Grok Build 的另一个独特设计是子 Agent 运行在隔离的 Git Worktree 中:
- 每个子 Agent 从基础分支 fork 出一个独立的 worktree
- 它们可以自由修改文件,互不干扰
- 合并前可以进行预合并冲突检测
- 这比在同一目录下交叉修改安全得多
后续版本(v0.2.7+)引入了共享终端后端和调度器,进一步改进了并行子 Agent 之间的协调。
4.5 失败重试
编排器对子 Agent 执行重试策略:第 1 次失败 → 重试;第 2 次失败 → 再重试;第 3 次失败 → 报告失败,但其他子 Agent 的结果正常应用。
4.6 模型路由(成本优化)
子 Agent 可以分配不同的模型:
# .grok/config.yaml
subagents:
default_model: grok-4.5
overrides:
tests:
model: grok-3-mini # 测试生成用便宜模型
documentation:
model: grok-3-mini # 文档也用便宜模型
refactoring:
model: grok-4.5 # 核心逻辑用最强模型
测试和文档生成通常更简单,不需要最强模型。4 个子 Agent 并行时,这种路由策略可以显著降低成本。
五、冲突解决
多个子 Agent 修改同一个文件时,编排器如何处理?
场景 1:无重叠修改(自动合并)——子 Agent A 在 jwt.ts 第 10 行加了一个函数,子 Agent B 在 jwt.ts 第 50 行加了一个函数。自动合并,互不干扰。
场景 2:相邻修改(智能合并)——子 Agent A 修改了 import 区域,子 Agent B 也在 import 区域添加了一行。排列器智能合并两个 import 变更。
场景 3:冲突修改(需要解决)——子 Agent A 重写了 getUserById() 一种方式,子 Agent B 重写了同一个函数另一种方式。冲突标记后,Plan Mode 下展示三个选项:选项 A(子 Agent A 的版本)、选项 B(子 Agent B 的版本)、选项 C(编排器的最佳合并尝试)。Code Mode 下编排器自动选择选项 C。
六、Hooks 系统:编排生命周期事件
Grok Build 在编排的每个关键阶段触发事件钩子:
# .grok/hooks.yaml
hooks:
on_decompose: # 任务拆分后触发
- script: ./scripts/log-subtasks.sh
on_subagent_start: # 每个子 Agent 开始时触发
- script: ./scripts/notify-start.sh
on_subagent_complete: # 每个子 Agent 完成时触发
- script: ./scripts/validate-output.sh
# 可以拒绝输出,触发编排器重试该子 Agent
on_merge: # 合并完成后触发
- script: ./scripts/run-linter.sh
on_conflict: # 检测到冲突时触发
- script: ./scripts/alert-team.sh
on_subagent_complete 是最强大的钩子——你可以在子 Agent 输出被合并之前,运行 linter、类型检查、安全扫描。如果验证失败,编排器会重试该子 Agent。
七、Goal Mode:编排的升级版
2026 年 6 月 22 日推出的 /goal 模式,是编排系统的完全自治版本:
用户: "/goal 将 auth 模块迁移到新 API"
编排器:
├─ 1. 构建可见的 Checklist
│ [ ] 分析当前 auth 模块结构
│ [ ] 设计新 API 接口
│ [ ] 实现迁移
│ [ ] 更新测试
│ [ ] 验证全部测试通过
│
├─ 2. 逐项执行(不需要人工确认)
│ 每完成一项,自动标记 ✅
│
└─ 3. 自我验证
├─ 重新读取修改后的代码
├─ 运行测试脚本
└─ 确认通过后才标记完成
Goal Mode 背后有一个约 22K LOC 的自治脚手架,包含 Planner(规划器)、Strategist(策略器)、Summarizer(摘要器)、Next-step generator(下一步生成器)、Goal classifier(目标分类器,6.6K LOC)以及一个非常有趣的 Premature-bail detector(提前终止检测器)。
最后这个组件用一组正则表达式检测模型提前退出的倾向——当模型输出类似 "Stopping here..." 或 "check back later" 这类文本时,检测器会拦截响应,用一段专门设计的"继续提示"替换掉模型的原话,让 Agent 继续执行。每个正则表达式都有对应的回归测试,防止不经过团队评审就弱化了检测面板。
八、ACP 协议:外部 Agent 的集成
ACP(Agent Client Protocol)不仅用于内部 Leader-Follower 通信,还允许外部工具作为 Agent 参与编排:
# .grok/config.yaml
acp_agents:
- name: security-scanner
endpoint: http://localhost:8080/acp
trigger: on_merge
# 合并后运行安全扫描
- name: style-enforcer
endpoint: https://my-team.internal/style-check
trigger: on_subagent_complete
# 每个子 Agent 完成后检查代码风格
这为编排系统打开了无限扩展的可能——安全扫描器、合规检查器、CI 验证器都可以作为 ACP Agent 注入到编排管线中。
九、编排系统的代码分布
为了让你感受 Grok Build 编排系统的工程规模,这里是相关 crate 的分布:
| Crate | 生产代码 | 测试代码 | 职责 |
|---|---|---|---|
xai-grok-shell |
177K | 159K | Agent 运行时 + Leader 进程 |
xai-chat-state |
— | — | 会话状态管理 |
xai-acp-lib |
— | — | ACP 协议实现 |
xai-agent-lifecycle |
— | — | Agent 生命周期管理 |
xai-subagent-resolution |
— | — | 子 Agent 调度 |
xai-interjection-core |
— | — | 用户中途插话处理 |
xai-prompt-queue |
— | — | 提示队列管理 |
xai-goal-tracker |
~22K | — | Goal Mode 自治框架 |
整体来看,Agent 运行时与会话编排相关代码约 359K LOC,占整个项目的 27.2%。但实际与模型交互的部分(采样、提示词管理)不到 5%。Grok Build 本质上是一个编排引擎,不是 LLM 客户端。
十、与其他编排方案的对比
| 维度 | Grok Build | Claude Code | Codex CLI |
|---|---|---|---|
| 子 Agent 并行 | ✅ 自动并行(默认 4 个) | ❌ 单 Agent 顺序 | ❌ 单 Agent 顺序 |
| 拆解方式 | 自动(分析依赖图 + 语义) | 手动拆解 prompt | 手动拆解 prompt |
| 进程模型 | Leader-Follower(多进程) | 单进程 | 单进程 |
| 物理隔离 | Git Worktree 隔离 | 无 | 无 |
| 冲突检测 | 智能合并 + 用户选择 | 不适用(顺序执行) | 不适用(顺序执行) |
| 模型路由 | 按子任务分配不同模型 | 单一模型 | 单一模型 |
| Goal Mode | ✅ 完全自治 | ❌ | ❌ |
| 外部 Agent 集成 | ✅ 通过 ACP | ❌ | ❌ |
| 开放协议 | ACP(JSON-RPC) | 无 | 无 |
| SWE-Bench | 70.8% | 87.6%(Opus 4.7) | 相近于 Claude |
Grok Build 的哲学: 编排器是自动的、智能的。你不告诉它如何拆任务——它自己分析代码依赖、构建执行计划、分配上下文、并行执行、合并冲突。这是它与 Claude Code(顺序执行)和 Codex CLI(单 Agent)最本质的区别。
代价是更大的编排开销:4 个子 Agent 的任务通常消耗 1.5x–2.5x 的总 Token 数,但换来 2–3.5x 的加速(在可并行任务上)。
十一、总结
Grok Build 的编排系统有几个值得深思的设计选择:
- Leader-Follower 多进程架构——状态集中管理,前端自由切换,这在终端工具中很罕见
- 自动任务分解——基于文件依赖图和语义分析,不需要用户手动分段
- 物理隔离的并行执行——Git Worktree 是工程上的优雅选择,比逻辑隔离更安全
- 可编程的 Hooks 管线——每个编排阶段都可插入自定义验证逻辑
- Goal Mode 的自治尝试——Agent 不仅要执行,还要自我验证
当然,它也有明确的问题:SWE-Bench 分数落后竞品 17 分、并行编排在某些场景下反而更慢、自定义拆解策略的能力还有限。
但作为 Rust 生态中第一个开源的大规模 Agent 编排框架,Grok Build 的代码(Apache 2.0,github.com/xai-org/grok-build)是学习 Agent 编排系统设计最直接的参考资料。它的 Leader–Follower 模型、ACP 协议、Hooks 管线,都是可以独立复用的工程思路。
仓库:github.com/xai-org/grok-build 官方文档:docs.x.ai/build/overview