作者读完 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,然后基于实际是否成功来给奖励。
完整流程
- 通过 Prime Inference 把基础模型加入 OpenCode,使用它
- OpenCode 插件在每个用户和助手 turn 都用 git bare repos 对代码库做快照。为什么每个 turn?因为用户可以在 Agent 完成后、发送下一条消息前继续编辑代码,所以每个 turn 都快照才能判断 Agent 的修改是否持久有效(这也是 Cursor 用的指标)
- 把 git bare repos 推到 GitHub,把 OpenCode session 推到 HuggingFace 数据集
- 为 Prime Intellect 的托管训练写一个 base TOML 配置文件
- 启动 RL run
- 如果模型有提升就部署 checkpoint,并更新 OpenCode 配置指向新模型
- 继续
奖励设计
作者做了一个简单的环境和基于"任务是否成功"的占位奖励函数。可以 fork 后接入自己的奖励函数。下一个要加入的奖励是简洁度——希望编程 Agent 写出简洁的代码,而不是默认生成大量防御性代码、重复抽象、忽略现有类型等。
难的部分没变
数据、评估(evals)和评分规则(rubrics)仍然是核心挑战。这三个不是靠 CLI 自动化能解决的,需要人工设计和迭代。CLI 只是把"管道"部分自动化,让研究者把精力集中在真正重要的地方。
最有价值的不是 CLI 本身,而是"把真实对话变成 RL 训练数据"这个思路。21.8 亿 token 的 Codex 使用量是沉睡的资产——用户每次与 Agent 的交互都是一条轨迹,每条轨迹都带着成功或失败的信号。</parameter>