FlashRSI 是什么:Agent 递归自我改进统一框架

Coding Agent 常把同一类错误犯第二遍:忘跑测试、提示词越写越长、Skill 改完对不上评测。递归自我改进(RSI)想做的事,就是把「改提示 / 改 Skill / 改 harness 资源 → 再跑任务 → 留证据」收成可复现实验。中国人民大学 NLPIR 实验室开源的 FlashRSI(Apache-2.0)把多种 RSI 算法、原生 harness 和基准套在同一套 CLI 上。截至 2026-11-02,GitHub API 显示约 227 star。
星标、许可证、命令与算法名单均核自仓库 README 与文档站(核验日 2026-11-02)。本文按一手文档做概论;分数与迁移表一律视为项目方实验报告,不替你承诺本地复现结果。
RSI:改资源,再拿证据说话
很多人说的「Agent 自我改进」,听起来像模型权重在变。FlashRSI 文档里的 RSI 更具体:在声明好的编辑范围内改 Agent 的提示、Skill、工具或运行时文件,用原生 harness 跑完整候选,再用基准打分决定留下哪一版 Snapshot。模型可以当 Worker 提改动,也可以当 Target 执行任务,但「变强」的载体是可版本化资源,不是神秘的内部状态。
文档把实验拆成四块,各自显式出现在配置里:
- 算法:在 scope 内提出候选改动,并用反馈决定保留或丢弃。
- Harness:真正执行完整候选的边界——提示、工具、运行时怎么接到模型上。
- Worker:负责提议改动的一侧,可与 Target 用不同模型与密钥。
- Benchmark:任务、数据、打分与切分,把候选变成可对比分数。
一次 run 的路径是固定的:先抓基线 Snapshot → 算法在范围内提案 → 原生 harness 跑完整候选并记轨迹 → 基准打分并决定保留或丢弃 → 在同一 run 目录里对照配置、资源谱系、调用与最终测试结果。文档强调:比较有用的前提是只换一块(算法 / harness / 基准),其余保持可见;否则分数差了也不知道差在哪。
RSI 要做的是:给改动划 scope、给候选留 Snapshot、给分数留 held-out。再喊一句「请认真测试」解决不了复现问题。
AgentSnapshot:把 Agent「可编辑面」钉成版本
README 写明:MiniAgent、Claude Code、Codex、Pi、Hermes、OpenClaw、OpenCode 等 harness,会把提示、Skill、工具、配置、hooks、插件、记忆与运行时资源映射进版本化 Snapshot。每次候选不可变;配置会脱敏后落盘;Target / Worker 轨迹、指标、用量与任务产物放在同一实验目录。对研究或工程复盘来说,这比「聊天里口口相传哪次提示更好」硬得多。
文档 quickstart 列出的输出示例包括:
end-summary.md:完成状态、最终测试分、用量。result.json:选中的snapshot_id、测试分与任务信息。snapshots/:初始与候选资源版本。trajectories/:任务答案、Worker 调用、选择决策。config.yaml:解析后的配置(凭证已脱敏)。
小样本只用来验证管线;要谈「有没有改进」,文档要求对初始与选中 Snapshot 在同一批 held-out 任务上评估。也可以单独用 flashrsi evaluate 把某个已保存 Snapshot 转到另一个兼容基准上打分,不必再开 Worker 搜索。
| 仓库 | RUC-NLPIR/FlashRSI |
|---|---|
| 许可证 | Apache-2.0 |
| GitHub star | 约 227(2026-11-02 API) |
| 文档 | ruc-nlpir.github.io/FlashRSI |
| 定位 | Agent RSI 统一实验框架:算法 × harness × 基准 |
支持哪些方法与 harness
README 当前写法是:13 种 RSI 方法、30 个基准套件、7 类 harness 集成(MiniAgent、Claude Code、Codex、Pi、Hermes、OpenClaw、OpenCode)。另有 Hugging Face 上 pinned 的准备配置,方便对齐数据切分。方法表里可见的适配包括:
- 指令搜索:OPRO、GEPA、EvoPrompt——主要在提示 / 指令空间里搜索。
- Skill / 上下文演化:SkillOpt、Evo-Harness、ACE(Playbook 积累)等。
- Harness 迭代:AHE、Meta-Harness、RRSI——连续编辑 harness 侧资源。
- 归档 / 分支演化:ADAS、DarwinX、ModularRSI、Arbor 等。
各自声明不同的编辑 scope。只能改指令的方法,不会动你的 Skill 目录;需要 Agent Worker 的 harness 编辑方法,条件写在选型指南里。Quickstart 默认示例走 SkillOpt + MiniAgent + SearchQA:用一小撮题目做 train / dev / test,验证「改 Skill → 跑 harness → 留证据」闭环。正式研究要换更大基准与自己的 held-out 切分。仓库还附了 Claude Code / Mini-Agent 上的 source、近域迁移与远 OOD 矩阵;读表时记住那是项目方实验报告,换模型与数据后数字会变。
文档里的安装与命令
官方要求 Python 3.11+(文档写 3.12 覆盖更广)。仓库示例:
git clone https://github.com/RUC-NLPIR/FlashRSI.git
cd FlashRSI
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[all]"
也可用 uv sync --extra all。Harbor 相关任务需另装 harbor extra;Docker 任务需本机 Docker。跑实验前分别配置 Target 与 Worker 密钥,再例如:
flashrsi run \
--config examples/quickstart.yaml \
--algorithm skillopt \
--benchmark searchqa \
--agent-harness miniagent \
--model <你的模型名> \
--worker-model <你的模型名> \
--set agent.llm.api_key="$TARGET_API_KEY" \
--set algorithm.worker.llm.api_key="$WORKER_API_KEY"
可用 flashrsi run … --check-only 做启动检查(可能拉数据与依赖,但不测远端鉴权)。自定义端点时按 Configuration & CLI 设 agent.llm.base_url 与 Worker 侧对应项。已保存 Snapshot:
flashrsi evaluate \
--config examples/evaluate_hotpotqa.yaml \
--snapshot /path/to/run/snapshots/SELECTED_ID.json \
--model <你的模型名> \
--set agent.llm.api_key="$TARGET_API_KEY"
OpenCode 路径上,README 写明可通过纯 Python Snapshot runtime 使用,不强制 Bun / Node / OpenCode CLI——具体以当前文档为准。
什么时候用得上
- 同一 harness 上反复改提示 / Skill,却说不清哪次有效:需要 Snapshot 谱系和轨迹,而不是聊天记录里的口口相传。
- 想横向对比 OPRO / GEPA / SkillOpt / ACE 等:统一 runner 比各自 fork 一套脚本省事。
- Coding Agent 总在同类失败上浪费 token:把「失败轨迹 → 可编辑资源」收进算法声明的 scope,再在 held-out 上验收。
若你只改一两句系统提示、没有稳定评测集,先手写对照实验通常更轻。FlashRSI 的价值在可复现比较,不是替你发明更好的产品直觉。
常见坑
- 把 quickstart 小样本分数当论文结论。文档自己写了:小样本只检查管线。
- Target / Worker 密钥或 base_url 配错。两边模型可独立;自定义端点要按文档设全。
- 换了算法却忘看编辑 scope。指令搜索方法动不了 Skill 树;Skill 演化方法也未必改 hooks。
- 忽略用量与成本。run 目录会记 usage;并行改 harness 资源时,Worker 与 Target 的账单是两路。
- 迁移评估没冻结资源。文档区分训练过程与冻结 Snapshot 后的近域 / OOD 评估,混着比没有意义。
完成标准
- 能用自己的话解释:RSI 改的是 Snapshot 里的资源,分数来自基准轨迹。
- 能指出仓库里至少 3 个算法名与至少 3 个 harness 名,并说明 scope 为何重要。
- 能对照文档说出
flashrsi run与flashrsi evaluate的用途差异。 - 知道 quickstart 分数不能直接当研究结论。
最后
若你已经在为 Coding Agent 维护提示词与 Skill,下一步通常是给改动划 scope、给候选留 Snapshot、给分数留 held-out。再堆一段「请认真测试」往往不够。从文档 quickstart 的 SearchQA 小实验读起,再决定要不要接上你自己的基准。