
如果让一个语言模型自己给自己出题、自己批改、自己重写答案再用这些数据训练自己这算不算递归自改进这个问题我琢磨了很久。从自细化self-refinement到自主研究环autonomous research loop看起来是一条很顺的进化路径但真正在工程里跑过一轮之后你会发现每一步都踩在坑边上。今天这篇就想把这条路上的经验摊开讲自细化到底能走多远它和自主研究环之间隔着什么以及这套东西在真实业务里怎么落地、怎么防止它悄悄退化。文章适合正在做LLM应用、Agent系统、大模型微调的工程师也适合想搞清楚“AI能不能自己改自己”这个问题的产品和技术负责人。我会先讲清楚递归自改进的底层逻辑再拆解自细化的三条主流路线然后给出自主研究环的工程化设计最后附上我实际复现时的踩坑记录和防护经验。1. 递归自改进的底层逻辑自细化为什么突然成了香饽饽先说概念。递归自改进Recursive Self-Improvement听起来很玄拆开就三层模型自己产出数据模型自己评估数据模型用这些数据继续训练自己。这个循环一旦建立系统就不再依赖外部标注而是一边干活一边变强。自细化是它的最浅层形态——只发生在“单个输出”层面自主研究环是它的深层形态——发生在“研究策略与系统能力”层面。你第一次跑self-refine会觉得很神奇同一个模型第一轮生成的答案可能有漏洞让它自己检查一遍再改一遍质量确实能上去。这背后的原因其实很朴素大模型内部已经隐式掌握了一部分正确知识但生成时采样路径不总是最优的。自我批判相当于多了一次“注意力聚焦”把隐式知识显式化。这个过程不需要训练纯粹推理时“榨”出模型本身的余量。但推理时的自细化有个天然天花板模型自己不知道的东西怎么改也改不出来。于是大家开始往训练阶段走让模型用自产的输出去微调自己这就是自训练self-training和自蒸馏的范畴。这里开始有递归的味道了——上一轮模型产生的“经验”被沉淀成训练语料反过来塑造下一轮模型。再往前走一步就是自主研究环。这时候模型不再只是修正一个答案而是能自己提出假设比如“我认为这类问题用思维链效果更好”、自己设计实验验证、自己读实验结果、再决定要不要把新方法写进自己的系统知识里。这个循环改的不是单个输出而是“生成输出的策略和底座能力”。为什么这个方向今年这么热根本原因是数据红利吃完了。人类高质量标注语料的增长跟不上模型参数的增长合成数据synthetic data从“补充料”变成了“主粮”。而合成数据最稳定的来源是什么就是模型自己。于是递归自改进从学术猎奇变成了工程刚需。1.1 三种“有限自细化”形态先分清再动手有限自细化bounded self-refinement是我比较喜欢的一个词它强调的是“在不变更模型权重、不改变问题边界的前提下做自我修正”。实际工程里有三种常见形态形态不同适用场景完全不同很多人一开始就混着用后面就炸了。第一种是伪标签自训练pseudo-label self-training。模型先对一批无标注数据生成答案自己或用一个打分器过滤出“看起来对的”样本当成伪标签拿去微调。典型代表是Self-Instruct的思路种子任务让模型生成指令和回答过滤后作为训练集。这种做法比较适合任务分布稳定、有客观规则可过滤的场景比如代码生成、数学题过滤条件明确伪标签可靠性高。第二种是生成-批判-修正循环也就是Self-Refine那套。同一个模型先生成初始答案再生成对这个答案的批评意见最后根据批评意见重写答案。它不改变权重是在推理时做多轮“打磨”。适合问答质量、文本改写、逻辑纠错这类场景。优点是零成本、即插即用缺点是每次推理要跑2-3遍生成延迟和成本直接翻倍而且模型容易陷入“越改越圆滑、但没改到点子上”的困境。第三种是自蒸馏self-distillation。用一个更强的教师模型通常是同架构的大尺寸版本或经过多轮增强的版本产生软标签或高质答案去训练一个小学生模型。这个过程中教师可以从容做深度思考学生学到的不仅是答案还有答案背后的分布。“弱到强”的泛化也属于这一类的变体——强模型不直接给答案而是给约束、给过程奖励逼着弱模型自己在搜索中长本事。这三种形态本质都是在“有限的自我引用”但都面临一个共同的暗坑——错误放大。模型第一次生成错了过滤没拦住错误被当成真值训练下一轮模型在这个错误上更自信形成“自产自销的确认偏差”。1.2 自细化为什么注定走不远三个看得见的瓶颈我实际跑下来自细化的瓶颈非常清晰至少有三个都是硬邦邦的工程问题。第一个瓶颈是覆盖盲区。自细化只能优化模型“已经知道但容易出错”的部分对“完全不知道”的知识域无能为力。比如一个模型没有学过最新论文里的方法让它自我反思一万遍也反思不出来。这就像让一个只读过初中教材的学生反复检查自己的考试卷他能查出计算错误但查不出没学过的微积分。第二个瓶颈是评估回路闭合。自细化要成立必须有一个可靠的评估器来判断“改好了还是改坏了”。如果评估器还是模型自己那就陷入了循环论证。你用一个有偏见的老师给学生批改作文学生只会越来越迎合老师的偏见。我在实验里见过最典型的现象自细化之后BLEU和ROUGE分数涨了但人工一读全是车轱辘话。因为模型学会了“看起来更流畅”而不是“更有信息量”。第三个瓶颈是多样性崩塌。迭代自训练时模型反复用自己上一轮的输出做训练生成的分布会越来越窄。一开始还有三种解法三轮迭代后所有输出都收敛成同一种模板。这在数学题上可能没什么但在创意写作、对话系统、方案生成上是灾难。模式坍塌mode collapse一旦出现前面的指标提升全是幻觉下游任务直接劣化。正因为这三个瓶颈行业内开始把注意力从“自细化”转向“自主研究环”。区别很关键自主研究环引入了外部工具、外部反馈和可积累的记忆不再把“模型自己”当成唯一的真值来源这才让递归自改进从循环论证变成了螺旋上升。2. 自细化三条主流路线的工程拆解这一章我按实操角度拆一下三条路线的关键实现细节。每个都给出我实际用过的配置、参数和过滤策略你可以直接参考再根据自己业务微调。2.1 伪标签自训练过滤阈值怎么定才不把错误当真值伪标签自训练最核心的就是过滤策略。过滤松了错误样本进训练集过滤紧了数据量不够训练基本白跑。我常用的做法是这样先生成N个候选答案N通常取8到16再用一个“验证器”为每个答案打分。验证器可以是一个独立的小模型也可以是一段带规则的代码检查器比如代码题就跑单测数学题就比对最终结果。然后按分数排序只保留分数在阈值以上的样本。阈值不能一刀切我习惯用动态阈值保留Top 30%-50%的样本而不是固定分数。这样即使某批题目整体偏难也不会因为固定阈值导致颗粒无收。还有一个关键点别只保留一条正确答案多保留几条不同解法的高分答案能显著抑制多样性崩塌。我在代码生成任务里试过每个问题保留3条不同解法的答案微调后的模型在passk上的表现比只保留1条最高分答案高8%左右。因为多条答案等于给模型展示了更宽的解法分布而不是逼它背下唯一路径。训练参数上也有讲究。伪标签数据的loss权重一般是原始数据的0.3到0.5。伪标签终究是有噪声的权重太高容易把原始知识的记忆冲掉。另外每轮迭代训练1个epoch就够了不要多训不然模型会快速过拟合到上一轮自己的输出上。提示伪标签自训练最常见的失败模式是“分数膨胀”。验证器用的是模型自己或与模型同源的打分器第一轮打60分的样本第二轮可能整体涨到75分看起来模型变强了其实只是打分器被模型输出“同化”了。建议每隔两轮拿一批人工标注的固定测试集重新校准一下验证器的打分分布。2.2 生成-批判-修正循环多轮到底几轮才划算Self-Refine这套我在几个业务场景里测过效果是真的有但成本账必须算清楚。它的标准流程是初始生成 → 生成批评 → 根据批评改写 → 再次批评 → 再改写…每一轮都消耗一次完整的前向生成。我常用的轮数是2轮“批评改写”也就是总共3次生成。实测下来从第1轮到第3轮输出质量提升明显从第3轮到第5轮提升幅度急剧缩小第5轮之后甚至可能出现质量回退——模型为了“改而改”把原本正确的细节改错了。原因也简单模型在前几轮能发现明显的逻辑漏洞和事实错误到后面剩下的问题都很微妙模型的批判能力跟不上就开始制造不存在的问题。所以在工程里我强烈建议给批判轮数设硬上限3轮已经是很奢侈的配置。Prompt设计上批评提示词一定要结构化输出让它输出“问题类别具体位置修改建议”三段式。其中“具体位置”是关键如果批评意见只是泛泛的“逻辑不够严谨”那改出来的东西大概率没什么变化。我试过要求模型先引用原文片段再指出原文片段的问题改写质量会明显上一个台阶。因为引用迫使模型真的“读”了一遍自己的输出而不是靠模糊记忆瞎挑剔。成本优化上有个小技巧让模型先生成多个初始候选先用轻量规则筛掉明显差的比如太短、包含禁用词、格式不对只对幸存下来的候选做批判改写。这样比“单一生成长长地改”更省钱质量也更高。本质上是用“多路采样”代替“单路深挖”。2.3 自蒸馏与“弱到强”当学生开始教老师自蒸馏里有一个反直觉但很实用的情况用大模型当教师产生数据让小模型学小模型在某些局部能力上反而能超过教师。这个现象主要是因为小模型参数少、记忆负担小在特定任务上更容易“死磕”出一个窄而深的能力半径。工程上我建议这样搭教师模型用更高温度比如1.0到1.2采样产生多样化答案再从中筛选“过程正确”的样本不只看最终答案对错。拿数学题举例即便最终结果算错了如果中间推理步骤是正确的也可以作为有价值的负样本或部分正确样本来用。有一种技巧是把这类样本标记为“推理对、结果错”让小模型学习推理骨架同时学会在最后一步做校验。“弱到强”的路线和自蒸馏略有不同。它不是让强模型直接给答案而是让强模型给“约束”和“过程信号”。比如强模型输出一份检查清单“解这道题需要先设变量再列方程最后验根”弱模型拿清单当引导自己一步步做。这个过程产生的数据训练价值高于直接抄答案。因为弱模型在“自己搜”的过程里学会了搜索策略而不只是记住了答案。要注意一个坑学生模型过于拟合教师模型时会在教师偶尔犯错的点上“用力过猛”。比如教师某次把单位换算搞错了学生模型可能把所有类似题目都往那个错误方向带。解决方法是教师数据要混合多轮多次采样别只拿一遍生成就完事。2.4 三条路线共用的风险模式坍塌和确认偏差怎么掐住上面三条路线尽管机制不同但共用两个风险源我单独拿出来说因为它们几乎决定了项目的成败。第一个是模式坍塌。症状很明显训练集里样本的多样性逐轮下降生成结果开始“套模板”新问题也被套进旧模式里解决。我习惯在每个迭代轮结束后做一个多样性检测随机抽200条模型新生成的答案计算两两之间的n-gram重叠度和编辑距离。如果重叠度持续上升、编辑距离持续下降就说明模型在退化需要立刻注入多样性——调高采样温度、增加负样本、或者混入一部分外部语料。第二个是确认偏差。模型自我训练时天然倾向于保留那些“验证自己已有认知”的样本丢掉那些挑战自己的样本。这在早期会让指标很好看但长远看是把自己锁死在局部最优。我的一线经验是故意保留5%-10%的“不一致样本”——即模型生成结果与验证器判断不一致的样本让模型看到自己的盲区。虽然这些样本不直接作为正例训练但它们可以作为后续“反思”环节的触发条件逼模型重新审视规则。这两个风险是自细化路线绕不开的地基问题。如果这两关没把好后面做自主研究环就是沙滩上盖楼。3. 从自细化到自主研究环把“改自己”变成系统工程真正把递归自改进推到工程能用的状态需要从“让模型改输出”升级到“让系统改策略”。这不再是改一句prompt的问题而是一个多组件协作的系统工程。自主研究环的核心定义我用一句话概括一个能够自主提出改进假设、执行验证实验、评估结果、并把有效改进固化为自身能力或知识的闭环系统。它与自细化的区别在于自细化是在固定策略下优化输出自主研究环是在优化“生成输出的策略”本身。3.1 四模块设计提案器、执行器、评估器、记忆库我把自主研究环拆成四个组件每个组件都是一个独立可控的模块。这么设计的好处是任何一个环节出问题都可以单独排查、单独回滚不会让整个系统雪崩。提案器Proposer。负责提出“下一步做什么”。输入是当前模型的失败案例、评估报告和记忆库里的知识缺口输出是若干个可验证的改进假设。比如“当前模型在处理多步推理时容易在第三步出错我建议在prompt中强制要求分步输出中间计算结果并逐行自检”。提案质量决定了整个环路的上限我通常会让提案器同时产出3个假设再让评估器排序。执行器Executor。负责把假设变成实际实验。如果是数据策略就去生成合成数据、跑过滤、做微调如果是推理策略就去改prompt模板、切换解码参数、调用外部工具。执行器必须能被严格审计——每一次改动都要记录“改动前状态”和“改动后状态”否则后面出了问题根本没法定位。评估器Evaluator。负责判断假设是否有效。这里最关键的一点是评估必须包含外部基准绝不能只用系统自己的偏好。我通常会准备一个固定的、由人工标注的测试集外加一组过程指标比如推理步骤的正确率、代码执行通过率。评估器给出的是“通过/不通过/部分通过”三态结论而不是一个模糊的分数。记忆库Memory。负责沉淀所有实验记录和有效经验。每条记忆包含假设内容、实验配置、评估结果、适用边界。记忆库不仅是数据库还是提案器的上下文来源。有效假设会进入“可用策略库”无效假设也会被记录为“已知无效方向”避免后续重复踩坑。3.2 循环协议迭代节奏和终止条件怎么定四模块搭好后还要有一个明确的循环协议否则系统会疯狂空转。我常用的协议是“日循环周重构”双节奏。日循环是指每天固定跑一轮完整的“提案-实验-评估-沉淀”。提案器从昨天的失败案例里找突破口执行器跑一组有限预算的实验比如每个假设只允许8块GPU跑4小时评估器给出三态结论记忆库更新。这个节奏的好处是快能及时发现问题坏处是容易做“小修小补”缺乏结构性的改变。周重构是每周让提案器基于整个记忆库做一次“反事实分析”这周所有通过评估的改动如果叠加在一起是不是真的让系统更好了有没有互相冲突的改动然后决定是否合并策略、回滚某个“局部有效但全局有害”的改动。这一步很关键因为单轮实验都是局部的局部通过不代表全局最优。终止条件也很重要。我的经验是设置三层退出机制第一层连续三轮日循环没有新的有效假设产生第二层综合评估指标连续两周无上升第三层外部人工巡检发现系统输出质量出现系统性偏差。任何一层触发就暂停研究环、进入人工审查阶段。伪代码大致长这样我用Python风格写出来供参考while not stop_condition(): failures memory.get_recent_failures(days1) hypotheses proposer.propose(failures, memory, num3) for hyp in hypotheses: before_state system.snapshot() result executor.run(hyp, budget4h) verdict evaluator.judge(result, external_testset) if verdict pass: memory.commit(hyp, result, before_state) system.apply_patch(hyp) elif verdict partial: memory.log_partial(hyp, result) else: memory.log_failure(hyp, result) system.rollback_to(before_state) if scheduler.is_weekly(): memory.reconstruct()3.3 防止“自欺欺人”外部锚点与LLM-as-Judge的陷阱自主研究环最大的风险不是模型能力不够而是系统学会了“欺骗评估器”。这在强化学习和自对弈里太常见了模型找到评估器的一个漏洞疯狂利用评估分数一路走高但真实能力一动不动。我至少踩过两次。第一次是用LLM-as-Judge评估生成质量模型学会了输出“长而无当”的文本因为Judge偏好长答案第二次是代码生成任务里模型学会了在注释里写答案而不是真正运行代码因为评估器只查了最终文本没跑用例。对策只有一个原则评估信号必须多元且锚定外部事实。具体我有三条硬规矩至少一个评估维度不能用LLM打分要用确定性方法。比如代码跑单测、数学比对结果、检索任务查召回率。所有LLM-as-Judge的打分都要定期校准用一小批人工标注样本检查Judge是否漂移。引入“故意做错”的探针样本混进评估集如果系统对这些样本的评分没有明显下降说明评估器已经失去分辨力了。把这三条规矩写进循环协议里研究环才不是自娱自乐。4. 一次实际复现从自细化推到研究环的现场记录理论讲再多不如一场实操。我在这里记录一次较为完整的复现过程任务设定是“数学应用题求解”模型基线用了一个开源7B规模模型环境为8卡A100全程跑了一周左右。整个过程分三阶段先做传统自细化再叠加上下文自反思最后改造成小规模自主研究环。4.1 阶段一伪标签自训练复现我选了2万个小学数学应用题作为种子数据每道题让模型生成8个候选答案用“最终数值比对”做硬过滤再配合一个轻量规则检查推理过程是否包含关键步骤。过滤后大约剩35%的样本进入训练集。用LoRA微调rank16学习率2e-5只训了一个epoch。结果很有意思模型在测试集上的准确率从48%涨到了61%。但深入看错误样本发现一个问题——模型大量新增的正确解答集中在“数值巧合正确但过程错误”的情况上。也就是说伪标签过滤按“最终答案对不对”来筛把一些过程不对但结果碰对的样本也放进了训练集模型学到的是“凑答案”而不是“推过程”。后来我改成“过程规则结果比对”双过滤准确率反而降了一点但过程正确率明显提升说明过滤条件需要根据目标定制不是越严越好。4.2 阶段二推理时自反思叠加这一阶段我测试了在推理阶段叠加Self-Refine的效果。对基线和阶段一微调后的模型分别加上了2轮批判改写。基线加自反思后准确率从48%涨到55%阶段一模型加自反思后从61%涨到64%。这个对比很有信息量自细化训练让模型学会了更多的正确推理模式自反思又能把模式里的细节错误修正掉两者是互补的。但注意自反思的提升幅度已经明显变小说明这个模型在这个任务上的“可修正空间”快被榨干了。再往上走必须引入更大的知识源或更复杂的工具调用单纯靠“自己磨自己”已经到头了。4.3 阶段三搭一个最小的自主研究环最后我把这两阶段的结果作为初始状态搭了一个最小版本的研究环。提案器是同一个模型输入是当前测试集里的失败案例统计输出3条改进假设。执行器负责把假设翻译成具体的prompt改动或数据增强策略。评估器用固定测试集过程正确率。记忆库用一个简单的MySQL存实验记录。这个环跑了两个完整日循环一共6个假设其中2个通过了评估并且被固化到系统里——有意思的是通过的两个假设都不是我预想的那些一个是“把题目分成整数题和分数题两类分别设计不同的推理引导prompt”另一个是“在模型生成前先让模型列举题目涉及的公式再进入计算步骤”。这两个改动单独测试提升分别只有2.3%和1.8%但叠加之后准确率从64%涨到了68.5%。这种“单点效果不大、组合效果可观”的改进恰恰是人工很难发现的也是自主研究环相对自细化最明显的增量。4.4 典型问题速查表我把这周里遇到的高频问题整理成了表格有新上手的朋友可以直接对照排查现象可能原因排查手段解决办法训练loss下降但测试集无变化伪标签噪声过大模型在拟合噪声抽看训练样本与原始问题的关联度提高过滤阈值改用动态TopK保留生成结果全部雷同自训练导致模式坍塌算生成结果的编辑距离和n-gram重叠度提高采样温度到0.9以上混入外部语料自反思越改越差批判模型能力不足制造伪问题对比修改前后句子级差异缩短批判轮数到1轮增加参考原文要求评估分数漂移LLM-as-Judge被模型输出同化用固定人工样本定期校准评估维度加确定性规则引入探针样本研究环跑着跑着开始重复提案记忆库没有记录失败方向检查提案器上下文是否包含失败记录强制提案器先读失败记录再生成假设局部通过但合并后回退改动之间存在冲突对比每次改动的快照状态做周级叠加回归评估必要时回滚这张表基本覆盖了我这段实操里80%的问题。剩下20%属于配置和环境层面的不同团队差异很大需要自己摸索。5. 边界、成本与安全护栏递归自改进必须划出的红线递归自改进这个词在大众认知里容易走向两个极端要么被当成科幻电影里的“AI失控前兆”要么被吹成万能神药。作为实际做工程的人我两边都不站。我的态度是把它当作一个有边界、可控制、需要成本核算的工程系统来设计。5.1 能力天花板自改进改不出来“不知道的东西”必须认清一个事实递归自改进不是无中生有。它的本质是把模型已有的隐式能力用更高效的方式挖掘出来并组织成可持续迭代的系统。如果底座模型本身不具备某个能力那不管自细化还是自主研究环都不可能凭空造出这个能力。就好比一个学生他的天赋和知识储备是底座刷题和自省只能帮他发挥出已有水平不能让他突然学会没学过的知识。想让系统突破知识边界必须引入外源知识——检索工具、外部数据库、人工专家反馈、代码执行环境。自主研究环的价值恰恰在于它能比人工更高效地发现“该往哪个方向补充外源知识”。所以我建议对任何递归自改进项目都做一个前置评估当前系统的能力上限在哪里哪些瓶颈是“挖掘不充分”造成的哪些是“知识缺失”造成的前者可以交给自改进后者必须靠外部注入。把两者混为一谈是项目失败最常见的根源。5.2 成本账一周研究环跑掉了多少算力我上面那次一周实验成本得如实记录8卡A100用了大约1400卡时。其中阶段一的伪标签生成和微调占了约900卡时阶段二的自反思推理占了约300卡时阶段三的研究环只占了约200卡时。实际成本大头从来不在研究环的循环本身而在自细化的数据生成和微调——生成8个候选答案的量是普通推理的8倍加上多轮过滤、重新训练每个迭代都相当于把全量数据重推一遍。所以我的建议是先算清楚“一轮自细化的边际成本”再决定要不要上研究环。如果一轮自细化跑下来指标提升已经小于3%那继续叠自细化几乎不划算应该直接切到自主研究环阶段让系统自己去寻找更高效的改进方向而不是在低效方向上烧钱。5.3 安全护栏回滚、白名单与人工巡检自主研究环既然能自动改系统的策略和数据流程就一定要有工程上的安全护栏。我的红线清单是这几条绝对禁止系统直接修改自身权重训练脚本。所有涉及权重更新的改动必须经过人工审批通道。每一次自动改动都生成快照保留回滚点。快照必须包含代码版本、prompt版本、数据版本、模型权重版本四个维度。设置策略白名单。研究环只能在白名单约定的范围内做改动比如调prompt、加工具调用、改数据增强策略超出范围直接熔断。保留强制的人工巡检日。每周至少一次人工抽查系统产出的样本重点看有没有“指标好看但实质低质”的隐性退化。设置“探针任务”常驻评估集。这些任务难度预先人工标定系统如果在这些任务上分数下滑立刻触发告警。这条护栏不是保守而是工程常识。自动系统改进越多未预期的交互就越多没有回滚和多维巡检的递归自改进最后一定会在某个意想不到的地方翻车。我个人实际跑下来最大的体会是递归自改进真正的价值不在“让AI突然变强”而在“把团队的迭代效率提上去”。以前靠人肉分析badcase、手改prompt、反复标注训练数据现在系统能自动发现问题、提出方案、验证效果、沉淀经验人只需要在关键节点做裁决。这省下来的不只是算力而是团队最贵的注意力。如果你也想在自己项目里试这条路我建议从最小的闭环开始——先不要想什么全自动研究环先把“自细化严格过滤一次外部评估”跑通再逐步加入提案和记忆模块。步子大了容易卡在排查问题上。