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-tools crate 执行
  • 工具结果 → 追加回上下文 → 再次请求模型

阶段 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 的编排系统有几个值得深思的设计选择:

  1. Leader-Follower 多进程架构——状态集中管理,前端自由切换,这在终端工具中很罕见
  2. 自动任务分解——基于文件依赖图和语义分析,不需要用户手动分段
  3. 物理隔离的并行执行——Git Worktree 是工程上的优雅选择,比逻辑隔离更安全
  4. 可编程的 Hooks 管线——每个编排阶段都可插入自定义验证逻辑
  5. 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