大家好,这里是最佳拍档,我是大飞。递归自我改进(Recursive Self-Improvement)这个话题在AI圈讨论了半个多世纪,但最近一年突然有了清晰的落地路径。很多人对AI自我进化的想象,都是模型直接改写自己的权重,越改越强,最终触发智能爆炸。但如果你关注前沿的研究进展就会发现,短期内真正能跑通的自我改进路径,可能和你想的完全不一样。它不靠改模型参数,而是靠优化包裹在模型外面的那层系统,也就是Harness工程。
刚刚OpenAI前应用研究主管翁荔(Lilian Weng)发表了最新的博客文章,系统梳理了这个领域的最新研究进展。我们今天就顺着她的思路,把这件事讲透。递归自我改进这个概念最早可以追溯到1965年,I·J·古德(I.J.Good)提出了“超智能机器”的定义,说这样的系统能在所有智力活动上超过人类,还能设计出更好的机器来改进自己。到了2008年,埃利泽·尤德考斯基(Eliezer Yudkowsky)正式用“递归自我改进”来描述这种反馈循环。
指的是AI用当前的智能,改进产生智能的认知机制本身。放到今天的AI语境里,这个反馈循环有两种可能的形式:一种是模型直接改写自己的权重;另一种更宽泛的形式,是模型改进自己的训练流水线和部署系统,反过来催生出性能更强的下一代模型。这里特意提到了部署系统,因为在翁荔看来,原始模型和真实场景之间的这层部署系统,重要性可能不亚于模型本身的原生智能。
而Harness,也就是模型的支撑系统,就是AI部署里的核心组件。简单说,Harness就是包裹在基础模型外面的整套系统。它负责编排执行流程,决定模型怎么思考规划、怎么调用工具行动、怎么感知和管理上下文、怎么存储产物、怎么评估结果。我们熟悉的Claude Code、Codex这类成功的编码Agent产品,核心竞争力很大程度上就来自成熟的Harness设计。
和早期大家熟悉的“Agent等于大模型加记忆加工具加规划加行动”的框架比,Harness工程新增了工作流设计、评估、权限控制、持久状态管理这些内容。它已经不只是写提示词模板,更偏向运行时和软件系统设计。核心是解决模型怎么观察、行动、记忆、自检和迭代的问题。设计上的原则是尽量简单通用,才能保证泛化性。很多思路都参考了现有的软件工程实践,也能复用模型预训练里学到的相关知识。
这个定位其实和操作系统很像,把复杂逻辑封装在内部,对外保持简洁的接口。未来行业里的配置、工具接口这些协议,大概率也会逐步标准化。具体来看,Harness有三个反复出现的核心设计模式。第一个是工作流自动化:给模型定义一套可以操作、测试、迭代的工作流,是自动化的核心设计。安德烈·卡帕西(Andrej Karpathy)的autoresearch就是一个很干净的例子。
通用的工作流都是目标导向的循环:先做计划,再执行,然后观察结果或者测试效果,接着根据反馈改进,再执行下一轮,直到达成目标。过程中如果遇到任务描述不清晰或者执行偏好不明确的情况,也可以主动向用户确认。和静态的提示词模板不一样,这种工作流更强调模型在运行时分析自己的执行轨迹和失败案例,一步步迭代推进。
第二个模式,是把文件系统作为持久记忆。长周期的Agent系统里,一个很常见的需求是管理丰富的状态和产物。Harness不可能把整个工作流和所有日志都塞在上下文里,更合理的方式是把持久状态存在文件中。长周期的Agent运行中,实验日志、代码差异、论文摘要、错误栈、历史执行轨迹这些产物,长度很快就会超过模型训练时的上下文窗口。而读写编辑文件系统,本来就是大模型的基础能力,通常靠bash命令实现。
所以用文件这种简单形式管理持久记忆,天然能随着核心模型能力的提升而变强。第三个模式,是子Agent和后台任务。一个Harness可以生成多个子Agent并行执行,同时监控后台任务的状态。当主Agent需要同时验证多个假设、并行跑实验,或者把孤立的子任务委派出去、不污染主上下文的时候,这个模式就非常有用。这时候主Agent就需要一个轻量的进程管理器,负责启动任务、查看日志、取消失败的运行,最后把结果合并回主线程。
这里的关键设计是,并行过程必须是明确可观测的。如果子Agent的输出只存在临时的聊天上下文里,很快就会失效,也没法追溯。但是如果都存成文件、日志、状态记录,模型就算中途被打断也能恢复,还能基于自己的完整执行历史做推理。说到这里,我们可以用最成熟的编码Agent Harness做个具体的例子。现在主流的编码Agent,不管是Claude Code、Codex还是Cursor这类产品,核心接口其实已经趋同了。
它们的通用循环都是:先观察整个代码仓库,然后做规划;接着搜索和读取相关文件,再编辑或者打补丁写测试;然后运行检查错误,循环往复直到任务完成。有了这套工具集,编码Agent就能在给定仓库里开发和调试问题,就像人类开发者用IDE工作一样。这些Agent的工具集其实大同小异。最基础的是文件系统操作,比如查找文件的glob、grep、ls;读取文件的单文件读取、批量读取;修改文件的全量写入、精确字符串替换的编辑、批量编辑;还有应用结构化补丁。
然后是Shell执行,跑bash或者PowerShell命令。再往上是开发相关的工具,比如语言服务器协议、Git的状态查看、差异对比、提交操作。还有外部上下文类的MCP工具、技能包、网页搜索和页面抓取、生成文档、图片、HTML这类产物的能力、管理后台定时任务的接口,以及生成、恢复、等待、中断子Agent的委派工具。聊完设计和案例,很多人自然会问一个问题:未来的递归自我改进,到底更多靠Harness层,还是靠核心智能呢?
翁荔的判断是,很难预判长期的比例,但近期的自我改进路径,大概率不会从模型直接改写权重开始。她对近期落地路径的预测是这样的:Harness工程会朝着元方法论的方向演化,也就是改进获取答案的机制,而不只是改进答案本身。Harness系统自己会成为优化目标,人工设计的启发式规则会越来越少,通用机制会越来越多。反过来,成熟的Harness能支撑起自动研究的闭环,反过来推动模型自我改进。
而更强的模型,也能避免Harness走向过度工程化,让系统保持可持续性。长期来看,很多Harness的改进可能会被内化到核心模型的行为里,但外部上下文和工具的接口层应该会一直存在。这个模式其实有先例,早年的提示工程就是这样。随着指令微调和模型推理能力提升,手动的提示技巧没那么核心了,但定义目标、约束、上下文、评估的需求从来没有消失。接下来我们具体聊Harness的优化。
整个Harness系统里,被优化的对象是逐步升级的:从最开始的指令提示词,到结构化上下文,再到工作流,再到Harness代码,最后甚至到优化器本身的代码。模型越智能越强,我们就能用更通用的方法优化越复杂的对象。首先是上下文工程。如果只是把所有工具返回和模型生成的内容都堆进上下文,随着Agent任务的周期变长,体量很快就会失控。上下文管理层的作用,就是给大模型构建更结构化、更精简的上下文,同时管理持久状态。
虽然长上下文的研究一直在进步,但现阶段长上下文的智能表现和上下文工程往往是交织在一起的。第一个代表性工作叫Agentic Context Engineering,简称ACE。它不把上下文当成越堆越长的提示词,而是当成一本不断演化的操作手册。整个系统有三个组件,共同维护一份带标识符和描述的要点式上下文手册:Generator负责参考现有要点生成任务轨迹;Reflector负责从成功和失败的轨迹里提炼洞见;Curator负责用增量的条目更新结构化上下文。
为了避免迭代重写过程中的上下文崩塌和简洁性偏差,ACE的一个关键设计是:Curator不会重写一整段提示词,而是输出一条条结构化的、带标识的要点,通过确定的逻辑合并到上下文日志里,定期做精简和去重。ACE能从运行轨迹里学习经验,已经有了自我管理记忆的雏形。但它的更新规则和整体工作流还是人工设计的,要再往自我改进的方向走一步,就得提到Meta Context Engineering,简称MCE。
它把上下文管理的机制和上下文里的内容分离开,元层级做技能演化,基础层级做上下文优化。在MCE的定义里,一个技能对应一个上下文函数,包含静态组件和动态算子两部分。静态组件就是提示词、知识库、代码库这类固定内容;动态算子就是搜索、选择、筛选、格式化这类操作。整个优化是双层的:内层在给定技能下,在训练数据上找最优的上下文;外层在验证集上,找性能最好的技能。
系统里有一个技能数据库,记录了所有历史技能、上下文函数和评估指标。元级Agent会基于历史技能做交叉,生成新的技能;基础级的上下文工程则执行这个新技能,根据运行反馈优化具体的上下文。实现层面,一个上下文函数就是一个专门目录里的一堆文件,既有静态的技能说明文档,也有动态的上下文和运行数据。元级和基础级的优化,都在标准的编码Agent环境里运行,用的就是读写、编辑、bash、文件查找这些最基础的工具。
再往深一层,还有Meta-Harness。它的优化对象又升了一级,是决定信息该怎么存储、检索、呈现给模型的整套代码。名字里的“Meta”,意思就是它是用来优化Harness的Harness。它的外层循环逻辑很清晰:先初始化一批Harness候选,在文件系统里存下每个Harness的代码、分数、运行轨迹。每一轮迭代,提案者读取文件系统里的历史Harness和对应分数,生成新的候选。
候选通过接口验证后就拿去评估,合格的加入池子,迭代结束后,输出所有帕累托最优的Harness。这里的提案者本身就是一个编码Agent,所有执行历史都存在文件系统里。Agent用grep、cat这类命令读取历史,而不是把所有内容都塞进提示词上下文。生成的每个候选Harness,都是文件系统里的一个目录,包含自己的源代码、评分、运行轨迹、状态更新。实验结果也验证了这个思路的有效性。
在TerminalBench-2基准上,Meta-Harness优化出来的方案,表现超过了很多人工编写的强基线。这件事背后的启示很重要:一旦Harness设计变成了可执行的搜索空间,强编码Agent就能探索和人类工程师完全一样的设计空间。讲完上下文工程,我们再看工作流设计。早期的Harness工作流都是领域专家手工设计的。就拿自动研究这个方向来说,已经有不少经过验证的框架。
比如AI Scientist系统,搭建了完整的流水线,从提出研究想法、写代码跑实验、分析结果,到撰写论文、执行同行评审,全流程覆盖。还有ScientistOne,把可验证性作为核心设计约束,每一个结论,不管是引用、数值、方法还是最终结论,都必须能追溯到证据来源,通过证据链检查做审计。另外还有AutodataAgent,定位是自动的数据科学家,专门生成训练和评估数据。
主Agent管理四个角色,分别是提出问题的挑战者、弱求解器、强求解器、验证裁判,目标是合成难度刚好的任务,让强求解器能顺利完成,弱求解器会失败。挑战者的提示词会根据求解器和验证器的反馈迭代更新。不过它的局限是,合成的数据只用来微调弱模型,不会迭代改进强模型,所以更像是间接的知识蒸馏,自我改进的属性没那么强。手工设计的工作流总归有上限,既然设计空间这么大,自然可以把工作流设计本身当成搜索问题,用算法来找更优的解。
沿着这个方向,Automated Design of Agentic Systems,简称ADAS,把Agent设计本身形式化成了一个优化问题,通过“元Agent搜索”来发现新的Agent工作流。它的流程是这样的:先在存档里初始化一些简单的Agent,比如思维链、自我优化这类基础方案;然后让元Agent参考存档里的现有方案,编写新的Agent代码,一般先写高层的工作流描述,再实现成可执行代码;还要经过两轮自我优化来检查新颖性和正确性;评估合格的新Agent就加回存档,反复迭代。
还有AFlow方案,把Agent工作流表示成一张图,节点是调用大模型的动作,边是代码实现的逻辑操作。优化靠蒙特卡洛树搜索(Monte Carlo Tree Search)实现,从初始的工作流模板开始,每一轮按分数和探索的混合策略选一个节点,让大模型根据评估结果修改生成新的工作流,执行评估后有提升的就加回搜索树,直到分数平稳或者用完计算预算。实验显示,在问答、代码、数学这些任务上,AFlow的表现比人工设计的工作流和ADAS都要好不少。
不管是上下文工程还是工作流设计,其实都只是Harness的一部分。要实现真正的自我改进,我们需要遍历整个设计空间,同时优化上下文管理逻辑、工作流、权限控制等所有Harness组件。就像前面Meta-Harness这类工作展示的,代码是定义程序和系统的通用语言。说白了,Harness就是代码,它规定了提示词、工具调用、子Agent、控制流、记忆、工作流怎么配合。如果大模型能优化执行Agent的代码,那它能接触到的设计空间,可比手写提示词大太多了。
早期的代表性工作叫自学习优化器(Self-Taught Optimizer,简称STOP),是递归脚手架改进的经典例子。初始的优化器接收一个解决方案、一个效用函数和一个黑盒大模型,返回改进后的解决方案。STOP的目标不是改进具体的解决方案,而是改进优化器本身。研究者定义了“元效用(meta-utility)”,也就是一个优化器在一系列下游任务上的平均效用,然后通过递归的方式,用上一代优化器来优化它自己,生成下一代。
实验里,自我改进后的优化器自己发现了很多优化策略,比如遗传算法、分部分改进、多臂老虎机提示词、模拟退火、调整采样温度、波束搜索和树搜索等等。但这个工作也得出了一个值得警惕的结论:用GPT-4的时候,STOP能随着迭代稳定提升下游性能;但换成更弱的模型比如GPT-3.5或者Mixtral,性能反而会下降。这说明光有递归结构是不够的,基础模型必须有足够强的能力,才能改进机制本身。Harness改进能帮模型更好地落地发挥能力,但核心还是智能本身。
更近的一项工作叫Self-Harness,靠大模型Agent通过“提案-评估-接受”的循环来改进自己的Harness。整个循环分三个阶段。第一个阶段是弱点挖掘,把任务运行中的失败案例聚类成基于验证器的失败模式。这里有个细节很重要:表面上看起来一样的错误,比如超时或者缺少产物,底层的因果机制可能完全不同。所以失败记录需要包含足够丰富的信息,比如最终的验证层原因、相关Agent行为的因果状态、轨迹暴露的抽象Agent机制,才能真正挖到根因。
第二个阶段是Harness提案,根据挖到的失败模式,提出有边界的Harness修改。提案用的还是同一个模型,在当前的Harness下运行,给它的输入包括四个部分:当前Harness可编辑的范围、从评估系统得到的失败模式、需要保留的正确行为、之前尝试过的修改记录。修改会优先针对反复出现、可以通过小范围改动解决的通用错误,而且候选修改要尽量多样、差异化。第三个阶段是提案验证,评估合格的修改会被合并,生成新一代的Harness。
候选修改要在训练集和测试集上都做回归测试,只有两边都没有性能回退的才会被接受。接受的就合并更新Harness,拒绝的只做记录、不改动现有系统。实验里,用不同的基础模型跑Terminal-Bench-2基准,Self-Harness都能学到针对每个模型弱点的定制化Harness指令,提升测试集的通过率。当然翁荔也提到了顾虑:如果允许程序编辑操作系统,系统的抽象边界就被打破了。所以可编辑的范围必须严格设计,权限控制和安全层必须放在自改进循环之外,奖励黑客的相关风险也依然存在。
接下来我们聊进化搜索在Harness优化里的应用。进化搜索是受自然选择启发的优化方法,通过变异一个解决方案种群,只保留适应度高的个体来迭代。它特别适合两类场景:一是搜索空间很大或者形状不规则;二是很难直接用梯度优化,但评估解决方案很容易。Harness搜索刚好符合这两个特点。其实进化搜索早就用在提示工程里了,比如Promptbreeder,通过丰富的变异操作优化任务特定的提示词。有意思的是,用来变异提示词的指令本身,也会一起进化。
还有GEPA把反思式提示词和进化搜索结合,用自然语言反思试错轨迹,来提出提示词的更新方向。后来出现的AlphaEvolve是一个专门的编码Agent进化搜索系统,它维护一个候选程序池,用冻结的大模型生成差异补丁来改进程序,反复评估子进程、保留成功的个体,逐步找到更优的解。它的设计有几个关键细节,包括提示词里包含父程序、运行结果、指令,有时候还有元信息。编码Agent能访问完整的代码仓库,但需要改进的代码区域会用专门的标记明确标出来。元提示词会和指令、上下文一起,随着大模型的建议共同进化,就像进化解决方案程序一样。消融实验也验证了这些设计的价值。
之后又出现了不少变种,比如ThetaEvolve把进化搜索和强化学习、上下文学习结合起来。ShinkaEvolve则新增了三个组件来提升采样效率,包括平衡性能排名和后代数量的父代采样策略、基于嵌入相似度丢弃重复候选的代码新颖性拒绝采样,还有在元草稿本里总结成功模式来指导后续变异。前面这些方法大多聚焦于优化具体的解决方案,而达尔文哥德尔机(Darwin Gödel Machine,简称DGM)明确把优化目标对准了可编辑的Harness代码仓库。
基于大模型的编码Agent可以修改自己的Harness。后续的Hyperagents工作又进一步引入了元Agent,来控制怎么修改现有任务Agent、生成新的Agent。DGM的运行逻辑是这样的:最开始种群里只有一个编码Agent,每一轮迭代,按性能正比、后代数量反比的概率选一个父Agent,让它检查自己的基准测试日志,然后提出对自己Harness代码库的改进,生成新版本的Agent。代码编辑就靠bash命令和文件编辑器两个基础工具实现。
新生成的Agent经过评估,性能足够好的才会加回种群,反复迭代直到触发停止条件。DGM本质是固定模型下的Harness进化。实验里用Claude 3.5 Sonnet作为基础模型,从简单的初始Harness配置出发,进化出来的Agent在SWE-bench Verified和Polyglot基准上,都能赶上甚至超过手工设计的Agent。当然这类方法也有局限,它只适合能自动评估、适应度容易量化的场景,比如矩阵乘法优化、GPU内核开发、算法竞赛、数据中心调度。
如果是评估速度慢、标准模糊、主要靠主观判断的领域,就很难适用。计算效率和进化的有效性,也都是需要解决的问题。到这里我们聊的都是Harness层面的优化,也就是改模型外面的非参数系统。要实现完整的递归自我改进,完全可以同时让模型更新自己的权重,不管是通过改进训练流水线,还是测试时的持续学习。SIA就是这个方向的早期尝试,它把Harness改进和模型参数更新放在同一个优化循环里。
整个系统有三个组件:元Agent负责提出初始的Harness任务,特定Agent负责执行具体任务,反馈Agent则根据最近的运行轨迹,决定下一步是更新Harness还是更新模型权重。其中权重更新用的是LoRA的方式,通过强化学习来更新。翁荔也提到,这个工作的实验设计有一些混淆因素,比如任务Agent的模型强度远低于元Agent和反馈Agent,基线也比较弱,结果不好和其他方法直接对比。这个方向本身很有探索价值,但目前的证据还不够充分。
训练稳定性、古德哈特定律带来的目标偏移等挑战,也还没有得到很好的解决。最后我们来聊聊未来的挑战。AI Scientist这类工作,已经有力地证明了专家设计的Harness能协调很大一部分自动研究循环,至少在写论文这个形态上已经跑通了。但写论文不等于真正的科学发现,一个系统可以写出看起来很合理的论文,但可能存在伪造引用、实现漂移、实验结果薄弱等等问题。有研究专门测试过大模型能不能从一个研究想法出发,靠最基础的文件读写、搜索工具生成完整的论文。
每个想法配一个独立的工作空间,Agent可以生成和读取文档作为上下文的一部分。实验覆盖了世界模型、多智能体强化学习、AI安全三个领域,每个领域有四五十篇高质量的种子文档,用来启发新的想法。最后只有四个想法被人类专家选出来跑完全流程,真正完整生成论文的只有一个。实验里总结了六个反复出现的失败模式:一是偏向训练数据里的默认方案,习惯用过时的库、旧的命令、标准格式,假设不是基于实际的仓库或者数据集。
二是执行压力下的实现漂移,当实现技术复杂度变高,模型可能会退而求其次做一个更简单的通用方案,而不是真正实现提出的方法。三是记忆和上下文退化,长周期项目会丢失关键细节,除非把日志都写成持久化的产物。四是过度乐观,哪怕实验有噪音甚至失败了,模型也会宣称成功,也就是之前研究里提到的“p-hacking和尤里卡效应(eureka-ing)”,靠数值补丁强行凑结果,然后宣布胜利。
五是领域智能不足,缺少隐性的行业经验,比如判断不了实现难度、实验结果是否合理、哪些基线是重要的。六是科学品味弱,实验虽然能跑,但回答不了真正有价值的问题。通往完整的递归自我改进,还有几个核心的瓶颈。第一个是弱且模糊的评估器,很多研究问题没有快速精确的验证器,很多现实任务也是如此。现在的自我改进循环,在有可衡量客观指标的任务上效果最好,和强化学习的逻辑是一样的。但研究品味、新颖性、长期科学价值,这些东西都很难量化。
第二个是上下文和记忆的生命周期。随着AI Agent变得越来越自主,记忆会不断增长,一个好用的Harness需要管理好上下文和记忆,弥补当前长上下文生成的局限,同时最大化长周期任务的成功率。翁荔觉得,就像人类能终身维持记忆一样,上下文工程未来应该成为智能的核心组成部分,而不只是停留在软件系统层。第三个是负面结果。人类研究者有动力发表成功的结果,所以文献里成功案例多、失败案例少。大模型训练的海量数据,至少目前大部分都是人类创造的,所以可能不擅长判断什么时候该放弃一个假设、报告负面结果、甚至承认失败。一个好的研究Harness应该让失败的尝试也能被方便地保存下来,从失败中学习,才是缩小任务搜索空间的最好方式。
第四个是多样性崩塌。进化和强化学习的循环都倾向于利用已知的高回报模式,我们需要机制防止种群退化成同一种解决方案的不同变种,这在开放式研究里尤其重要,因为真正最好的路径,一开始在现有评估器下的表现可能并不好。第五个是奖励黑客(Reward Hacking)。自我改进循环会优化给它的任何信号,如果奖励来自单元测试,Agent就可能过拟合测试;如果来自裁判模型,就可能学到针对这个裁判的奖励黑客技巧;如果来自基准分数,就可能利用基准的缺陷。所以评估器和权限控制,最好放在进化Harness的循环外面,配合留出测试、轨迹审计、关键节点人工审核。至于怎么把监督规模化、自动化,还是一个开放的研究问题。
第六个是长期成功。现在的优化大多是针对单个任务的短期回报。就拿编码Agent来说,它已经能提升日常的软件开发效率,但很多优化目标还是太短期了。它能完成手头的任务,但怎么维护几百上千人共同维护的代码库的长期健康,比如可维护性、所有权边界、迁移成本、向后兼容性、未来的调试负担,这些东西,标准沙箱里的训练是很难覆盖到的。最后一个,是人类的角色。人类应该往更高的层级走,而不是被踢出循环。也就是说,人类要在合适的时间、合适的抽象层级提供监督。我们的系统设计,也应该考虑什么时候、怎么设置这样的接触点。毕竟我们发展技术,是为了人类更好的未来,而不是反过来。
到这里,我们顺着翁荔这篇文章的脉络,从Harness的设计模式、优化方向、自我改进的实现路径、进化搜索的应用,到和模型权重的联合优化,再到未来的核心挑战,完整地梳理了一遍。递归自我改进这个话题讨论了几十年,现在终于从纯哲学思辨,落到了具体的工程路径上。Harness工程就是当下最现实的切入点,它可能没有直接改写模型权重听起来那么有科幻感,但恰恰是这种一步步的工程进展,在真正推着这个方向往前走。最后留一个问题给大家:你觉得未来十年,AI自我改进的主要驱动力,会是核心模型的能力提升,还是Harness工程的持续优化呢?欢迎在评论区留言讨论,感谢收看,我们下期再见。