跳到主要内容

RSI 最佳实践

七天实战

Day 2 的校准实验和 Day 6 的防退化,在 7 天学会 RSI 里有交互版本。本文把它们收成上线前也适用的约定。

先写停止,再写改进​

团队常把轮数上限留空,直到账单或事故出现。实验协议开头就写明五条停止:成功、平台期、预算、安全、人工抽检失败。平台期用失败集合而不是单次分数:集合连续两轮不变就停。预算同时限制轮数和 token。只限制轮数时,每轮上下文会膨胀,成本仍然失控。

安全停止的触发器保持代码判断:补丁键不在白名单、反思编号不在失败集、回归出现新失败、评分器哈希变化。这些条件不要交给模型「自行决定是否严重」。

奖励欺骗的检查表​

指标上升时,先假设是欺骗,再用证据推翻。

  • 规则分和评审分是否一起上升。只有评审分上升,优先怀疑冗长偏好。
  • 输出长度中位数是否增加超过 30%。增加了就抽三份看信息量,而不是看语气。
  • 失败集合是否只是从硬编号换成了评审器不看的方面。
  • 抽检样本是否来自回归集之外的新任务。在同一道题上反复看,会高估。
  • 改进器是否读到了满分范文。读到了就把该轮标记为污染,分数不作数。

古德哈特定律在这里的操作含义是:一旦某条评审维度被写进优化目标,就准备第二条不参与优化的观察指标。例如优化规则分,同时记录人工对「是否答非所问」的二元判断,该判断不回传给改进器。

评估器校准​

每周或每次改评审提示词时做一次校准,而不是每轮都做。

  1. 取 10 条历史输出,其中 4 条人工判定为低质量。
  2. 用当前评审器打分。
  3. 若低质量样本的分数中位数进入「可接受」区间,评审器作废,回到上一版提示词。
  4. 记录位置偏差:交换两个候选的先后,分数差超过 2 分则评审器不能单独当门禁。

自我评分虚高的专门实验:让被改进模型先给自己打分,再混入人工低分样本,看评审器是否跟着虚高。跟着走,就禁止自评进入日志的 score 字段,自评只能留在调试附件。

回归集的卫生​

  • 题目一旦进入回归集,期望行为只能由人修改,并升 baseline 版本。
  • 改进器的上下文不包含回归题的标准答案。
  • 当前正在优化的那一道题可以不在回归集里,但验收时必须另有未参与优化的题。
  • 删除回归题等于降低安全标准,需要两个人批准。添加题目则鼓励。

回归失败的补丁不进入教训库的「推荐」分区,可以进入「负例」分区,并写明它破坏了哪道题。

人工检查点放在哪​

事件谁签字循环状态
第一次把新字段放进白名单作者 + 另一人暂停
评分器大版本作者旧分数归档
连续三轮抽检失败作者停止并回退到最后一次抽检通过的策略
补丁触及权限、网络、密钥样例拒绝,无需讨论安全停止
种群规模或轮数上限提高一倍作者先用旧上限重跑对照

检查点是工单或实验笔记里的一段话,包含策略哈希和日志行号。口头同意不算。

小步​

一轮一个变量。变量可以是约束段的一句话、一个示例、或一个函数里的一个条件。同时改提示词和温度,分数变化无法解释,该轮日志标记 confounded: true,不得写入对外结论。

差异审查看三样:改了哪些键、失败集合如何变化、回归集合如何变化。三者缺一不合并。

日志与复现​

最小可复现包:rsi.config.json、评分器版本、回归基线版本、接受的补丁 diff、随机种子或温度 0 的声明。没有种子又不是温度 0,就写明采样次数和聚合方式(失败集合并集)。

对外分享轨迹时删除用户原文和密钥,保留失败编号。完整轨迹留在访问受控的目录,保留期按你的数据规定,至少覆盖一次复盘。

多 Agent 并不自动更安全​

编辑者和读者若和作者同一模型、同一数据,多样性是角色提示词制造的,不是独立证据。互评结论仍然要过规则层。调用次数不对齐的对比不做结论。三 Agent 全票通过但规则失败,以规则为准,并检查他们是否在互相确认语气。

何时不要启动 RSI​

  • 没有失败的定义,只有「更好一点」。
  • 评估器就是被改进的那个提示词。
  • 任务涉及真实账户、支付或生产数据,却还没有沙箱。
  • 团队没人有时间看抽检。

这些情况下,把需求写清楚并做一次人工修改,比跑四轮循环更诚实。RSI 是在判据清楚之后放大迭代,不是用来代替判据。

上线后的值班信号​

  • 接受率突然变成 100%:门禁可能被绕过。
  • 平均输出长度单调上升而规则分持平:冗长偏好。
  • 负例教训检索占比超过一半:库被错误归因占满,应暂停写入、只读复盘。
  • 同一补丁哈希一天内被拒绝超过三次:改进器没有读取拒绝原因。

信号触发后先停止调度器,再讨论策略。不要在告警期间加大轮数「看看能不能自己修好」。

更多辨析见 FAQ。组件分工见 开发指南。

抽检怎么抽样​

抽检不是「看一眼最好的那份」。从最近 20 轮已接受补丁里,按日志行号等距抽 4 份,外加所有安全停止的前一份。每份只回答三个是否:规格里的数字还在吗,失败集合是否真的缩小,回归题是否被改写进了提示词。三个问题都用是或否,不许用「整体不错」。任一否,回退该补丁并暂停调度器,直到补上缺失的规则。

抽检人最好不是当天改白名单的人。做不到两人时,至少隔一天再看自己的日志,避免刚写完的辩解影响判断。

提示词种群的额外约定​

种群大于 1 时,每一代归档全部个体的哈希和分数,不只归档冠军。冠军若在下一道未参与选择的题上失败集扩大,整代标记为过拟合,冠军不得自动晋升为默认策略。变异幅度限制为一处插入或一处删除,禁止整段重写后仍叫「小变异」。交叉只交换 constraints 里以句号分开的句子,safety 整段复制自冻结文件。

事故复盘要回答的五句​

  1. 最后一次被接受的策略哈希是什么。
  2. 哪一条规则没有挡住这次坏输出。
  3. 回归集里有没有同类题;没有的话,谁在何时补题。
  4. 人工检查点是否被跳过;跳过的代码路径在哪。
  5. 用户可见的坏输出保留到哪一版回退。

答不上第 2 句,就还没有评估器,只是有日志。补规则先于继续跑循环。

一套可以照着做的周检查​

周一打开上周的 trace.jsonl,不要打开演示文稿。按下面顺序过滤,每一步的结果写进 weekly.md,每步不超过四行。

第一步,列出 scorer_version 的不同取值。多于一个,就把分数按版本拆开,禁止画一条跨版本的上升曲线。第二步,列出 accepted 为真的补丁键。出现 constraints 以外的键,整周结论改为「门禁失效」,先修代码再谈质量。第三步,计算输出长度中位数相对上周的变化。增加超过三成且规则分中位数不变,标记冗长偏好,抽三份看是否只是加了礼貌套话。第四步,找出回归新增失败的轮次,确认那些轮次的 accepted 全为假。有真值就回退对应策略并写事故五句。第五步,看负例教训的检索占比。超过一半则把教训库改成只读一天,只复盘不写入。

周检查不增加新功能。若五个步骤做不完,说明日志字段缺失,补字段是下周唯一的开发任务。

评审器提示词的最小差分​

评审器系统提示只保留四句:按规则编号解释扣分;引用必须是原文子串;不要因为更长而加分;不要建议关闭测试。任何额外的「请严格」「请专业」先不要加。要比较提示词版本时,用同一批十份冻结草稿,记录低质量四份的中位数和位置对调后的分数差。两项都变差的版本丢弃,即使它让优秀草稿的分数更高。优秀草稿的分数不是校准目标。

把通过的提示词哈希后缀接到评分器版本上。忘记接后缀却改了提示词,等于悄悄改了尺子。周检查的第一步会抓住这件事,但当天就应该升版本。

成本墙​

给调度器两个数字:单轮 token 上限、全实验 token 上限。单轮超过上限时截断教训而不是截断规格。全实验超过上限时停止并保留最后一次接受的策略,不要「再给一轮」。把这两个数字写进 rsi.config.json 的 budget。没有 budget 键,调度器拒绝启动。这样就不会靠人记得停。

对照实验必须共用同一对上限。种群实验把个体数乘进预算,而不是在预算之外加个体。否则种群只是更贵的重复采样。

与校验脚本对齐的值班动作​

值班时不要重新解释指标,直接跑 check_trace。输出里若有 accepted_on_regression 或 safety_patched,本次事件的级别就是停机,而不是观察。把违规行号贴进事故记录,再回答复盘五句。脚本退出码非 0 的期间,调度器保持关闭。修复是补规则或回退策略,不是把违规类型从脚本里删掉。

长度中位数的计算用 token_out 或输出字符串长度,两套不要混在一张图里。本周用哪一套,写在 weekly.md 第一行。下周沿用,直到评分器版本一起变更。