← 返回 2026-08-26

AgentRoom:CRDT 共享工作区上的并发多智能体编码 AgentRoom: Concurrent Multi-Agent Coding in a CRDT-Backed Shared Workspace

Seonglae Cho, Donghyun Lee 📅 2026-08-24 👍 7 2026-08-30 18:30
CRDT LLM Agent MCP 代码生成 分布式系统 多智能体协作

CRDT 共享工作区加显式协调层,抑制多智能体弃坑失败并提升质量

前置知识

CRDT(无冲突复制数据类型)

一种分布式数据结构,允许多个副本独立并发编辑,通过数学性质(如 Lamport 时间戳排序并发操作)保证合并最终收敛且不丢失任何一方的写入。AgentRoom 使用 pycrdt(Y.js 的 Rust 移植 Yrs)在字符级合并并发写入,同步窗口 $\Delta_{crdt}=2$ 秒,并叠加括号/圆括号配平的健全性检查。它提供的是强最终一致性(SEC)——字节级不丢数据,但不保证语义兼容。

论文的关键区分是:SEC 只保证字节合并不丢,两个智能体在同一偏移插入不兼容的函数签名会都存活并破坏编译。理解这一点才能明白为什么作者认为 CRDT 底座只是合并原语、协调层才是增益来源。

MCP(Model Context Protocol)

模型上下文协议,让 LLM 应用通过统一的 stdio/JSON 接口调用外部工具与资源。编码 CLI(Claude Code、Codex CLI、Gemini CLI)都支持 MCP。AgentRoom 把房间协调原语封装为五个 MCP 工具:room_claim、room_release、room_state、room_broadcast、room_read,智能体通过工具调用而非自由文本进行协调。

AgentRoom 的全部协调能力都通过 MCP 工具面暴露,工具调用返回的系统级冲突错误(而非聊天文本)是它战胜纯聊天协调后端的原因,也是论文 4.6 节对照实验的核心。

等算力比较(matched compute)

实验设计原则:比较不同协作方式时保持模型、CLI、任务、墙钟预算完全一致,使差异只来自'如何组织智能体'而非算力多少。例如并行合并条件与 AgentRoom 都跑两个 Sonnet、同样 600 秒预算,唯一区别是有无共享 CRDT 工作区和 MCP 信令。

多智能体论文常见陷阱是'更多智能体=更多算力=更好结果'的混淆。本文所有头条结论(如 +0.213 对并行合并)都在等算力下得出,不理解这一点就无法评估证据强度。

Cochran-Mantel-Haenszel 检验(CMH)

分层统计检验方法:把数据按混杂变量(这里是模型×任务,共 12 层)分层后,在'各层比值比相同'的假设下合并估计公共比值比,并用 Tarone 检验评估层间同质性。适用于多个小样本 2×2 列联表的合并分析。

论文最强的 Tier I 证据——Solo 弃坑几率是 AgentRoom 的 13.7 倍(95% CI [3.9, 48],Tarone 同质性 p=0.92)——就是 12 层 CMH 合并的结果,理解它才能判断哪些单格结论是统计显著的。

咨询式锁(advisory locking,Chubby 风格)

源自 Google Chubby 的分布式锁模式:锁的正确性依赖参与方主动遵守协议,而非内核强制阻止越界访问。AgentRoom 的 room_claim 原子映射 $A \times F \to \{OK, CONFLICT\}$ 并拒绝已被他方持有的文件,但绕过声明直接写文件的智能体不会被系统阻止——其字节仍被 SEC 保留,违规记录暴露在房间日志里。

这是 AgentRoom 与严格锁的本质区别:咨询式设计保留了'队友跨文件修 bug'的协作模式(严格锁会挡住它),理解这一权衡才能明白协议为何设计成提示层强制。

LLM-as-judge(模型评分)

用强模型按固定评分标准(rubric)给生成结果打分的评估范式。本文主裁判是 Sonnet 4.6,按规格覆盖 0.35、正确性信号 0.30、代码质量 0.20、测试严谨 0.15 四维加权产出 $[0,1]$ 复合分;再用正则评分器和 TypeScript AST 评分器交叉验证(LLM 与正则 Pearson r=0.67,正则与 AST r=0.79),并用 Haiku 和 Codex 跨厂商裁判检验同族偏好(r=0.86-0.87)。

本文 Tier II 的全部质量数字来自 LLM 裁判,但它不是执行 oracle(测试是智能体自写的)。知道评分器的构造与交叉验证方式,才能正确解读 0.544 vs 0.669 这类数字的含义与边界。

研究动机

现有多智能体编码系统(ChatDev、MetaGPT 等十余个工作)几乎全部采用串行回合制流水线:设计→实现→评审,每个智能体等待上一个完成,而 LLM 本身一次只能生成一个 token,串行化天然限制了并行探索。更糟的是单智能体在困难任务上会以 stub-and-exit 模式弃坑——先写一个单文件源码骨架然后提前退出(典型发生在前 80 秒),论文统计 Haiku 在 T4 上单智能体弃坑率高达 12/35=34%,合并 12 个模型×任务层后 Solo 弃坑 40/131=31%。并发方向的既有尝试也不理想:CodeCRDT 用隐式 CRDT 协调但结果好坏参半,不同任务间 21% 提速/39% 减速,语义冲突率 5-10%;朴素的并行采样加事后文件并集(parallel-merge)质量 0.456 反而低于单智能体 0.544,因为无协调时第二个智能体的 server.ts 会直接覆盖第一个的文件,放大而非平均弃坑行为。核心矛盾是:串行牺牲速度与探索,无协调的并发互相踩踏,隐式协调不稳定。

本文的目标是本文要回答的核心问题是:在等算力条件(相同模型、相同 CLI、相同墙钟预算)下,显式协调的 CRDT 共享工作区能否同时胜过串行流水线(ChatDev 式)和隐式 CRDT 协调(CodeCRDT 式)?目标分解为三个可检验的层次:一是抑制单智能体特有的 1-file stub-and-exit 弃坑失败模式,这是一个可用确定性分类器判定的二分类结果,不依赖可能有偏的评分器;二是提升连续质量复合分的均值,同时压缩运行间方差(专有模型无种子,run-to-run 波动是实际部署痛点);三是通过六条件消融把增益干净地归因——到底是并行本身、CRDT 合并底座,还是显式协调层在起作用。作者希望给出首个在等算力设置下把协调层从并行度和 CRDT 底座中统计剥离出来的量化结论。

与已有工作不同的是,本文的独特切入是把多智能体协作从'并行度问题'重构为'状态管理问题'。与 CodeCRDT 让智能体观察合并后的文件差异来隐式推断队友意图、并预分配 outliner/implementer 角色不同,AgentRoom 提供显式房间原语:文件级 claim、append-only 广播日志、每智能体状态,经 MCP 工具暴露,且不做角色预分配、不做编排式交接,用咨询式协议取代。所有权在状态管理层确定性执行(room_claim 冲突返回系统错误),而非依赖智能体的自然语言理解——这是与聊天式协调的本质区别。方法学上的独特设计是等算力消融:保持智能体不变,只改变组合方式(串行 ChatDev/并行合并/单智能体/仅共享/共享+提示/完整房间),使增益可归因到协调通道。证据组织上聚焦弃坑率这一裁判无关的二分类作为最强层,规避 LLM 评分可被仪式性代码操纵的风险。

核心方法

AgentRoom 是一个单一集成原语:$N$ 个并发智能体共享一个 CRDT 介导的文件系统 $W$,外加一个协调接口。直觉上像把 Google Docs 式多人实时编辑搬到整个代码仓库:任何智能体写的文件 2 秒内对所有人可见,字符级并发由 CRDT 数学保证合并。技术路线分三层。底层是 pycrdt(Y.js 的 Rust 移植 Yrs)做字符级合并,叠加括号配平健全性检查,满足强最终一致性(SEC),并发编辑按 Lamport 时间戳排序,无需中心转换服务器(区别于 OT 谱系)。中间是协调接口,经 MCP 服务器暴露五个工具:room_claim(path) 原子分配文件所有权、冲突时拒绝;room_release;room_state 返回活跃声明集 $C_t$ 与最近窗口 $\tau$ 的消息日志;room_broadcast/room_read 维护 append-only JSONL 消息日志。顶层是咨询式六步协作协议:读房间状态→认领文件→冲突换文件→写代码→子任务间轮询→广播完成。作者刻意三者协同设计、不做单独消融,只做整体组件探针。

核心创新是把协调从'智能体智能'问题降为'状态管理层'问题:所有权由系统确定性执行(room_claim 冲突直接报错),不依赖智能体解析自由文本。论文 4.6 节的对照直接证明这一点:T5 上 MCP 自由文本聊天后端在两个智能体同时以自然语言广播文件声明、谁都没解析出冲突时 1/2 运行灾难失败(得分 0.088、零测试通过),而 CRDT 状态后端 7/7 全部成功。第二关键设计是 Chubby 式咨询锁:claim 只在提示层强制,越界写入的字节仍被 SEC 保留、违规被日志暴露,这让'队友修我文件里的 Express 5 路由 bug'成为可能,而严格锁会阻断它。第三,claim 的价值有信息论与碰撞率双重论证:在 $N=2$、候选文件池 $K_t\approx5$ 的操作点,碰撞概率 $p_{collision}(N,K_t)=1-\prod_{k=0}^{N-1}(1-k/K_t)\approx0.20$,SEC 会把不兼容编辑都留下并破坏编译,claim 以 $O(1)$ 每编辑代价把碰撞降到零(头条池 0% 语义冲突)。

方法步骤详情

完整流程:$N$ 个智能体 1 秒内启动,连接同一 CRDT 工作区与房间 MCP 服务器;任务为 Express.js/TypeScript 规格(T1 JWT 认证 6 文件、T4 复式记账账本含多币种/哈希链审计/对账/欺诈检测 ≥15 文件 600 秒、T5 算法交易平台 ≥15 文件 900 秒)。运行期执行六步协议:(1) 写前调 room_state 获取活跃声明集与近期广播;(2) 对计划创建的文件调 room_claim,原子映射 $A\times F\to\{OK,CONFLICT\}$;(3) 收到 CONFLICT 就改选其他文件;(4) 在已声明文件中写代码,2 秒内经 CRDT 字符级合并对全员可见;(5) 子任务间轮询 room_read 跟进队友,如 α 广播'给 transfer 加了金额守卫',β 读后在同一行插入 idemKey 防重放检查;(6) room_broadcast 汇报完成。评估期:LLM 裁判产出质量复合分,正则与 AST 评分器交叉验证;弃坑由确定性 1 文件分类器独立判定(<0.3 分且 ≤2 源文件或 200 秒内退出);基线含 Solo、Shared-only、Parallel-merge(独立工作区事后文件并集)与 ChatDev 式串行流水线。

技术新颖性

新颖性有四层。其一,与 CodeCRDT 的隐式观察驱动相对,显式协调产生不同的经验签名:CodeCRDT 因字符级并发同文件编辑产生 5-10% 语义冲突与双峰速度分布,AgentRoom 的文件级 claim 消除并发同文件编辑(头条池 0% 语义冲突),把经验问题从'提速多少'转换为'抑制何种失败模式',并测出 CodeCRDT 未测量的弃坑指标。其二,等算力六条件消融是方法学贡献:同一 Sonnet、同一 Claude Code CLI、同预算下 ChatDev 0.333/并行合并 0.456/Solo 0.544/仅共享 0.575/共享+提示 0.588/AgentRoom 0.669 的单调序,把 +0.213 干净归因到协调通道。其三,Chubby 咨询锁的移植有实质改造——合作者从内核换成智能体,越界写保留字节并留痕,兼顾互斥与跨文件协作。其四,证据分层设计(Tier I 裁判无关二分类、Tier II LLM 裁判、Tier III 探索性)显示对评分器可操纵性的清醒认知:头条跨模型 ES 用 AST 评分器以免疫仪式性防御代码。

AgentRoom 架构:N 个编码智能体共享 CRDT 介导的工作区;MCP 服务器暴露 claim、release、broadcast、state、read
Figure 2: AgentRoom 架构:N 个编码智能体共享 CRDT 介导的工作区;MCP 服务器暴露 claim、release、broadcast、state、read
单次 T4 Sonnet AgentRoom ×2 运行中的实时 CRDT 合并
Figure 3: 单次 T4 Sonnet AgentRoom ×2 运行中的实时 CRDT 合并

实验结果

按证据强度分层。Tier I(最强):弃坑抑制跨 12 个模型×任务层复制——Solo 40/131(31%)弃坑 vs AgentRoom 5/94(5%),合并 CMH 比值比 13.7(95% CI [3.9, 48],$p<10^{-5}$,Tarone 同质性 p=0.92);T4 弃坑 32%→5%(p=0.0001)、T5 23%→0%(p=0.031)。方差压缩 30-45%:Sonnet T4 σ 0.23→0.14、Haiku 0.25→0.17、Codex 0.27→0.15 三模型全复制,T4 Sonnet 均值 0.544→0.669(p=0.022)。Tier II:T4 六条件单调序 ChatDev 0.333 ≪并行合并 0.456 <Solo 0.544 <仅共享 0.575 <共享+提示 0.588 <AgentRoom 0.669;对并行合并 +0.213(Welch t=3.35, p=0.003),对 ChatDev p=0.006 且 6 次真实运行 4 次弃坑而 AgentRoom 0/10;组件探针给出序关系仅共享<提示<完整房间,最大步在 MCP 协调层(n=7 区间跨零)。Tier III:$N=2$ 甜点(×1-×4 依次 0.544/0.669/0.553/0.489);Sonnet+Codex 异构 0.721 最高;2×Haiku 0.662 对 1×Sonnet 0.544 只花一半成本(p=0.036);Rust/DevBench 方向一致但统计力不足。结论:起作用的是协调,而非并行或 CRDT 合并。

T4 Sonnet 4.6 六条件消融(LLM 裁判复合分,budget-fair 30-700s 池)
Table 1: T4 Sonnet 4.6 六条件消融(LLM 裁判复合分,budget-fair 30-700s 池)
跨模型头条 Emergence Score(ES)表
Table 2: 跨模型头条 Emergence Score(ES)表
异构配对结果(T4,Sonnet 主智能体)
Table 4: 异构配对结果(T4,Sonnet 主智能体)
跨模型消融(Haiku 与 Codex,附录 B)
Table 8: 跨模型消融(Haiku 与 Codex,附录 B)
T4 六条件协调消融:AgentRoom 是最佳条件,而无协调的并发(parallel-merge)和串行交接(ChatDev 式)低于单智能体基线
Figure 1: T4 六条件协调消融:AgentRoom 是最佳条件,而无协调的并发(parallel-merge)和串行交接(ChatDev 式)低于单智能体基线
三个 CLI 稳定模型在 T4 上 Solo(板岩色)vs AgentRoom ×2(铁锈色)的分数分布
Figure 4: 三个 CLI 稳定模型在 T4 上 Solo(板岩色)vs AgentRoom ×2(铁锈色)的分数分布
T4 Sonnet 4.6 智能体数量缩放(N=1-4,budget-fair 池)
Figure 5: T4 Sonnet 4.6 智能体数量缩放(N=1-4,budget-fair 池)
按模型和任务细分的弃坑结果(Section 4.1 引用)
Figure 6: 按模型和任务细分的弃坑结果(Section 4.1 引用)
查看结构化数据
任务指标本文基线提升
T4 金融账本(Express.js/TypeScript,600s)任务弃坑 1-file 弃坑运行占比 / 合并 CMH 比值比 AgentRoom ×2:5/94(5%),OR=13.7,95% CI [3.9, 48],p<10⁻⁵ Solo 单智能体:40/131(31%) 弃坑几率降至基线的约 1/13.7,T4 上 32%→5%(p=0.0001)
T4 Sonnet 4.6 六条件消融 LLM 裁判质量复合分 [0,1] AgentRoom 0.669(n=14,σ=0.140) 并行合并 0.456;Solo 0.544;ChatDev 式串行 0.333 对并行合并 +0.213(Welch p=0.003);对 Solo +0.125(p=0.022);对 ChatDev(p=0.006)
T4 运行间稳定性(Sonnet/Haiku/Codex) 质量分标准差 σ(无种子托管模型) 0.14 / 0.17 / 0.15 Solo:0.23 / 0.25 / 0.27 σ 压缩 1.5-1.9 倍(约 30-45%),三模型方向一致
T5 房间后端对比(MCP 聊天 vs CRDT 状态) 成功运行数 / 得分 CRDT 状态后端 7/7 成功 MCP 自由文本聊天 1/2(一次双声明冲突未检出,得分 0.088、零测试通过) 结构性消除聊天式声明解析失败(定性证据,样本小)
T4 成本等价跨模型对比 质量复合分 / 美元成本 2×Haiku AgentRoom:0.662(n=17),约一半成本 1×Sonnet Solo:0.544(n=32) 质量 +0.118(Welch t=2.10, p=0.036),成本减半(探索性,作者自承带偏差)
跨语言外推(Rust+axum T4 转置 / DevBench Python) LLM 裁判复合分 / 通过项目数 Rust 0.740(n=4);DevBench 8/10(Haiku ×2,零语义冲突) Solo:0.714(n=5);7/10 方向一致但各自统计力不足,属机制可移植性抽查

局限与改进

作者承认的局限:头条统计只覆盖 4 个后端域和 3 个 CLI 稳定模型,每格 n 仅 7-35,Gemini 3 修复 MCP 帧格式后仅 5+5 功效不足,Codex-mini 因厂商 CLI 并发 MCP 崩溃被剔除;所有头条格共享 Express.js/TypeScript 单一运行时,Rust/Python 只是机制可移植性抽查;LLM 裁判是主评分器但任务不带 held-out 执行测试集(vitest 是智能体自写的),只能声称质量复合分而非执行验证的正确性,靠正则/AST 交叉验证与跨厂商裁判(Codex 更严 −0.151 但保序)部分缓解;组件探针 n=7 时 MCP 步长置信区间跨零,只能给序关系;托管模型无种子、服务端可漂移,不声称逐位可复现。我的补充观察:任务全是'从零建仓库'型合成任务,缺少真实遗留库维护场景;600-900 秒墙钟极短,更长时程下单广播通道饱和可能更严重;协议遵守只有 6/6 认领、2/6 修 bug 的池级统计,偏离与质量的关系未做剂量响应;N=2 甜点可能是单通道实现产物而非原理性结论。

独立分析的弱点

弱点一:评估闭环缺执行 oracle。任务不带人工黄金测试集,vitest 由智能体自写自跑,质量复合分可能被'写更多看似完整的代码'拉高,AST 评分器虽对仪式性防御代码免疫,但正确性维度(权重 0.30)仍靠裁判主观判断。改进:为每个任务维护人工 held-out 测试套件,把通过率升级为主要指标。弱点二:样本量吃紧。多数关键格 n<20,Gemini 仅 5+5,异构配对 0.721 仅 n=3,不少'方向一致'的结论无法与噪声区分。改进:用确定性弃坑分类器做廉价大规模初筛,贵的 LLM 裁判只用于关键格。弱点三:单广播通道+单运行时。N≥3 质量衰减留作开放问题,但 Figure 5(c) 广播消息超线性增长强烈提示通道饱和,未做多通道消融。改进:实现按模块分流的多频道广播并重跑 ×3/×4。弱点四:协议遵守是黑箱,越界写入次数、广播沉默时长等遥测未与质量关联。改进:把房间日志结构化为运行级特征,量化遵守率-质量剂量响应。弱点五:成本核算只算 API 费用,未计调试 CRDT 合并历史与考古房间消息的人类侧协调成本。

未来方向

作者明确提出的方向:单广播通道饱和的多通道消融(Figure 5 右面板的开放问题);把结果推广到编码之外的任务域('是否泛化超出编码任务仍开放');与 CodeCRDT 互补组合——其字符级合并可反向用于 AgentRoom 已声明文件内的并发编辑;扩大跨语言评估规模。基于成果可延伸:其一,把房间原语推广为通用智能体状态层——除文件所有权外,对数据库 schema、API 端点、测试文件做分级锁与租约(lease)机制,解决长任务中智能体卡死后的声明回收;其二,弃坑预测与运行时干预:广播沉默时长、声明-写入间隔等房间状态是弃坑领先指标,可动态注入队友或自动拆分任务;其三,N=2 甜点与异构配对(Sonnet+Codex 0.721 最高)提示存在组合优化问题,可用 bandit 方法在线学习最优人数与配对;其四,与真实工程流程集成:room_state 天然映射到 PR review、CODEOWNERS 与 Git 分支语义,值得做生产级插件验证结论迁移;其五,语义级合并:把类型检查器/编译器反馈做成语义冲突探测器,在 SEC 之上把 2 秒字节合并升级为意图合并。

复现评估

复现材料较充足:发布物附带每运行日志(含模型标识符与每智能体调用字符串)、钉死的 CLI 版本(Claude Code 2.1.119、Codex CLI 0.120.0、Gemini CLI 0.40.1)、弃坑分类器 codebook(附录 B.12 含阈值敏感性扫描)、任务规格与可重放的池级房间日志。依赖组件全开源:pycrdt/Yrs、MCP SDK,基线可从描述重建(ChatDev 基线是忠实自建复刻而非原框架,因原版 OpenAI-only 且依赖腐烂)。算力门槛主要是 API 费:头条约需数百次运行(12 层×每层 5-35 次×六条件),单次 300-900 秒墙钟,估算几百至上千美元。复现难点:托管模型服务端漂移(作者明示不声称逐位可复现,但对比为同 CLI 同预算配对);GPT-5.4-mini 并发 MCP 崩溃、Gemini 的 Content-Length vs NDJSON 帧等环境脆弱性会以新形式出现;裁判分数依赖 Sonnet 4.6 具体版本,rubric 若未随代码发布则 0.01 量级难精确对齐。总体判断:Tier I 弃坑结论稳健易复现,Tier II 序关系应能保住、绝对分数难精确对齐。