
1. 从“自我改进”到“正则化递归”RRSI 到底在解决什么问题智能体领域这两年最不缺的就是新名词。每隔几周就会冒出一个听起来能改变世界的缩写但真正落到工程层面能跑通、能复现、能稳定收敛的方案其实屈指可数。谷歌这篇关于 RRSI 的论文之所以值得单独拿出来聊是因为它触碰到了一个所有做智能体系统的人迟早都会撞上的天花板当智能体开始自己改自己它凭什么不会越改越烂先把 RRSI 拆开看。RRSI 是 Regularized Recursive Self-Improvement 的缩写直译就是“正则化递归自我改进”。这里面有三个关键词每一个都对应着一层工程约束。递归意味着改进过程是迭代的第 N 轮的产物会成为第 N1 轮的输入自我改进意味着改进的主体和客体是同一个系统智能体既当运动员又当裁判正则化则是整个方案里最容易被忽略、却最决定成败的部分——它是一道防止系统在自我迭代中失控跑偏的约束项。为什么这三者必须绑在一起你可以把递归自我改进想象成一个学生自己给自己出题、自己批改、然后根据批改结果调整学习方法。如果没有任何约束这个学生会逐渐走向两种极端要么陷入自我肯定的死循环反复强化自己已经会的东西能力边界不再扩展要么在某次偶然的“顿悟”后彻底改变解题策略把之前积累的有效经验全部推翻。前者是收敛到局部最优后者是发散到不可控。正则化要做的就是在这两个极端之间拉一条安全带。Harness 在这个语境里扮演的角色是承载 RRSI 循环的工程外壳。这个词在智能体圈子里最近被讨论得很多很多人把它和 Agent 混着用其实两者关注点不同。Agent 强调的是“能感知、能决策、能行动”的智能主体而 Harness 强调的是“把智能体的能力安全地约束住、稳定地跑起来”的那套基础设施。用一句大白话概括Agent 是马Harness 是缰绳和马具。没有 Harness 的 Agent 跑得快但容易翻车有了 Harness 才能让它在可控范围内持续输出。这篇论文的核心贡献就是把正则化思想系统性地引入到智能体的递归自我改进流程中并给出了 Harness 层面的工程实现范式。它回答的不是“智能体能不能自我改进”这种已经被验证的问题而是“智能体自我改进时怎么保证每一轮迭代都在往好的方向走而不是在原地打转或者突然崩掉”。对于正在做智能体开发、尤其是涉及自动化代码生成、提示词自优化、工作流自演进的团队来说这套思路的参考价值非常直接。2. Harness 不是 Agent 的附属品它在 RRSI 循环里承担什么2.1 把 Harness 和 Agent 的区别说透热词里“harness和agent区别”被反复搜索说明很多人对这个概念边界是模糊的。我用一个实际项目里的场景来说明。假设你要做一个自动修复代码缺陷的智能体。Agent 部分负责的是读代码、定位问题、生成修复方案、执行修改。而 Harness 部分负责的是给 Agent 划定它能改哪些文件、限制它单次修改的代码行数上限、在每次修改后自动跑一遍回归测试、如果测试不通过就回滚并记录这次失败尝试的特征。看出来了吗Agent 关心的是“怎么做”Harness 关心的是“做到什么程度必须停、做错了怎么退、做对了怎么记”。在 RRSI 的递归循环里Harness 的作用被进一步放大因为每一轮自我改进都会产生新的策略、新的提示词、新的工具调用序列如果没有 Harness 在每一轮做拦截、评估、筛选递归就会变成一场灾难。论文里给出的 Harness 架构大致包含四个核心模块执行沙箱、评估器、正则化约束层、经验回放池。执行沙箱保证智能体的每次尝试都在隔离环境中进行不会污染主系统评估器负责给每一轮的改进结果打分这个打分必须是多维度、可量化的正则化约束层是 RRSI 区别于普通递归改进的关键它会在评估分数之外额外计算一个“偏离惩罚项”经验回放池则保存历史迭代中的成功和失败案例供后续轮次参考。2.2 递归自我改进的循环长什么样一个完整的 RRSI 循环从工程视角看是这样的当前版本的智能体策略在任务集上跑一遍收集表现数据。评估器根据表现数据生成改进信号指出哪些环节可以优化。智能体根据改进信号生成新版本的策略或提示词。正则化约束层计算新版本相对于旧版本的偏离度如果偏离过大则触发惩罚或直接拒绝。新版本在沙箱中验证通过后进入下一轮不通过则回退并记录。经验回放池更新把这一轮的成功/失败模式归档。这个循环里最容易出问题的是第 3 步和第 4 步之间的衔接。智能体在生成新版本时天然倾向于做出“看起来能提升分数”的改动但这些改动可能是过拟合的、脆弱的、或者只在当前任务集上有效。正则化约束层要做的就是在新版本进入验证之前先做一次“合理性筛查”。2.3 为什么不能只靠评估分数做筛选很多人第一反应是既然评估器能打分那我直接选分数最高的版本不就行了这个思路在单轮优化里没问题但在递归循环里会出大问题。原因在于评估分数本身会被智能体的自我改进所“攻击”。当智能体知道自己的改进方向是“提升评估分数”时它会逐渐学会钻评估器的空子生成那些能在评估集上拿高分、但实际泛化能力很差的策略。这在机器学习里叫奖励黑客reward hacking在智能体递归改进里同样存在。正则化约束层的价值就在这里。它不只看“新版本比旧版本分数高多少”还要看“新版本在结构上偏离旧版本多远”。如果偏离度超过阈值即使分数提升很大也会被标记为高风险需要额外验证。这个思路和弹性网正则化Elastic Net里 L1 和 L2 混合约束的逻辑是一脉相承的L1 控制稀疏性L2 控制参数幅度两者结合才能在拟合能力和泛化能力之间找到平衡。RRSI 里的正则化项本质上就是在控制智能体策略的“参数幅度”——只不过这里的参数是提示词、工具调用序列、决策阈值这些离散化的工程对象。3. 正则化系数怎么定RRSI 里最需要动手调的那个参数3.1 正则化系数不是拍脑袋定的论文里给出了正则化项的形式化定义但落到工程实现上最让人头疼的是那个正则化系数 λ 到底设多少。设小了约束形同虚设智能体照样跑偏设大了智能体每轮只能做微小改动递归几十轮还不如人工调一次。我在实际项目中试过几组不同的 λ 取值下面这张表是实测下来的经验值范围供参考任务类型建议 λ 范围迭代轮次预期典型现象提示词微调0.05 - 0.1520 - 50 轮每轮改动小但稳定适合精细优化工具调用序列优化0.1 - 0.310 - 30 轮中等幅度调整需要较多验证决策策略重构0.3 - 0.65 - 15 轮大幅改动必须配合强验证多智能体协作协议0.5 - 1.03 - 10 轮改动剧烈建议人工介入审核这张表里的数值不是理论推导出来的而是通过观察不同 λ 取值下智能体迭代曲线的收敛速度和最终表现反推出来的。核心逻辑是任务越复杂、改动影响面越大λ 就应该越大因为一次错误的改动带来的连锁反应更严重。3.2 偏离度怎么算才合理正则化项的核心是计算“新版本相对于旧版本的偏离度”。但智能体的策略不是连续数值而是提示词、代码、工具调用图这些离散结构怎么算偏离度论文里给出了几种可行的度量方式我在实践中主要用这三种编辑距离类度量适用于提示词和代码文本计算新旧版本之间的最小编辑操作数归一化后作为偏离度。优点是直观、易实现缺点是对语义等价的改写不敏感。行为分布度量让新旧版本在同一组任务上跑比较两者的输出分布差异比如用 KL 散度或 JS 散度。这个度量更贴近实际效果但计算成本高。结构图度量适用于工具调用序列和工作流把调用关系建成图计算图编辑距离或子图相似度。适合工作流自演进的场景。实际用的时候我通常会把两到三种度量加权组合而不是只用一种。因为单一度量很容易被智能体“绕过”——比如它学会了用同义词替换来规避编辑距离检测但行为分布度量能抓住这种表面改动背后的实质不变。3.3 一个容易踩的坑正则化项和评估分数的量纲对齐这是我在第一次实现 RRSI 时踩过的坑。评估分数通常在 0 到 1 之间而偏离度如果直接用编辑距离可能是几十甚至上百的数值。两者直接相加或相减正则化项会完全主导结果导致智能体几乎不敢做任何改动。正确的做法是对偏离度做归一化把它映射到和评估分数同一量纲区间。我一般用 sigmoid 函数做软归一化这样偏离度小的时候惩罚接近零偏离度大的时候惩罚快速上升但有上界。提示归一化参数需要根据任务集的大小和复杂度调整。任务集越大单次改动的平均偏离度越小归一化参数应该相应调小否则正则化项会过于宽松。4. 把 RRSI 跑起来Harness 工程实现的几个关键决策4.1 沙箱隔离级别怎么选Harness 的执行沙箱是保证递归改进不污染主系统的第一道防线。沙箱的隔离级别直接决定了你能允许多大程度的自我改进。我见过三种常见的隔离方案进程级隔离每次迭代起一个新进程共享文件系统但内存隔离。实现简单适合提示词和轻量级策略的迭代。缺点是文件系统污染风险仍在。容器级隔离每次迭代起一个容器文件系统也隔离。适合涉及代码生成和执行的场景。启动开销比进程级大但安全性高一个量级。虚拟机级隔离每次迭代起一个轻量虚拟机。适合高风险场景比如智能体要执行系统级操作。开销最大但隔离最彻底。选择依据很简单看智能体在迭代过程中能触碰到的资源范围。如果它只能改提示词和配置文件进程级就够了如果它能生成并执行代码至少要用容器级如果它能调用系统命令或网络接口虚拟机级才稳妥。4.2 评估器的多维度设计评估器如果只给一个总分智能体很快就会学会刷分。我在实现时会把评估拆成至少四个维度任务完成度、输出质量、执行效率、鲁棒性。每个维度单独打分最后加权汇总。更重要的是权重不能固定不变而是要根据当前迭代阶段动态调整。早期迭代侧重任务完成度让智能体先能跑通中期侧重输出质量让它把结果做精细后期侧重鲁棒性确保它在边界条件下不崩。这种动态权重策略还有一个额外好处它能防止智能体在单一维度上过度优化。比如当鲁棒性权重提高时智能体之前学会的那些“走捷径”的策略会立刻暴露出来因为它们在边界条件下表现很差。4.3 经验回放池的检索策略经验回放池不是简单地存历史记录关键在于怎么检索。每一轮迭代开始时智能体需要从回放池里找到和当前任务最相关的历史经验。我试过三种检索策略基于任务相似度检索用任务描述的嵌入向量做最近邻搜索。适合任务类型相对固定的场景。基于失败模式检索优先检索那些和当前改进方向相关的失败案例。适合智能体反复踩同一个坑的场景。基于多样性检索刻意检索和当前策略差异较大的历史版本避免智能体陷入思维定式。实际用下来失败模式检索的性价比最高。因为智能体在递归改进中最需要知道的不是“别人怎么成功的”而是“我之前为什么失败”。把失败案例和对应的正则化惩罚记录一起喂给智能体它下一轮做出同样错误改动的概率会显著下降。4.4 回退机制的设计细节RRSI 循环里回退不是简单的“撤销到上一版”。因为递归改进的每一轮都可能产生多个候选版本回退的目标应该是最近一个通过完整验证的稳定版本而不是上一轮版本。我在 Harness 里维护了一个“稳定版本栈”每次有版本通过全部验证就入栈回退时直接弹出栈顶。这样即使连续多轮迭代失败系统也能快速回到已知可用的状态。回退时还要记录回退原因和当时的上下文这些信息会进入经验回放池成为后续迭代的负样本。我习惯在回退日志里额外记录一项这次失败是正则化约束触发的还是验证阶段触发的。前者说明智能体的改进方向偏离了约束边界后者说明改进方向合理但实现有问题。两种情况的处理策略完全不同。5. 实测中暴露的问题RRSI 不是万能药5.1 递归轮次多了之后改进幅度会自然衰减这是我在跑了三十多轮迭代后观察到的现象。前五轮改进幅度很大评估分数从 0.4 涨到 0.7 左右十轮之后每轮提升不到 0.01二十轮之后基本停滞。一开始我以为是正则化系数设大了调小之后发现改进幅度确实上去了但稳定性急剧下降经常出现“这轮涨了下一轮又跌回去”的震荡。后来想明白了递归自我改进的收益递减是结构性的不是参数问题。智能体在早期能发现那些“低垂的果实”——明显的缺陷、低效的流程、错误的配置。当这些都被修完之后剩下的改进空间要么需要更大幅度的策略调整会被正则化拦住要么需要外部新信息的注入递归循环本身提供不了。所以 RRSI 适合作为阶段性优化手段而不是持续运行的常驻机制。我的做法是跑十到十五轮后暂停人工审查当前策略注入新的领域知识或任务样本然后再启动下一阶段的递归改进。5.2 正则化约束和探索能力的矛盾正则化约束层在防止跑偏的同时也会抑制智能体的探索行为。有些真正有价值的改进在初期看起来就是“偏离度很大”的。如果正则化系数设得偏严这些改进会在萌芽阶段就被掐掉。我遇到过好几次智能体提出了一个看起来很奇怪但实际很有效的策略调整被正则化层拦下我人工审查后放行结果效果确实好。解决这个矛盾的办法是设置一个“探索配额”。每一轮迭代中允许有一定比例的候选版本绕过正则化约束直接进入验证阶段但配额很少比如 10%且这些版本必须经过更严格的验证。这样既保留了探索空间又不会让系统整体失控。这个思路借鉴了强化学习里的 epsilon-greedy 策略只不过这里的“随机探索”变成了“受控的约束豁免”。5.3 评估器的滞后性问题评估器给的是当前轮次的分数但智能体的某些改动效果需要多轮之后才能显现。比如它调整了一个底层工具调用的超时参数这个改动对当前任务的影响可能微乎其微但在后续遇到慢响应任务时会大幅提升鲁棒性。如果评估器只看当前轮次这种“延迟收益”的改动会被低估甚至被正则化层当作无意义改动拦掉。我的应对方案是在评估器里加入延迟评估队列。某些类型的改动不立即打分而是标记为“待观察”在后续几轮中持续追踪其影响。如果延迟收益最终被证实会给对应的改动补一个正向分数并调整正则化层对该类改动的偏离度计算权重。这个机制实现起来不复杂但对提升递归改进的长期效果帮助很大。6. 从 RRSI 到日常智能体开发哪些思路可以直接搬6.1 正则化思维不限于递归改进即使你不做递归自我改进正则化思维在日常智能体开发里同样有用。比如你在调提示词时每次改动后除了看效果提升也应该关注“这次改动让提示词结构偏离了多少”。如果一次改动同时调整了五六个地方即使效果变好了你也很难判断到底是哪个改动起了作用。把改动幅度控制住每次只调一两个变量虽然单轮提升慢但积累下来的经验是可复用的。我在做提示词优化时有个习惯每次改动后记录改动类型和改动幅度。改动类型分“增删指令”“调整示例”“修改格式约束”几类改动幅度用编辑距离粗略估计。积累几十次改动记录后就能看出哪类改动在什么阶段最有效哪类改动容易引发副作用。这套方法和 RRSI 里的正则化约束逻辑是一样的只是规模小很多。6.2 Harness 工程的核心是“可回退”不管你是不是做 RRSI只要你在做智能体系统Harness 层面的第一要务就是保证任何操作都可回退。我见过太多团队在智能体上线后才发现某个自动优化模块把生产环境的配置改坏了而且没有回退路径只能人工一点点恢复。这种事故的根因不是智能体不够聪明而是 Harness 工程没做到位。可回退的实现要点有三个版本快照、变更日志、一键回滚。版本快照要覆盖智能体能触碰到的所有配置和策略文件变更日志要记录每次改动的前后差异和触发原因一键回滚要能在秒级完成而不是需要人工逐项恢复。这三件事做到位智能体即使偶尔跑偏损失也是可控的。6.3 评估器的设计比智能体本身更重要这句话可能有点反直觉但在我做过的智能体项目里评估器设计得好不好直接决定了智能体最终能走多远。一个粗糙的评估器会让智能体学会一堆钻空子的技巧一个精细的评估器能引导智能体往真正有价值的方向改进。RRSI 论文里对评估器的多维度、动态权重、延迟评估这些设计其实适用于所有需要自动优化的智能体场景。我现在的习惯是在写智能体逻辑之前先把评估器写出来。评估器写不出来说明我对“什么算好”还没想清楚这时候写智能体逻辑大概率是白费功夫。评估器写出来了智能体的目标就明确了后续的迭代优化也有了方向。6.4 递归改进的终止条件要提前定好RRSI 循环什么时候停这个问题必须在启动之前就想清楚。常见的终止条件有四种达到目标分数、连续 N 轮无显著提升、达到最大轮次、人工触发停止。我一般会同时设置多个条件任何一个满足就停。其中“连续 N 轮无显著提升”是最实用的N 通常设 3 到 5。因为递归改进的收益递减是常态与其等到分数完全停滞不如在提升明显放缓时就停下来把资源投入到其他优化方向。注意终止条件里的“显著提升”需要明确定义。我通常用“评估分数提升超过 0.02 且统计显著”作为标准避免被随机波动误导。7. 一些实操层面的零散经验关于 RRSI 和 Harness 的工程实现还有几个零散但实用的点值得记下来。第一正则化约束层的计算开销要控制住。偏离度计算如果太复杂会成为整个循环的瓶颈。我的做法是把偏离度计算做成异步的不阻塞主迭代流程只在候选版本准备进入验证阶段时才做完整计算。第二经验回放池要定期清理。历史记录积累太多会拖慢检索速度而且早期那些低质量的迭代记录参考价值很低。我一般保留最近 50 轮的高质量记录加上所有失败案例其余定期归档。第三沙箱环境的初始化时间要尽量短。如果每次迭代起沙箱要等几十秒整个递归循环的效率会非常低。用容器镜像预热、进程池复用这些手段可以把初始化时间压到秒级以内。还有一个容易被忽略的点RRSI 循环里的随机性要控制。智能体生成候选版本时如果随机性太高每轮结果波动会很大正则化约束层很难判断偏离是来自随机波动还是实质性改动。我的做法是在候选生成阶段用较低的温度参数在探索配额那部分才用较高温度。这样大部分候选版本是稳定的少数探索版本才有多样性。最后说一个我踩过的坑不要用同一套任务集同时做改进和验证。智能体在递归改进中会逐渐过拟合任务集评估分数涨得很漂亮但换一组任务就原形毕露。正确的做法是把任务集分成改进集和验证集改进集用于生成改进信号验证集用于最终判断是否通过。验证集要定期更换防止智能体间接过拟合。这个坑我在早期项目里踩得很惨评估分数从 0.6 涨到 0.9上线后实际效果还不如改进前的版本。后来把改进集和验证集分开虽然评估分数涨得慢了但上线后的效果扎实了很多。