使用 AI 扩展 Rust 开发:来自 10 万行共识引擎的经验教训
AI 辅助编程的前景往往在“氛围编程”(vibe coding)的热潮与维护复杂系统的现实之间波动。然而,当应用于分布式共识等严谨领域时,AI 可以超越简单的自动补全,成为生产力的主要驱动力。
在最近的一个项目中,一名开发者通过实现一个基于 Rust 的 multi-Paxos 共识引擎,对 AI 编程代理的极限进行了压力测试。目标是使 Azure 的 Replicated State Library (RSL) 现代化,解决长达十年的局限性,例如缺乏流水线处理、缺失对非易失性内存 (NVM) 的支持,以及对 RDMA 硬件感知的局限性。结果是生产力的巨大飞跃:在约四周内编写了 10 万行 Rust 代码,随后的性能调优将吞吐量从每秒 2.3 万次操作提升到了 30 万次。
AI 驱动的工作流
实现这种规模的输出不仅仅需要单一工具。该开发者使用了一套代理工具,包括 GitHub Copilot、Claude Code、Codex、Augment Code、Kiro 和 Trae。目前的主要驱动力是 Claude Code 和 Codex CLI,并使用 VS Code 作为查看差异和进行微调的界面。
一个值得注意的观察是向以 CLI 为中心的工作流转变,这允许异步开发周期。通过将 AI 视为主要的实现者,而将人类视为架构师,开发者能够在极短的时间内实现 RSL 的完整功能集——包括领导者选举、日志复制、快照和配置更改。
确保正确性:由 AI 为 AI 编写的代码契约
实现像 Paxos 这样复杂的协议充满了风险;单个逻辑错误就可能导致灾难性的状态分歧。为了应对这一点,该项目超越了标准的单元测试,采用了 代码契约 (code contracts)。
代码契约为关键函数定义了前置条件、后置条件和不变性。在该项目中,AI 在三个不同的层面被利用:
- 契约生成: 使用高端模型(如 GPT-5 High 或 Opus 4.1)来编写详细的契约。例如,Paxos 实现中的
process_2a方法利用了 16 个不同的契约来确保状态转换是有效的。 - 针对性测试生成: 一旦契约建立,AI 会生成特定的测试用例,旨在触发这些契约的后置条件。
- 基于属性的测试: AI 将这些契约转化为基于属性的测试,使用随机输入来探索状态空间并发现手动测试可能会遗漏的边缘情况。
当一个 AI 生成的契约识别出一个微妙的 Paxos 安全性违规时,这种方法证明了其价值,否则该问题会导致严重的复制一致性问题。
轻量级规格驱动开发 (SDD)
虽然僵化的 SDD(需求 $\rightarrow$ 设计 $\rightarrow$ 任务列表)可能会成为维护负担,但该项目采用了使用 spec kit 的“轻量级”版本。
工作流包括通过 /specify 生成包含用户故事和验收标准的规格说明 Markdown 文档,然后使用 /clarify 让 AI 进行自我批判并建议缺失的场景。一旦规格说明得到完善,AI 会为单个用户故事生成计划——这是当前 AI 代理的“甜点区”——并执行实现。
激进的性能优化
由于任务的迭代性质,性能调优是 AI 擅长的领域。开发者遵循一个紧凑的循环来将吞吐量从 2.3 万次/秒提升到 30 万次/秒:
- 插桩 (Instrumentation): AI 在所有代码路径中对延迟指标进行插桩。
- 分析: AI 编写 Python 脚本来分析追踪日志并计算分位数,以寻找瓶颈。
- 优化: AI 提出并实现更改,例如最小化内存分配、应用零拷贝技术以及减少异步开销。
- 验证: 重新测量并重复。
批判性视角与反论点
尽管指标令人印象深刻,但该项目在开发者社区中引发了关于 AI 生成代码性质的重大辩论。
“AI 垃圾” (AI Slop) 的担忧
一些批评者指出,原始的 RSL 库只有 3.6 万行 C++。AI 生成的 Rust 版本达到了 13 万行,这表明可能缺乏效率。正如一位评论者所言:
"Rust 应该是更具表达力和简洁的。然而,AI 生成了 13 万行代码。我猜没人理解这段代码是如何工作的,也没人能说出它是否真的有效。"
借用检查器 (Borrow Checker) 的挣扎
AI 生成 Rust 代码的一个常见痛点是 LLM 倾向于“对抗”借用检查器。与其重新思考所有权模型,AI 往往默认通过大量使用 .clone() 或将一切包装在 Arc<Mutex<...>> 中来满足编译器。
"LLM 的路径直奔目标。问题:代码无法编译。解决方案:更多的 clone()"
这表明,虽然 AI 可以生成能够 编译 且 通过测试 的代码,但它可能并不总是能生成 地道的 (idiomatic) Rust,可能会为了安全性而牺牲活跃性问题(如死锁)。
测试密度
对于 13 万行代码,仅有 1,300 个测试,一些人质疑对于像共识引擎这样复杂的系统,测试与代码的比例是否过低,尤其是当测试本身也是 AI 生成的且可能未经过完整的人工审计时。
结论
在几周而非几个月内构建一个超过 10 万行的系统,证明了如果由一位称职的架构师引导,AI 代理可以处理大规模的架构提升。通过结合代码契约、轻量级规格说明和迭代性能循环,开发者成功实现了关键基础设施的现代化。然而,“代码行数”与“地道的质量”之间的张力仍然是下一代 AI 辅助工程的核心挑战。