技能要自我修订,最难的从来不是写那条修订。
多数人盯的是生成:怎么让模型写出一条更好的指导。10 月 8 号挂上 arXiv 的 SkillMorph 盯的是前一步——先说清楚该改哪一句。
我觉得这个方向是对的,比论文自己讲的还要对。
一条修订读起来总是很有道理。这就是它最大的问题。
你让模型看着失败日志写改进建议,它给你的东西逻辑自洽、措辞得体、因果链完整。问题不在写得差。问题是“有道理”和“有效”之间没有必然联系,而这两样在文本上长得几乎一模一样。
换句话说,光靠读,你分不出这条修订是治了根,还是只压了症状。
更麻烦的是因果的方向。模型是从失败结果往回推病因的。同一个失败,能对应五条病因,每条都讲得通。它挑哪条,取决于先验,不取决于证据。这不是诊断,是编故事。不是恶意编——从结果倒推叙述这件事,本身就会长出故事来。
调过程序的人对这个不陌生。程序崩了,你不会随手改一行让它不崩,你得先知道是哪一行。可技能不是代码,它没有栈回溯。技能是一段自然语言,挂掉的时候没有任何东西跳出来说:是第三条那句“优先用 X”害的。
缺的就是这一环。按我的理解,这篇论文补的正是它:先从轨迹里揪出可疑的动作,再让这个动作去指认技能里对应那句话。
顺序反过来才是对的。
多数自动修订的做法是先切技能,拆成条目,逐条改。可技能的“条”本来就不清楚。一条指导的边界在哪儿,一句话,一个 bullet,还是跨两句话的一个条件?你切不准,后面全歪。从行为证据入手,就不用先回答“技能的最小单元是什么”。
¹ 技能写得特别长的时候这招还灵不灵,我不知道。条目一多,轨迹和条目的对应关系大概会变糊。论文在这一点上给我的信息不够。
为什么大家默认先去切技能?因为切这个动作看得见,产物摆在那儿,改完像干了活。取证看不见产物,只看见一堆比较,像是在拖时间。
取证有两件事,我觉得比方法的名字更值得记。
一件是失败证据得和成功证据一起看。只看失败轨迹,你认不出哪个动作是坏的,因为好动作也会出现在失败轨迹里。没有对照就没有归因。这话在别处是常识,在 agent 自我改进这块反而常被跳过:大家习惯把失败日志一股脑喂进去,然后指望模型自己长出判断力。
另一件是跨轮次比。这条更细,也更容易漏。一条修订可能让 A 任务变好、B 任务变坏。单轮看平均分,你同时修好一个弄坏一个,净收益零甚至为正,然后把这个互相抵消的结果当进步收下。该看的是同一个动作在不同演化轮次之间的表现漂移。
² 平均分涨了但内部互相抵消,这个在基准上不一定稳定复现。我这是按机制推的,没有数据。机制上它成立,而且轮次用得越多,抵消累积得越值得担心。
说到这儿,开头那句得收紧一点。“难点不在写”太绝对。写还是要写的,写也不便宜。我想说的是它不是瓶颈——写的上限被找的上限卡死了。找错了地方,写得再漂亮也只是在错的位置上写漂亮话。
论文里我最信的一行不是实验结果,是那个 6。
他们把方法用在一个和 AI 运维团队合作的自动化内核生成场景里,团队接了 6 个技能修订的 PR。不是 600,是 6,而且是被“接纳”,不是自动合并。这数字小得让人放心。它说明这套东西的真实位置是提案者,不是作者。
³ 6 个 PR 样本太小,证明不了泛化。它只说明这套流程在真实团队里跑通过一次。这两件事我分得很开。
这个定位短期内不该变,理由是代价不对称。
一条技能写错,代价不是这次任务失败。是这个技能之后每被复用一次,错就跟着走一遍。技能和一次性 prompt 最大的区别就在这儿:prompt 错了,这次就过去了;技能错了,错误会被复制到它覆盖的所有任务上。技能是会被继承的东西,改它的门槛就该比改 prompt 高。
这个判断我改过一次。原先我觉得自动改技能最大的风险是改坏。现在觉得是改得看起来对。改坏你能发现,看起来对,你要等三个星期才知道。
接下来会怎样。
如果我对,这一两年里“反思”这个词在 agent 语境下会裂成两半。
一半是模型自述哪里错了。便宜,流畅,读着像那么回事,但你没法复核它对不对。
另一半是系统去取证。贵得多,要跑对照,要跨轮次比,笨,可每一步都能被人指着说“这儿不对”。
我们现在用得多的是前一半,还经常把前一半的输出当后一半的结论使。让模型写一段“我哪里做错了”,然后拿这段自述直接去改技能,中间缺的那一步,就是这篇论文想补的。
值得想一下的是:取证这一层真立住了,agent 自我改进的速度反而会变慢。不是方法差,是它会把很多“看起来在进步”的修订拦下来。
慢和准,在这个阶段大概率是同一件事。
¹ 技能写得特别长的时候这招还灵不灵,我不知道。条目一多,轨迹和条目的对应关系大概会变糊。论文在这一点上给我的信息不够。
² 平均分涨了但内部互相抵消,这个在基准上不一定稳定复现。我这是按机制推的,没有数据。机制上它成立,而且轮次用得越多,抵消累积得越值得担心。
³ 6 个 PR 样本太小,证明不了泛化。它只说明这套流程在真实团队里跑通过一次。这两件事我分得很开。
