作者读完 Cursor 每五小时发布一个新 Composer checkpoint 后,想建一个类似的系统。发现开源生态里已经有现成的工具和基础设施,只需要做"管道"把它们连接起来。

rollouts CLI

作者做了 rollouts CLI,把持续学习循环简化为四个命令:

rollouts setup
rollouts learn start my-session --config rl.toml
rollouts learn use my-session
rollouts learn continue my-session

用的是 Prime Intellect 的开源生态(OpenCode + Inference + 训练基础设施)。

核心思路

作者笔记本上有约 21.8 亿 token 的 Codex 使用量。每条消息里都有大量有价值的信号——这些是真实的、多轮的、难以人工标注的训练数据。传统做法是基于用户消息内容、工具输出等做 SFT 变体,但真正有价值的是让 Agent 在沙盒里产生真实的 rollout,然后基于实际是否成功来给奖励。

完整流程

  1. 通过 Prime Inference 把基础模型加入 OpenCode,使用它
  2. OpenCode 插件在每个用户和助手 turn 都用 git bare repos 对代码库做快照。为什么每个 turn?因为用户可以在 Agent 完成后、发送下一条消息前继续编辑代码,所以每个 turn 都快照才能判断 Agent 的修改是否持久有效(这也是 Cursor 用的指标)
  3. 把 git bare repos 推到 GitHub,把 OpenCode session 推到 HuggingFace 数据集
  4. 为 Prime Intellect 的托管训练写一个 base TOML 配置文件
  5. 启动 RL run
  6. 如果模型有提升就部署 checkpoint,并更新 OpenCode 配置指向新模型
  7. 继续

奖励设计

作者做了一个简单的环境和基于"任务是否成功"的占位奖励函数。可以 fork 后接入自己的奖励函数。下一个要加入的奖励是简洁度——希望编程 Agent 写出简洁的代码,而不是默认生成大量防御性代码、重复抽象、忽略现有类型等。

难的部分没变

数据、评估(evals)和评分规则(rubrics)仍然是核心挑战。这三个不是靠 CLI 自动化能解决的,需要人工设计和迭代。CLI 只是把"管道"部分自动化,让研究者把精力集中在真正重要的地方。