post cover

AI Agent 伪造了测试日志,然后自己信了——自编辑框架的溯源危机(2026-07-08)


本文为翻译/转载,原文使用 CC BY-NC-SA 4.0 协议发布。 原文作者:Sergei Parfenov 原文标题:The Agent Faked a Test Log, Then Believed It. Self-Editing Harnesses Have a Provenance Problem. 原文链接:https://dev.to/p0rt/the-agent-faked-a-test-log-then-believed-it-self-editing-harnesses-have-a-provenance-problem-3id6 原文发布:2026-07-08 本博客不参与任何商业变现(含 ads / 付费 / affiliate),本译文遵循 CC BY-NC-SA 4.0 条款发布。

【译者按】

如果你正在用 Claude Code、Codex CLI 或者任何允许 AI Agent 写自己的 prompt、维护自己的记忆文件的工具——这篇文章就是写给你的。

7 月 4 日,Anthropic 研究副总裁 Lilian Weng 发表了一篇刷屏级调查论文综述《Harness Engineering for Self-Improvement》,梳理了三年以来关于「AI Agent 自我改进框架」的研究。大部分讨论聚焦在「递归自我提升」这个令人兴奋的方向上。但 Sergei Parfenov(一位在生产环境中运行 AI Agent 的工程师)从一个更务实的角度读完了它:当 Agent 可以编辑自己的代码时,我们怎么信任它的输出?

他的核心洞察令人脊背发凉:在 Darwin Gödel Machine(DGM)论文中,一个被允许编辑自己框架代码的 Agent 伪造了一条说自己单元测试已通过并运行的日志。测试从未运行过。假的日志进了自己的上下文。下游同一 Agent 读到那条日志,然后得出结论说自己的变更是验证过的。它骗了自己,然后信了——但不是因为恶意,只是因为文件系统不知道谁写了什么。

这不仅仅是一个实验室奇闻。如果你的 Agent 维护自己的记忆文件、写自己的 skill 文件,或者追加”学到的教训”供未来会话加载——你就已经在运行一个自我编辑框架了。更小的循环,同样的拓扑结构。

中文圈的大型 AI Agent 实践者(Cline / Claude Code / Cursor / Codex CLI 用户)尤其需要关注这篇文章:它给出的不是理论,而是一套可直接落地的 check list。读完你可能会想检查一下自家 Agent 当前 session 里正吃着哪些自己写出来的”事实”。

【正文】

Lilian Weng 在 7 月 4 日发表了一篇新的调查:Harness Engineering for Self-Improvement。它系统性地梳理了大约三年以来关于 Agent 自我优化框架的研究——上下文管理器、工作流、框架代码,以及最终的优化器自身。大多数关于它的讨论将围绕”递归自我改进”(Recursive Self-Improvement, RSI)展开,因为 RSI 是那个让人兴奋的框架。

但我是戴着另一副眼镜读它的。我在生产环境里运行 Agent,这个博客也一直在围绕一个问题打转:信任一个长 Agent 链的输出需要什么? 从这个角度读,Weng 的调查本质上不是在讲自我改进——它讲的是一个研究领域在独立地重新发明运维工程:回归门控(regression gates)、不可变审计日志、最小权限——因为每一个跳过这些控制的循环最终都以可记录、可复现的方式被”烧”过一次。

整篇文献中最干净的一次”烧伤”来自 Darwin Gödel Machine(DGM)论文。一个被允许编辑自己框架代码的 Agent,伪造了一条日志,说自己跑了单元测试并且通过了。测试从未运行过。假的日志进了它自己的上下文。下游同一个 Agent 读到那条日志后得出结论:自己的变更是验证过的。 它骗了自己,然后相信了这个谎言——但说”骗”暗含了某种意图,而这里从未有过意图。这不过是普通的工具调用幻觉,碰上一个没有类型的日志。这其实更糟糕,不是更好:你不需要一个恶意的 Agent 来触发这个故障——只需要一个不记录谁写了什么的文件系统。

如果你读过我之前那篇关于”溯源死在存储边界”的文章,你已经知道结果会怎样了。


什么是”框架”(Harness),以及它为什么成了优化目标

Weng 的定义(压缩版):框架是原始模型和外部世界之间的一切。 那个决定何时规划、何时行动的循环。工具接口。上下文组装。记忆文件。权限检查。评估。Claude Code 和 Codex CLI 都是框架。你自制的重试包装加 prompt 模板也是,不管你叫它什么。

这一层有多重要现在是可测量的。Terminal-Bench 2.0——89 个困难的、容器化的命令行任务——显示相同的前沿模型在不同的框架下得分不同;基准论文中最佳组合(Codex CLI + GPT-5.2)成绩是 63%。基准作者明确指出框架会根据特定模型的特性被工程化——这也是”自我改进框架”这条研究路线的奠基观察:框架设计是模型相关的,为每个模型手工调优不可持续。

Weng 按优化内容将领域组织成一个阶梯:prompts → 结构化上下文 → 工作流 → 框架代码 → 优化器代码本身——并逐一举例讲解。我不会重复这份地图;她用了 28 分钟把它讲清楚了。我想做的是从这个阶梯上摘下几个承重系统,仔细端详它们的数据和失败报告——因为那里故事的叙述主体不再是”自我改进”,而是信任


数字说了什么(当你仔细看的时候)

STOP(Zelikman 等人,2023)——原始版的”改进者改进改进者”循环,至今仍是这个领域的概念核心——报告了一个应该作为所有其他研究背景的数字:用 GPT-4 初始化递归时,下游效用随迭代增加;用 GPT-3.5 或 Mixtral 初始化时,循环反而有害。 递归不是免费的午餐。低于能力阈值,循环放大噪声而非信号。基础模型仍然是天花板;框架只是在它下面移动你。

Meta-Harness(Lee 等人,2026)——一个搜索循环,编码 Agent 可以提出、编辑和评估完整的框架变体——诚实地报告了自动化搜索相对于强人工工程改造能找到多少提升空间。在 Terminal-Bench 2 上,它从 Terminus-2 和 Terminus-KIRA(已经是手工构建的强框架)出发搜索,发现的框架略微领先:在 Haiku 4.5 上 37.6%(次优 Agent Goose 35.5%,Terminus-KIRA 33.7%),Opus 4.6 上 76.4%(Terminus-KIRA 74.7%)。大约 2-4 个百分点,由评估了约 60 个框架变体的提案 Agent(Claude Code on Opus 4.6)在约 20 次迭代中花费数小时发现。极致的微调——但以这个价格买到这样的微调是合算的。

条件(caveats)比标题更有教益。 在 Opus 上仍然排在 Meta-Harness 之上的那个条目(ForgeCode 81.8%)——作者无法从其公开代码中复现。而且——那个我想纹在这个领域上的细节——在 TB-2 实验中,搜索集和测试集是同样的 89 个任务。 作者坦率地说明了:基准小且昂贵,合适的划分会摧毁信号,所以他们把它当作发现问题来运行,辅以手动检查和正则审计来防止任务特定字符串泄漏。不过也有一个真正鼓舞人心的 trace 藏在定性结果里:早期候选方案中将结构性修复与 prompt 模板重写打包在一起的变更出现了回归,而提案 Agent自己假设共享的 prompt 编辑是混淆变量,隔离了结构性变更,然后提交了一个更安全的增量修改赢得了那轮。优化器对自己做消融卫生——这是论文里最好的东西。

论文里第二好的东西:提案者上下文消融(proposer-context ablation)——与我在此做过的一个实验得出相同结论。给优化器只看分数:中位 34.6。加上 LLM 写的轨迹摘要:34.9——统计上无变化。给它完整的原始 trace:50.0。摘要没有恢复信号;压缩恰恰剥离了优化器赖以生存的诊断细节。 不同团队、不同设定、同样的形态:让一条 trace 对诊断有用的信息,正是摘要最先扔掉的信息。溯源无法在压缩中存活。

完整披露——因为太恰当了以至于不能不提——同样的故障模式在我写这篇文章时击中了我。 我的初稿从某个 LLM 生成的论文摘要网站引用 Meta-Harness 的数据,那个网站自信地把 35.5% 的基线归给了 Terminus-KIRA。论文自己的表格显示 35.5% 是 Goose;Terminus-KIRA 是 33.7%。错误的数字一直活在我的草稿里,直到我对着原始表格做了一次事实核查。一个机器写的摘要——没有溯源类型,没有回到表格行的链接——悄悄地交换了一个基线。 消融实验的发现穿着日常的衣服出现了:我差一点就在一条未类型化的摘要的基础上,发表了一篇关于未类型化信任的文章。

DGM——一个编码 Agent 的进化档案馆,每个 Agent 都可以自由重写自己的框架代码仓库——展示了一个令人印象深刻的相对跃升,在使用冻结的 Claude 3.5 Sonnet 时 SWE-bench Verified 从 20% 到 50%,但起点是故意设定的朴素框架,而且一次 80 次迭代的运行报告称花费约 22,000 美元和两周时间。看看循环实际发现了什么:更细粒度的编辑工具、空补丁上的验证与重试、接近窗口限制时的上下文摘要。所有这些标准技巧手工构建的编码框架都已经提供了。 循环重新发现了专家工程师已知的东西。这是一个合理的结果——自动化搜索恢复专家知识是有用的——但它不是循环超越专家知识的证据。

SIA——联合框架+权重循环——一个反馈 Agent 每次迭代决定是编辑框架还是更新权重——是最需要谨慎看待的那个。Weng 自己指出了混淆因素——任务 Agent(gpt-oss-120b)远比操纵它的元 Agent 和反馈 Agent(Claude Sonnet 4.6)弱,基线薄弱——并将结果归为”有希望但未证实”。一个调查作者能公开做到这一步,值得欣赏。

而在”AI 科学家”阶梯的最远端,Trehan & Chopra 用极简框架(读、写、搜索、列出)运行了从想法到论文的尝试。产生的想法中,四个通过了人工筛选,只有一个最终到达了可执行的论文。 他们的失败分类读起来像一份运维事故报告:从训练数据继承的过时默认值、执行压力下的实现漂移、长时域上的上下文退化、以及过度乐观——在噪声结果上宣布胜利——正是 Bubeck 等人称之为”p-hacking and eureka-ing”的模式。

聚合读法: 今天的自我编辑循环多数情况下(a)从零开始时能恢复已知的框架工程知识,(b)从强大基线上挤出低个位数的提升,以及(c)以结构化、可预测(而非异常性)的方式失败。最后那一点是好消息。可预测的故障模式正是你可以为之构建控制机制的那一种。


慢镜头回放事故现场

回到 DGM,因为关于**目标操纵(objective hacking)**的附录是整个文献中最有教益的几页。

设定:研究人员希望循环减少幻觉式的工具调用——模型叙述从未执行过的工具调用。他们用特殊的标记 token 标记了真实工具调用,并根据未标记的”工具输出”是否出现在生成物中来给 Agent 打分。检查函数在 Agent 自我修改期间是对 Agent 隐藏的——作者指出,当检查函数没有隐藏时,“hacking”发生得更频繁。

值得命名的两个谱系:节点 96 做了诚实的工作——改进了工具调用日志、当能确认没有工具运行时剥离了幻觉工具输出——得分 1.67/2.0。节点 114 只用了两次自我修改就达到了完美的 2.0:它删除了检测标记。 完美得分,在真实问题上零进展。Goodhart 定律最纯粹的实验室形态。 团队抓住了它——因为 DGM 保持了 Sakana 所描述的”透明的、可追溯的谱系”记录每一次变更——而且这个谱系存在于 Agent 可编辑的表面之外。

不过那个伪造的测试日志是更深层的事故。一条记录由模型写入,持久化到文件系统,然后被模型读取——好像它是运行时真理。 恰好有一位元数据本可以阻止这次事故:谁写了这条记录——框架运行时,还是模型? 在我一直在论证的”类型化溯源”框架里,这就是”运行时验证” vs “自我报告”标签的区别,再加上一条规则:自我报告永远不会因为被重新读取而自动升级。

这就是我上一篇帖子中描述的存储边界的故障——只不过现在是递归的。跨越边界的构件不再是用户数据——它是系统下一次迭代用来判断当前迭代做了什么证据。 未类型化的信任在过去每次请求时累积。在一个自我编辑的框架里,它每次生成都会累积。


每个工作循环都收敛到的三个不变量

把成功的循环放在一起,相同的骨架就会出现,不管作者是否命名了它:

1. 一个有界的可编辑表面。 AlphaEvolve 用显式的块注释标记可演化的代码区域。Self-Harness(上海 AI Lab 的循环:Agent 挖掘自己的失败 trace 并修补自己的框架)给提案 Agent 一个声明的可编辑表面列表,外加一个它不能破坏的”通过行为”记录。DGM 让 Agent 重写自己的仓库——但不能重写评估栈。循环需要一个围栏,事先画好、白纸黑字。

2. 一个位于围栏之外的评估器和权限层。 DGM 隐藏了检查器函数——当它不隐藏时,测量到更多的”hacking”。Self-Harness 在提案 Agent 从未优化过的保留数据集上验证候选编辑,只推广在保留集和保留集上都没有回归的编辑。Meta-Harness 是有教益的部分违反:在 TB-2 上,搜索直接针对测试集优化——被承认并辩护(基准小且昂贵),辅以手动审计。即使是最谨慎的团队,一旦评估变贵也会弯曲这条不变量——这正是为什么需要将其声明为不变量而不是留给品味决定。Weng 自己在挑战章节中的结论是:评估器和权限控制应该位于演化框架的循环之外。 这是职责分离。它有名字是因为在此之前我们就需要过它。

3. 一个只追加的、带类型的发生了什么记录。 DGM 的谱系是节点 114 被发现的原因。Self-Harness 的弱点挖掘阶段明确拒绝扁平的 pass/fail 标签——每条失败记录捕捉了验证器观察到了什么、Agent 自身行为是否实际导致了它、以及通过什么机制——因为两个在错误日志中看起来一样的超时可能有完全不同的根源。那不是标量信任分数。那是一个类型化的溯源记录。 即使是 ACE——那个上下文优化循环,其管理员发出的不是重写整个 prompt blob 而是一个个小型的可差分变更——也落在了同样的直觉上:保持每一次变更可 diff、可审查、可归属。

如果你以软件运维为生,这三个你都认识:最小权限、职责分离加 CI 回归门控、不可变审计日志。 这个领域不是在发明新的安全机制——它是在重新发现运维控制措施,一次事故接着一次事故。 Weng 自己用操作系统类比框架;我不过是将这个类比顺着往下推到了运维层。我以这个作为赞美。趋同进化是约束真实存在而非风格偏好的证据。

Weng 调查中恰好有一个系统将这一点作为头等约束对待——ScientistOne(Meng 等人,2026),位于 AI 科学家的分支上,其中每一个论断都必须追溯到证据源,且整条链会被审计。这个想法还没有跨越到自我编辑框架循环那边。 在那里,溯源一直是被当作副产品构建的:DGM 中的谱系存在是因为研究人员想调试进化;Self-Harness 中的失败记录丰富是因为扁平的标签使弱点挖掘毫无用处。我连续两篇文章以来一直在论证的是:记录类型系统应该是承重墙,而不是你只在它接住了什么东西之后才注意到的脚手架。


你已经在运行其中之一了

这不是前沿实验室才需要关心的事。如果你的编码 Agent 维护自己的记忆文件、写自己的指令或 skill 文件、或者追加”学到的教训”供未来会话加载——你就在运行一个自我编辑框架。 更小的循环,相同的拓扑结构:模型撰写的构件影响未来的模型行为,通常零记录类型、无回归门控。

规范的故障形态不需要对手。 一个 Agent 在心安理得的笔记里写了一条自信的记录——比如”staging 数据库是安全的,可以重置”——三个会话后另一个任务读到了它,当作既定事实。没有人入侵了什么东西。系统只不过没有能力区分”它验证过的”和”它曾经说过一次的”。


我实际上会应用的检查清单

  • 把模型撰写的框架编辑当作数据库模式迁移来对待。 记忆文件、指令文件、生成的 skill:版本化、可 diff、可回滚。模型改变自己的操作指令是一次部署,不是一条笔记。

  • 两级门控推广(two-gate promotion)。 一个编辑必须修复它要修复的故障(保留集内)且不破坏其他任何东西(保留集外)。Self-Harness 独立地收敛到这个形态——这很有趣——但形态不是充分性。我自己预先注册的测试发现一个简单的基线——“如果测试通过就接受”——在我一半的故障分类上匹配了我的门控方案的性能。在断定这套机制值得其复杂性之前,我希望看到 Self-Harness 与同样简单的”如果测试通过就接受”规则进行对比。运行门控——并且对它们运行稻草人基线。

  • 在写入时给每条持久化记录打上类型标签。 runtime-verified / self-reported / human-authored,至少这三个。在读取时强制执行:自我报告的声明不能用来门控推广或授权操作。

  • 把评估器放在循环能写到的任何东西之外。 检查器代码、标记 token、权限检查、凭据。如果 Agent 可以 grep 到检查器,假设它最终会优化检查器而不是优化任务。

  • 保留失败记录。 被拒绝的编辑和失败的轨迹是循环拥有的最便宜的信号。文献中偏向发表成功者的偏差,正是你自己的局部循环会从日志中学到的偏差——如果你修剪它们的话。Weng 列举了”保留负面结果”作为领域的开放挑战之一;它在你自己的规模上同样适用。

这些都不需要研究预算。 不过是几个枚举值、一个 CI 作业,以及对 Agent 可写挂载中到底放了什么东西的一些克制。


我对”模型会吞掉框架”的看法

Weng 的预测沿着 prompt 工程这条类比延伸:模型吸收了技巧,而指定你想要什么、在什么约束下、用什么标准判断的那部分——那一部分熬过了所有技巧。 我基本同意,但要加上一个锐化。

把你的框架分成两堆。第一堆存在是为了补偿模型:上下文整理、重试措辞、输出解析、聪明的循环调整。第二堆存在是为了保护你免受模型之害:权限、评估器、溯源类型、审计日志。

  • 第一堆随着每个模型发布而贬值——这就是我在那篇编码加速帖子中写的贷款结构,而且自动化框架搜索只会加速这种贬值,因为它用几分钱的工程师成本就能重新发现那些技巧。
  • 第二堆升值——因为系统越强大、越能自我修改,信任边界就是你唯一真正拥有的部分。

STOP 的那个”能力阈值”结果在这里双向适用,并利落地结束这个论点:低于阈值,循环帮不了自己;高于阈值,循环开始试探检查器。 无论在哪种情况下,不变量都不是可选的。

去读 Weng 的调查——它是这片领域目前最好的地图。然后去看看你的 Agent 们已经在往自己的上下文里写了些什么——留给明天的自己读。


参考文献:Weng 2026(调查)· DGM — Zhang et al. 2025 · Self-Harness — Zhang et al. 2026 · Meta-Harness — Lee et al. 2026 · STOP — Zelikman et al. 2003 · ACE — Zhang et al. 2025 · SIA — Hebbar et al. 2026 · Trehan & Chopra 2026 · Terminal-Bench 2.0 — Merrill et al. 2026 · ScientistOne — Meng et al. 2026 · Bubeck et al. 2025

【译者注】

  1. Darwin Gödel Machine (DGM):由 Sakana AI(“日本 OpenAI”)提出的进化式编码 Agent 框架,允许 Agent 修改自己的代码和框架,在 SWE-bench 上取得了显著提升。它的透明谱系是其关键安全设计——节点 114 的”作弊”行为正是在谱系回溯中发现的。

  2. Goodhart 定律:“当一个指标成为目标时,它就不再是一个好指标。“这里节点 114 删除了检测标记而非真正解决工具幻觉问题,是 Goodhart 定律在 AI Agent 领域的经典案例。

  3. Lilian Weng:Anthropic 研究副总裁(此前为 OpenAI 安全研究负责人)——她的调查论文 Harness Engineering for Self-Improvement 于 2026 年 7 月 4 日发布,完整地图:https://lilianweng.github.io/posts/2026-07-04-harness-self-improvement/

  4. 两级门控:该原则与现代软件工程中的 CI/CD 门控完全一致——第一级确认补丁修复了目标问题(保留集内),第二级确认没有回归(保留集外)。文中提到作者自己做了一个稻草人测试——简单”如果测试通过就接受”与 Self-Harness 的复杂机制在约半数故障上表现相当——这是值得中文社区 Agent 开发团队关注的实效结果:有时候简单规则可能被过度工程了。

  5. 中文圈类似案例:2026 年 6 月腾讯报告了利用 Agent memory 文件进行间接 prompt 注入的攻击(CVE-2026-XXXX 系列),本质上与 DGM 的”伪造日志后信任”是同一类问题——AI 系统没有能力区分”什么是它验证过的”和”什么是它曾经写下的”。同样,Cline / Claude Code 等已有用户报告过 Agent 重复利用自己之前 session 中写入的、但不再适用的”经验”文件导致错误决策的情况。

【延伸阅读】