用 Rust 重写 Prime Agent

自我们推出 Prime Agent[1]以来,在 8 月,它已被下载超过 300,000 次,并处理了超过 8 万亿个 token。今天,我们很高兴推出更快、更简洁、更可靠的 Prime Agent,它用 Rust 从头重写。

在两周多的时间里,Prime Agent 编排了一个由 2,000 多个智能体组成的集群来端到端重写自身,在 10,000 多个 Prime Sandboxes 上运行,使用了来自 Prime Inference 的 GLM-5.3 端点的超过 2000 亿个 token。这次 Rust 重写对 Prime Agent 的多智能体能力进行了压力测试,包括我们一直在构建的沙箱和推理基础设施,用于支持大规模智能体集群、自主研究和强化学习。

为确保与 TypeScript 版本的功能对等,Prime Agent 编排子智能体对依赖进行拓扑排序,并用有限状态机来组织循环计算和正确性检查。与此同时,我们重写了代码架构,以便更易于维护和开发。随后,我们使用运行时基准测试和真实的 Prime Agent 轨迹来爬山优化性能指标并排查 bug。现在,Prime Agent 运行得更快,使用的资源比大多数编码智能体框架更少。

子智能体深度

父级深度 1深度 2深度 3

Rust 实现

192.99B token
1,981 智能体

性能爬山优化

35.70B token
228 智能体

为什么选择 Rust

TypeScript 帮助我们快速交付了 Prime Agent,但它的类型是可选的,并且在运行时消失,错误以未检查异常的形式传播,像渲染和解析大型会话这样的 CPU 密集型工作与键盘输入在单个事件循环上竞争,而且每个进程都要付出 JavaScript 运行时和垃圾回收器的代价。我们希望保持同样快速的交付节奏,同时随着代码增长将其维持在更高标准,而 Rust 非常适合这一点:

  • 性能:Prime Agent 是一个长期运行的守护进程,每个会话有一个工作进程,而无垃圾回收器的原生代码是我们所取得的大部分内存和启动时间收益的来源。
  • 并发:一个守护进程同时流式传输模型输出、运行工具调用、在智能体之间转发消息,并为每个已连接的客户端提供服务。Rust 的Send和Synctrait 让编译器检查哪些数据可以在线程之间移动,哪些可以共享。
  • 编译期保证:穷尽式枚举、所有权和生命周期在代码运行之前就排除了一整类 bug,而 Clippy 的 pedantic lint 又增加了数百项检查,这在智能体编写大部分代码时尤为重要。

除了这些明显的性能提升之外,这次重写还让我们有机会重新思考设计选择。我们对代码库进行了大幅模块化,并正在收获这次重写带来的回报,包括 Windows 支持、会话崩溃隔离,以及更一致的守护进程协议。

Prime Agent 如何重写自身

我们的目标是让智能体尽可能少地依赖人工干预,自主完成重写。因此,所需的人工工作是搭建恰当的验证机制,以实现大规模的自主部署。我们沿用了此前自动 Rust 翻译工作中类似的设置[2]。每个规范覆盖了不同种类的对等性:

  • TUI 对等性:一套差分测试套件将 TypeScript 和 Rust 二进制文件并排运行,针对同一个脚本化模型进行对比,并 diff 各自渲染出的终端帧。它覆盖了用户流程,包括启动、斜杠菜单、工具调用、压缩、智能体视图、会话恢复、子智能体和崩溃恢复。
  • 测试框架对等性:同一次运行会 diff 会话记录以及每个二进制文件发送给模型提供方的请求,因此两者从相同输入产生相同的会话。
  • 协议对等性:守护进程协议中的所有消息类型都会对照 TypeScript 实现进行检查,确保我们的 ACP 和守护进程协议 API 保持一致。
  • 功能对等性:由于脚本化流程无法覆盖整个界面,智能体逐个组件审计了 TypeScript 产品,将每个组件归类为匹配、部分匹配或缺失。

有了对每种对等性的客观检查,智能体就能衡量自身进展,并在变更合并前捕获回归,这让我们得以减少人工审查。剩余的 bug 和行为差异主要通过内部使用发现,这指导了我们后续在缺失功能、可靠性和界面打磨方面的工作。

我们在两个 8 核按需 CPU 节点上运行了所有编排器及其智能体,每个节点支持超过 100 个并发子智能体及其各自的 CPython 内核。此外,由于当数十个智能体同时运行时,编译、类型检查和差异比较会让任何单台机器饱和,我们为智能体构建了工具,将繁重工作外包给 Prime Sandboxes,从而使我们能够高度并行化移植工作。

TypeScript and Rust slash-command menus side by side, with differing terminal cells highlighted in amber in the Diff panel.
一个客观的 TUI 一致性验证器会比较 TypeScript 和 Rust 版本的终端帧,并突出显示差异。

有限状态机的编排

一个单一的根智能体编排了这次重写,并将工作划分为拓扑排序的任务。根智能体不编写任何产品代码,从而可以自由地监控每个任务、合并已完成的工作,并在与我们共同确定优先级和决策的同时保持对重写的全局概览。我们还将生成和验证放在不同的智能体中,因为编写代码的智能体在评估代码时会带有偏见。因此,编排器分配的每个任务都要经过四个智能体:

  • 规划者:创建整体机器规格,包括功能设计、作为基准真相的 TypeScript 行为以及验证器(一致性检查)
  • 实现者:在专用的工作树中编写 Rust 代码,以便功能可以并行开发。
  • 审查者:以对抗性的方式检查拉取请求,使用不同的模型,并在与实现者不同的上下文中,寻找该变更错误的理由。
  • 验证者:在一个全新的 Prime Sandbox 中编译并运行该功能的一致性检查和测试。

审查或验证失败会将功能连同发现的问题一起送回实现者,只有在两者都通过后 PR 才会合并。我们正在将这种模式构建到 Prime Agent 中,以编排一个有限状态机工厂,这样像这样的工作流就可以一次定义、重复使用并更新。

Prime Agent orchestration workflow

架构重新设计

移植到 Rust 也给了我们重构代码库的机会。长期收益的很大一部分正来源于此:

  • 模块化:代码被拆分为九个 crate,依赖图是单向的,由 Cargo 强制执行,而 TUI 唯一的内部依赖是共享类型 crate。最大的源文件现在约 2,500 行,相比 TypeScript 的约 15,000 行有所下降,且没有超过 5,000 行的文件,而 TypeScript 中有四个。
  • 隔离:每个会话都在一个小型 supervisor 下运行于自己的 worker 进程中,因此一个会话的失败不会影响其他会话继续运行,并且会话会持久化到磁盘上,客户端可以在重启后重新连接。
  • 平台抽象:传输、进程控制和文件锁定都位于平台特定的接口之后,因此像 Windows 支持这样的工作只需实现这些 trait,而无需重新调整守护进程的接线。
  • 单一协议定义:客户端、守护进程和每个 worker 都针对共享类型 crate 中相同的消息类型进行编译,因此对协议的更改会在所有使用它的地方被检查。
  • 目录驱动的模型:将我们的模型和 MCP 列表移植到一个在运行时获取的独立目录中,使我们能够在不发布 Prime Agent 新版本的情况下推出新模型和插件。

完善工作

虽然自主工作流走得比我们预期的更远,但一致性检查只验证了它们所覆盖的行为。一旦主 RLM 循环达到一致性,我们就把所有重写智能体迁移到 Rust 上,使我们能够大规模地 dogfood Rust 版本(现在 Prime Agent Rust 正在递归地改进自己!)。后来,我们把内部团队迁移到 Rust 构建版本用于日常工作,这暴露了差分测试覆盖范围之外的 bug 和缺失行为。在我们的 dogfood 周期中,我们让智能体审查所有 beta 用户的日志和追踪,使我们能够自动诊断和解决用户发现的运行时和智能体问题。我们还把这次重写当作重新设计一些 UX/TUI 流程和面向模型的 API 的机会。

将重写提升到发布质量需要后续数周的工作,从完成功能移植和修复 bug 到改进性能和打磨界面。Prime Agent 仍然编写并测试这些更改,而我们让人类参与其中,负责发现问题、指导更改并审查所有结果。

爬山性能优化

在实现功能对齐后,我们希望优化 Prime Agent 在所有用户流程中的运行时性能。我们采用了与重写相同的方法:为智能体提供一种客观衡量自身进展的方式。我们构建了一个基准测试框架,用于在多种运行时指标上衡量 Prime Agent 的性能,并让 Prime Agent 通过深思熟虑的改进来爬山优化其速度和资源使用。

已合并打开已关闭

9 月 26 日

27

28

29

30

10 月 1 日

2

3

4

#2856 限制会话目录缓存

性能基准测试在全新的 4 核、8 GB Prime Sandbox 上,针对每个基准分别评估 Rust 和 TypeScript 版本的 Prime Agent,以及其他智能体框架,并通过噪声检查剔除任何过于不稳定而无法比较的结果。智能体在通过屏幕模拟器驱动的真实终端中运行,对接脚本化的模型,因此计时反映的是用户所见的情况,并排除了推理时间。

有了这套框架后,第二个编排器运行了一个为期三天的爬山循环,目标只有一个:在不破坏功能对齐的前提下改进基准测试结果。每个实验都遵循相同的流程:

  1. 智能体对基准测试进行性能分析,找出时间和内存消耗在哪里,将最大的开销转化为一系列假设,然后由编排器分配给工作单元。
  2. 工作单元在同一个沙箱上构建当前代码和候选改动,并以交替顺序运行它们,同时运行相邻的基准测试以捕捉其他地方的性能回退。
  3. 两个审查智能体分别基于不同的前沿模型,检查行为是否仍与 TypeScript 一致、在改动声称保持字节一致的地方输出是否仍字节一致,以及面向模型的接口上是否有任何回退。
  4. 改动被合并,下一个实验从新的基线开始测量。

我们刻意没有给这个循环设定数字目标,因为固定的阈值往往会变成停止点。智能体唯一的目标就是在可测量的收益仍然存在的情况下,持续改进基准测试而不破坏功能对齐。在整个爬山循环中,该循环记录了超过 144 条实验和审计记录,合并了超过 69 项有效改动以提升性能。以下是我们看到的一些重要领域中的显著改进:

TS 版本Rust 爬山优化前Rust 爬山优化后

冷启动

输入就绪延迟

14.18×更快

热启动

输入就绪延迟

13.34×更快

大会话内存

进程树 RSS · 10 MiB 会话

4.76×更小

安装体积

完整安装

2.89×更小

智能体视图

视图切换延迟

6.09×更快

大部分收益来自三类改动:将工作移出启动和渲染路径、用事件驱动的等待替代轮询循环,以及在大会话加载完成后立即释放内存。

结果

总体而言,我们的 Rust 重写以及随后的性能爬山优化让 Prime Agent 显著更快、更节省资源。输入就绪时间比 TypeScript 快约 14 倍,启动后内存占用减少超过 80%,Prime Agent 是现有最快的编码智能体框架之一。

Prime Agent (Rust)Prime Agent (TypeScript)Claude Code v2.1.289Codex CLI v0.160.0Pi v1.0.3Hermes Agent v0.21.5
首次绘制从启动到首次可见输出23.6 ms±0.6快 30.63×722.8 ms±15.1264.6 ms±5.8296.8 ms±2.7306.3 ms±6.71,715.3 ms±10.3
输入时间(冷启动)从全新启动到可以输入55.8 ms±4.9快 13.22×737.8 ms±13.9348.4 ms±8.2324.6 ms±4.9317.7 ms±8.02,094.5 ms±23.5
输入时间(热启动)重复启动到可以输入42.4 ms±4.3快 12.96×549.6 ms±10.0345.1 ms±6.2321.3 ms±9.2240.4 ms±5.92,097.1 ms±40.8
安装体积安装占用的磁盘空间59.6 MB±0.0小 2.89×172.1 MB±0.0492.4 MB±0.0446.8 MB±0.0456.0 MB±0.0960.1 MB±0.0
内存(RSS)启动后的整个进程树106.0 MB±1.3小 5.73×607.4 MB±0.9226.9 MB±0.4344.4 MB±3.1138.1 MB±0.7194.6 MB±0.3

外部框架的结果是用我们自定义的运行时测试套件测得的。由于没有统一的基准测试标准,比较结果应谨慎解读。

这种更模块化的代码库和更强的编译期检查也将帮助我们更快地交付新能力,并在错误到达用户之前捕获更多问题。

下一步

随着我们的 Rust 移植版本完成,我们将同样的细致关注带到了 Prime Agent 的每一个部分,从日常的系统交互到跨多个智能体的复杂工作。既然基础设施的改进已经完成,我们正在加速推进能力和评估,并将这次重写背后的多智能体工作流开放给你使用。

Prime Agent 也将更紧密地融入 Prime Intellect 生态系统,让你能够跨整个技术栈工作,包括云端智能体集群、推理、追踪、沙箱、评估、托管训练等。

通过这次重写,我们还发布了支持原生 Windows(测试版)并通过 homebrew 安装的 Prime Agent。Prime Agent 仍然是开源并且只需一条命令即可安装:

curl -fsSL https://app.primeintellect.ai/prime-agent/install.sh | sh

或在 Windows 上:

irm https://app.primeintellect.ai/prime-agent/install.ps1 | iex

如果你想参与 Prime Agent 的开发,我们正在招聘。

参考文献

[1] Karten, S., Zhang, A. L., Thomas, K., Müller, S., Bakouch, E., Auras, D., Senghaas, M., Obeid, F., Dunas, K., Hagemann, J., & Jaghouar, S. (2026). Prime agent: A self-improving RLM harness [Preprint]. arXiv.https://arxiv.org/abs/2608.23552

[2] Karten, S., Appapogu, R. D., & Jin, C. (2026). Automatic generation of high-performance RL environments. In Proceedings of the Third Conference on Language Modeling (COLM 2026).https://openreview.net/forum?id=UmpTwqxiY0