跳到主要内容

RSI 常见问题(FAQ)

七天实战

概念题可对照 7 天学会 RSI 每天的测验。动手题以本地 trace.jsonl 为准,不以聊天记录为准。

本文回答学习 RSI(Recursive Self-Improvement,递归自我改进)时最常混淆的边界。相关背景见 入门介绍,可运行骨架见 快速开始。

定义​

RSI 是在训练模型吗?​

默认不是。本课程的改进对象是提示词约束段、工具说明、可检索教训和带测试的小补丁。权重更新属于微调,成本和回滚都不同。若你另外做了微调,必须使用没进训练的回归题,并单独记录模型版本。不要把微调损失下降写成 RSI 的分数提升。

和「多试几次」有什么区别?​

重试不保留失败证据,也不决定哪一次该留下。RSI 要求每轮有评分器版本、失败集合和补丁是否被接受。三份不同答案里挑你喜欢的那份,是人工选择,不是递归改进。

五步能否省掉反思,直接按分数搜索?​

可以搜索,但搜索仍然需要评估和门禁。省掉反思意味着你少了可读的归因,下一轮只能盲目变异。变异可以做,但每个被接受的变异仍要记录它针对哪条失败。没有失败编号的变异,门禁应拒绝。

内循环和外循环必须同时有吗?​

单次作业可以只有内循环。跨题目声称「系统会积累经验」时,必须有外循环的教训库,并有降权规则。只有聊天窗口里的上文,任务一换就消失,不能叫长期自我改进。

Gödel machine 和现在的门禁是什么关系?​

Gödel machine 要求在改写自身之前证明效用会提高。日常系统给不出这种证明。回归门禁是弱化后的可执行替代:在冻结的题目上没有新增失败,才允许替换当前策略。它不是证明,所以还要人工抽检。

评估​

能不能让模型给自己打分?​

自评可以当调试附件,不能当 score。生成者和评分者共用偏好时,分数会随长度和语气上升。门禁至少要有一层不看语气的规则或测试。规则失败时,自评满分无效。

LLM-as-Judge 什么时候能用?​

规则已经通过,且评审输出的引用句是候选文本的子串。位置对调后分数差很大时,评审器只能做参考,不能单独决定接受补丁。评审提示词的哈希变化要升评分器版本。

Pass@k 上升算改进吗?​

Pass@k 描述采样 k 次至少一次通过的概率。它上升可能只是因为你增加了采样次数。比较策略时,k 和温度必须相同。课程更推荐比较失败集合的并集,避免被单次好运误导。

回归集要多大?​

七天练习用三到五道固定题就够,但它们必须和正在被优化的那道题不同,且不含标准答案。生产系统按失败历史补题,而不是按心情删题。删题需要两人同意并升基线版本。

分数持平应该接受补丁吗?​

默认不接受。持平说明没有观察到失败集合缩小。接受持平会让日志被无关改写填满,还会增加输出变长的机会。只有你事先写明「持平但 token 下降也算改进」时,才可以把成本下降当作接受条件,并且失败集合不能变大。

规则和评审分打架听谁的?​

听规则。评审分只能把分数往下修,不能把规则失败改成通过。冲突写入 judge_conflict。冲突率连续三轮偏高时,停止改进业务策略,先修评审提示词。

反思与记忆​

反思写「下次更仔细」为什么不行?​

它没有指出哪条证据、哪个动作。改进器无法生成可审查的补丁,下一轮也无法检索。合格教训至少包含失败编号和一个可执行动作,例如「R6:把规格中的百分数逐字抄进输出」。

错误反思会怎样?​

错误归因会在外循环里被反复检索,形成越改越偏的循环。教训必须能在轨迹里找到子串或测试名。检索后再次失败要降低帮助率,低于阈值就归档,不再注入。

记忆库用向量检索还是编号检索?​

编号和异常分类优先,因为可解释。向量检索适合编号体系还没建立的开放写作,但命中的教训仍要确认证据还在。不要因为相似度高就把安全段替换掉。

Reflexion 的记忆会无限变长吗?​

你必须设上限。按任务类型分桶,每桶保留帮助率最高的几条,其余归档。把全部历史塞进上下文,既贵,也会让早期错误和近期结论互相矛盾。

改进对象​

为什么不能改安全段?​

安全段是拒绝策略和权限边界。它一旦进入白名单,优化器会用「为了完成任务」删掉限制。安全段放在独立文件,哈希打进日志,变化则本轮作废。

可以自动改测试吗?​

不自动改。改测试使任务变容易,是评估污染。测试失败应驱动业务代码或提示词的白名单补丁。测试本身的缺陷由人修改,并升回归基线版本。

一次改两个地方行不行?​

不行。一轮一个变量,否则分数变化无法归因。若教训同时提到格式和算法,拆成两个候选,分别过门禁,只留下失败集合真正缩小的那个。

种群进化是否违反「一轮一个变量」?​

每个个体的变异仍然只动一处。一代里可以有多个个体,但每个个体相对父代只有一个差异。同时改三处仍叫一个个体的话,归因就断了。

DSPy 编译算一次 RSI 吗?​

算外循环的一次编译,前提是度量函数独立,且报告数字来自没参与优化的题。编译完就固定程序上线,而不是让线上请求继续改提示词。线上继续改,需要另一套更严的门禁和抽检,不属于默认部署。

安全与范围​

系统能不能自己决定扩大权限?​

不能。权限、网络和密钥不在白名单。补丁 diff 里出现这些路径就安全停止。课程不提供绕过限制的步骤。演示环境使用沙箱目录和假数据。

自动提交到主分支算 RSI 吗?​

算失控的发布,不是学习目标。接受的补丁先进入实验分支或本地提交。合并由人在看过失败集合和回归结果之后做。开源脚本若默认推送,改成只打印 diff。

目标漂移怎么发现?​

比较规格和最新约束段。约束段删除了规格中的义务(保留数字、保持函数签名、不得编造 API),即漂移。用机械规则核对义务,不要靠模型保证「我没跑题」。

没有人工时间能不能全自动跑一夜?​

不建议。至少留下抽检配额:每接受若干补丁冻结一次,第二天回答三个是否题(数字还在、失败集缩小、回归题没漏进提示词)。没有人看这些题,循环应保持关闭。

和其他课程​

已经学了 Loop Engineering 还要学 RSI 吗?​

Loop 解决一轮之内如何规划、行动和停止。RSI 解决多轮之间哪一版策略留下。只有 Loop 时,失败不会变成带门禁的补丁。两者可以串联:Loop 产生轨迹,RSI 决定轨迹里的策略改动是否保留。

Memory Engineering 的记忆能不能直接当教训库?​

可以借用存储和检索,但写入条件不同。RSI 只写入带证据且经过接受或明确拒绝标记的教训,并按帮助率降权。把所有对话写入向量库,会把未经验证的反思当成事实。

和 AI 安全课程的关系?​

奖励欺骗、评估污染、目标漂移是安全问题在改进循环里的具体形式。安全课程给出原则,RSI 课程要求你在日志字段里抓住它们:评审分与规则分分裂、回归新失败、安全段哈希变化。

实验结论​

怎样的句子可以写进更新日志?​

必须能从日志复算。例如「在 scorer rules-r1r5-v1 下,任务 spec-login-01 的失败集从 R3、R4 变为空,回归三题无新增失败」。不能写「效果大幅提升」「接近人类水平」。

开源项目分数更高,为什么不以它为准?​

先确认评估函数是否相同。口径不同的成功不能相减。用你的规则重放两轮,把差异记成口径差异。对方说不清搜索集和报告集是否分开时,不引用其百分比。

本地没有模型密钥还能完成练习吗?​

能。快速开始的执行器可以返回固定草稿,用来验证评估、反思编号、白名单和门禁。模型是可替换的执行器。门禁不是可替换的。没有密钥时,不要编造分数。

子站实验室的分数和本地脚本不一致?​

以本地评分器版本为准。子站用于理解顺序和做测验。两边温度、题目和规则不同时,数字不可比。把子站测验错题对应到失败编号,再在本地补规则。

下一步​

仍有概念含糊时,回到 入门介绍 的四条硬约束。要改代码时看 开发指南。要安排七天时看 从零到一。

操作题​

日志里没有 scorer_version,分数还能比较吗?​

不能。先补上版本再跑。已经产生的旧日志可以保留,但不能和带版本的新日志画在同一张图里。口头记得「当时用的是第一版规则」不算版本号。

回归题太简单,分数一直满分,怎么办?​

加义务而不是加形容词。例如要求输出必须包含规格里的全部数字,或函数必须在空输入时返回约定值并有测试名。加完升版本、重冻基线。不要为了让曲线好看去删掉已经满分的旧题。

模型把教训复述得很好,但测试仍失败?​

复述不是执行。检查执行器是否把教训放进了提示词槽,以及改进器是否真的改了 constraints。只复述不改文件的轮次,accepted 必须为假。若执行器根本没读到教训,修注入,不要换更大的模型。

两个人的量表不一致?​

先不要平均。把不一致的条目改成可机械检查的规则,直到不需要量表也能判。暂时判不了的条目从优化目标里拿掉,只留在抽检的「是否」题里,且不回传给改进器。

子站 Day 1 手工三轮和本地脚本冲突?​

手工三轮用的是纸笔量表,脚本用的是 R 编号。冲突时以脚本为准改纸笔量表,让每一分都能对应一个编号。不要为了贴近手工感觉去放宽脚本。

能否用生产日志当回归集?​

可以抽失败案例改写成不含个人数据的题,但要人审过再冻结。原始生产日志含有用户内容,不应直接进入改进器上下文,也不应提交到公开实验包。

改进循环能否调用付费搜索或任意 URL?​

七天练习不要。工具白名单若包含任意 URL,模型会用检索结果代替规格里的数字,R6 会以另一种方式被绕过。需要外部事实时,把事实事先写进规格,循环只对规格负责。

为什么强调温度?​

温度改变的是采样,不是策略。不固定温度却比较两版 constraints,等于同时改了两个变量。做不到温度为 0 时,每版至少采样三次,用失败集的并集做比较。

仍容易混的词​

  • 轨迹是执行记录,不是模型自称的思考过程。
  • 教训是带证据的动作,不是鼓励。
  • 接受是门禁的返回值,不是你的满意度。
  • 编译(例如 DSPy)是一次离线搜索,不是线上每问每改。
  • 停止是协议的一部分,不是失败。

把这五个词写在实验目录的 README 顶部,以后复盘时先对照用词,再看分数。

和脚本有关的短答​

check_trace 报 missing 字段,能先跑模型吗?​

不能。补字段再跑。否则新轨迹无法和旧文档对照。

无模型演练时 token 全是 0,预算停止是否误触发?​

会。把 max_tokens 调到远大于 0 的数,只在真正调用模型时恢复真实上限,并在 README 写一句。不要把上限改成 0 当成「不限制」。

R6 把「100%」判失败,是否太严?​

规格写了 99.9% 就必须保留 99.9%。要放宽就改规格并升评分器版本,不要在改进器里教模型四舍五入。

平台期把 R6 换成 R2 也停了,合理吗?​

不合理。停止函数应在失败列表完全相同且评分器版本相同才返回平台期。编号替换要走「新失败」拒绝,而不是平台期。去核对 should_stop 的测试。