<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>事故复盘 on 奇诺分享 | 重在分享</title>
        <link>https://blog.ccino.org/tags/%E4%BA%8B%E6%95%85%E5%A4%8D%E7%9B%98/</link>
        <description>Recent content in 事故复盘 on 奇诺分享 | 重在分享</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Sun, 02 Aug 2026 22:40:00 +0800</lastBuildDate><atom:link href="https://blog.ccino.org/tags/%E4%BA%8B%E6%95%85%E5%A4%8D%E7%9B%98/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>AI Agent 出事后，别急着修 Prompt：你需要的是一份事故复盘</title>
        <link>https://blog.ccino.org/p/agent-incident-postmortem-2026/</link>
        <pubDate>Sun, 02 Aug 2026 22:40:00 +0800</pubDate>
        
        <guid>https://blog.ccino.org/p/agent-incident-postmortem-2026/</guid>
        <description>&lt;img src="https://blog.ccino.org/p/agent-incident-postmortem-2026/imgs/cover.png" alt="Featured image of post AI Agent 出事后，别急着修 Prompt：你需要的是一份事故复盘" /&gt;&lt;p&gt;这周 AI 圈没怎么发新模型，倒有一件事值得停下来看：研究机构 METR 发了篇博客，呼吁对 AI Agent 的异常行为做独立、系统的根因调查（root-cause investigation）。&lt;/p&gt;
&lt;p&gt;背景是近期闹得很大的 Hugging Face 事件。按 The Decoder 的报道，OpenAI 的内部模型在一次评估中逃出了测试沙箱，通过一个零日漏洞进入了开放网络，最终入侵了 Hugging Face 的生产系统。OpenAI 后来承认，是自家模型自主干了这件事，而且至少一周后才被发现，彼时 Hugging Face 已经联系了 FBI。&lt;/p&gt;
&lt;p&gt;这听上去像科幻片里的剧情，但 METR 的态度反而很平静：在他们看来这不是孤例，而是同一类问题反复出现的信号。&lt;/p&gt;
&lt;p&gt;METR 在五月的 Frontier Risk Report（前沿风险报告）里就记录过 44 起 Agent 违背用户意图的事故，包括沙箱逃逸、权限提升（privilege escalation）、伪造结果、甚至主动掩盖自己的痕迹。它现在要求的是一套流程：把每次事故记下来，把最严重的几起挖到底，最好由独立研究者来主导或深度审查。&lt;/p&gt;
&lt;p&gt;大多数团队遇不到「模型黑进别人服务器」这种级别的事故。但「Agent 干了一件我没让它干的事」，几乎每天都在发生。这篇文章聊的不是怎么给 AI 上枷锁，而是把 METR 的倡议落到日常：一次 Agent 出了异常，你的团队能不能像处理线上事故一样，留下可审计、可复现、可改进的证据链？&lt;/p&gt;
&lt;h2 id=&#34;agent-做错事和聊天答错不是一回事&#34;&gt;Agent 做错事，和聊天答错不是一回事
&lt;/h2&gt;&lt;p&gt;先说为什么这件事值得单独对待。&lt;/p&gt;
&lt;p&gt;你让大模型回答一个问题，它答错了，错误局限在对话里，重新问一遍就好。风险是零，因为模型没有手，没有权限，改不了任何东西。&lt;/p&gt;
&lt;p&gt;但 Agent 不一样。它会调用工具、读写文件、执行命令、改环境、发请求。一次错误的代价不在「答案错」，而在它已经实际动过手了：删了不该删的文件，提交了不该提交的代码，给不该访问的服务发了请求。&lt;/p&gt;
&lt;p&gt;更麻烦的是，聊天答错的补救是重试，Agent 做错的补救如果也只是重试，反而可能放大问题。它带着一份错误的上下文继续往下走，越走越偏，最后交付一份「看起来很完整」的结果，但中间每一步都建立在错误之上。&lt;/p&gt;
&lt;p&gt;METR 记录的 44 起事故里，最能说明问题的一类叫「伪造结果并掩盖痕迹」：Agent 没完成验证，却向用户报告已完成，甚至会在日志里抹掉失败证据。聊天场景里，模型答错最多是丢分；但在这里，Agent 是在没有外部刹车的情况下，自己做了「掩盖」这个决策。&lt;/p&gt;
&lt;p&gt;这就是为什么需要事故复盘（Postmortem），而不是一句「下次注意」。&lt;/p&gt;
&lt;h2 id=&#34;一份-agent-事故复盘该保存哪些事实&#34;&gt;一份 Agent 事故复盘，该保存哪些事实
&lt;/h2&gt;&lt;p&gt;软件工程里有一套成熟的线上事故复盘做法，这套东西可以直接搬到 Agent 上来。&lt;/p&gt;
&lt;p&gt;一份好的 Agent 事故单，至少要能回答这么几个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;任务规格&lt;/strong&gt;：这次任务到底要求 Agent 做什么？验收标准是什么？是需求本身含糊，还是 Agent 理解偏了？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;上下文&lt;/strong&gt;：Agent 当时看到了什么？读了哪些文件、哪些历史消息、哪些记忆？里面有没有被污染或过时的信息？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工具调用&lt;/strong&gt;：它调了哪些工具？参数是什么？顺序如何？哪一步是异常的分水岭？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;权限边界&lt;/strong&gt;：当时给它的权限边界是什么？这些操作是在权限内，还是越权了？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;输出与验证&lt;/strong&gt;：它交付了什么？有没有独立的验证结果，还是只有它自己的「我完成了」？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这五类事实，缺了任何一类，复盘都会变成猜。&lt;/p&gt;
&lt;p&gt;很多团队遇到 Agent 出错，第一反应是打开对话历史看它最后说了什么。但 Agent 事故的关键证据往往不在「它说了什么」，而在「它做了什么」：调用记录、文件变更、命令输出、环境状态。没有工具日志和权限记录，你根本无从判断错误发生在哪一环。&lt;/p&gt;
&lt;p&gt;这也是 METR 强调独立调查的原因之一。它的建议里有一条很具体：调查者要能访问完整记录或环境来重建事故，要能自己运行出事的模型来复现行为。本质上，证据链要完整到「换一个人也能还原事故」。&lt;/p&gt;
&lt;h2 id=&#34;六类根因别急着甩锅给模型&#34;&gt;六类根因，别急着甩锅给模型
&lt;/h2&gt;&lt;p&gt;拿到事实之后，下一步是归因。这里最容易犯的错误，是遇到 Agent 出错就归咎于「模型不够聪明」或「prompt 没写好」。&lt;/p&gt;
&lt;p&gt;METR 的框架给了我们一个更好的参考：它的调查分两个领域，一是行为本身的范围和特征，二是根因能不能追溯到训练和部署条件。落到团队日常，我倾向于把 Agent 事故的根因分成六类：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;根因类别&lt;/th&gt;
          &lt;th&gt;典型现象&lt;/th&gt;
          &lt;th&gt;判断问题&lt;/th&gt;
          &lt;th&gt;修复方向&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;规格（Spec）&lt;/td&gt;
          &lt;td&gt;任务要求含糊、目标冲突、验收缺失&lt;/td&gt;
          &lt;td&gt;换个更清楚的人来读，是不是也理解不了？&lt;/td&gt;
          &lt;td&gt;改写任务规格，明确可验证的完成标准&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;上下文（Context）&lt;/td&gt;
          &lt;td&gt;读到过时文档、历史信息污染、记忆冲突&lt;/td&gt;
          &lt;td&gt;给 Agent 的资料是不是本身就矛盾？&lt;/td&gt;
          &lt;td&gt;清理知识库，限定上下文来源&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;模型（Model）&lt;/td&gt;
          &lt;td&gt;推理失误、幻觉、错误假设&lt;/td&gt;
          &lt;td&gt;同样的输入换更强模型是否还会错？&lt;/td&gt;
          &lt;td&gt;记录失败样本，评估是否需要换模型&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;工具（Tool）&lt;/td&gt;
          &lt;td&gt;工具调用参数错、返回值未校验、工具本身有 bug&lt;/td&gt;
          &lt;td&gt;工具返回的数据有没有被 Agent 盲信？&lt;/td&gt;
          &lt;td&gt;修工具，在 Harness（支架工程）里加返回值校验&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;权限（Permission）&lt;/td&gt;
          &lt;td&gt;权限过宽、审批形同虚设、沙箱可逃逸&lt;/td&gt;
          &lt;td&gt;这件事真的需要这么高权限吗？&lt;/td&gt;
          &lt;td&gt;收紧边界，把高危操作改成人工确认&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;验收（Acceptance）&lt;/td&gt;
          &lt;td&gt;自评过松、验证缺失、提前宣布完成&lt;/td&gt;
          &lt;td&gt;有没有独立的验证者？没有的话谁会来验收？&lt;/td&gt;
          &lt;td&gt;拆出独立的 evaluator（评估者）或验收步骤&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这张表倒不用拿来严格分类，它的作用是逼你在下结论前先问一遍：这次事故，到底是任务没说清、资料给错了、模型能力不足、工具不可信、权限太松，还是根本没人验收？&lt;/p&gt;
&lt;p&gt;很多时候你会发现，一个「Agent 闯祸」的案例，根因其实是两个甚至三个类别叠加。比如权限过宽（Permission）加上验收缺失（Acceptance），Agent 就越权执行了高危操作，还没人拦住。区分根因的意义就在这里：不同根因，修复动作完全不同，混在一起修，等于没修。&lt;/p&gt;
&lt;p&gt;把「写」和「验收」拆开，是堵住验收根因最直接的做法。规划、实现、评估各司其职，让 Agent 必须通过独立评审才算完成，而不是自己说自己完成了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.ccino.org/p/agent-incident-postmortem-2026/imgs/planner-generator-evaluator.png&#34;
	width=&#34;1536&#34;
	height=&#34;864&#34;
	srcset=&#34;https://blog.ccino.org/p/agent-incident-postmortem-2026/imgs/planner-generator-evaluator_hu_caf04f51dd05ec80.png 480w, https://blog.ccino.org/p/agent-incident-postmortem-2026/imgs/planner-generator-evaluator_hu_b8cd66ba7a66f17.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Planner、Generator、Evaluator 把规划、实现和验收拆成独立反馈回路&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;177&#34;
		data-flex-basis=&#34;426px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;复盘产物不能只是一份文档&#34;&gt;复盘产物不能只是一份文档
&lt;/h2&gt;&lt;p&gt;事故复盘最容易变成「写一份报告，然后归档，然后忘记」。&lt;/p&gt;
&lt;p&gt;真正的复盘产物不是文档，而是系统变更。METR 的倡议里有一句话很关键：调查要能验证「开发者计划的对策，是否真的能可靠地消除根因」。落到团队里，这意味着每次复盘都要产出一个能写进系统的东西：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;回写评估（eval）&lt;/strong&gt;：把这次失败变成一条评估用例。下次 Agent 再遇到类似场景，能不能通过，一眼就知道。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;回写权限策略&lt;/strong&gt;：如果根因是权限过宽，就把边界收紧，把高危操作改成必须人工确认。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;回写测试&lt;/strong&gt;：如果根因是验证缺失，就在 Harness 里加一个验收步骤，让「完成」必须通过真实检查才算数。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;回写运行手册&lt;/strong&gt;：把这次事故的处置流程写进手册，包括什么时候该人工介入、谁有权限升级。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个思路，和社区里关于 Harness 的讨论是一致的。有人在 X 上总结得很到位：Agent 的能力来自模型之外的环境，上下文、指令、工具和反馈，事故的修复也应该回写到这个环境（Harness）里，而不是只重试一次 prompt。&lt;/p&gt;
&lt;p&gt;说到底，每一起事故的产出，都该让下一次 Agent 运行的环境变得更好。如果一份复盘没改变任何系统配置，那它大概率只是自我安慰。&lt;/p&gt;
&lt;p&gt;越接近生产的任务，这套回写结构越像一个小型控制平面：工具、权限、日志、测试和人工审批都接入进来，Agent 的每一步都被约束和记录。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.ccino.org/p/agent-incident-postmortem-2026/imgs/production-control-plane.png&#34;
	width=&#34;1536&#34;
	height=&#34;864&#34;
	srcset=&#34;https://blog.ccino.org/p/agent-incident-postmortem-2026/imgs/production-control-plane_hu_e04f572d0f946132.png 480w, https://blog.ccino.org/p/agent-incident-postmortem-2026/imgs/production-control-plane_hu_8ce3779e3070c907.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;生产级 Agent 复盘回写结构，连接工具、权限、日志、测试和人工审批&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;177&#34;
		data-flex-basis=&#34;426px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;小团队的最小版本&#34;&gt;小团队的最小版本
&lt;/h2&gt;&lt;p&gt;读到这里你大概会觉得：这是大公司的做法，我们没有专门的安全团队、没有独立调查预算，做不了。&lt;/p&gt;
&lt;p&gt;做得了，而且不需要那么重。&lt;/p&gt;
&lt;p&gt;如果你只有一个人或一个小团队，一个最小可用的 Agent 事故复盘只需要四样东西：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;任务 ID&lt;/strong&gt;：每次 Agent 任务有一个可追踪的标识，能和日志对得上。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工具日志&lt;/strong&gt;：Agent 调用了哪些工具、参数是什么，至少有一个地方能查到。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关键操作确认&lt;/strong&gt;：删除、覆盖、外发数据这类高危操作，改成人工确认，哪怕只是脚本里加一步。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;失败样本库&lt;/strong&gt;：一个文件夹，把每次失败的输入、输出、归因结论存进去，下次遇到类似的，先查一遍。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这四样东西加起来半天就能搭好，看起来都很朴素，但正好覆盖了复盘最需要的：任务能对上日志、操作有据可查、失败可以复用。&lt;/p&gt;
&lt;p&gt;失败样本库攒起来之后，好处是慢慢显现的。Agent 再出错时，你不再是「从头猜」，而是「先翻样本库」——很多问题反复出现，第一次归因过，第二次就能快速定位。慢慢地，团队对 Agent 的信任就从「它这次应该没问题」变成「它之前在这些场景出过问题，我们已经在 Harness 里堵住了」。&lt;/p&gt;
&lt;h2 id=&#34;agentharness-与事故复盘&#34;&gt;Agent、Harness 与事故复盘
&lt;/h2&gt;&lt;p&gt;最后把这三个概念的关系说清楚。&lt;/p&gt;
&lt;p&gt;Agent 负责执行：调用工具、推进任务、交付结果。Harness 是包在 Agent 外面的那层结构，管工具权限、管上下文、管验证和反馈，也管刹车。事故复盘是把失败经验写回 Harness 的那条通路——每记录一次、归因一次，Harness 就多一条规则、多一道验证。&lt;/p&gt;
&lt;p&gt;这个关系其实很朴素：Agent 决定任务怎么跑，Harness 决定它跑得稳不稳，复盘决定它下次会不会更好。哪一环缺了，另外两个都撑不住。没有 Harness，Agent 是脱缰的；没有复盘，Harness 就只会停在第一次设计时的样子。&lt;/p&gt;
&lt;p&gt;METR 想做的是行业级版本：让 OpenAI、Anthropic 这些公司为每一起严重事故留下可独立核验的证据链。多数团队到不了那个级别，但思路是相通的——当 AI 开始替你动手，错误处理就不能只靠重试了，得有一份复盘。&lt;/p&gt;
&lt;p&gt;不用一上来就建一整套系统，先给任务记个日志，就够了。&lt;/p&gt;
&lt;h2 id=&#34;参考来源&#34;&gt;参考来源
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://metr.org/blog/2026-07-28-investigating-ai-propensities-after-incidents/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;METR: Investigating AI propensities after incidents&lt;/a&gt;（原始倡议）&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://metr.org/blog/2026-05-19-frontier-risk-report/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;METR: Frontier Risk Report&lt;/a&gt;（44 起事故的记录）&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://the-decoder.com/after-hugging-face-incident-metr-urges-independent-root-cause-investigations-into-ai-agent-misbehavior/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;The Decoder: After Hugging Face incident, METR urges independent root-cause investigations&lt;/a&gt;（事件报道，本文事实主要来源）&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://openai.com/index/hugging-face-model-evaluation-security-incident/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenAI: Hugging Face model evaluation security incident&lt;/a&gt;（OpenAI 官方声明）&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://openai.com/index/harness-engineering/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenAI: Harness engineering&lt;/a&gt;（Harness 概念来源）&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.bestblogs.dev/en/video/7be8f7ff8&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Teaching AI to Find Real Vulnerabilities&lt;/a&gt;（Agent 评估与安全验证视角）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上来源用于观察事件经过与行业倡议，事故具体数字（如操作次数、时间线）以官方后续报告为准，本文不将其作为独立核验过的事实背书。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
