<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>故障注入 on CAO ZUOHUA</title><link>https://caozuohua.github.io/tags/%E6%95%85%E9%9A%9C%E6%B3%A8%E5%85%A5/</link><description>Recent content in 故障注入 on CAO ZUOHUA</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 18 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://caozuohua.github.io/tags/%E6%95%85%E9%9A%9C%E6%B3%A8%E5%85%A5/index.xml" rel="self" type="application/rss+xml"/><item><title>不注入故障，就测不出 Agent 框架的生产能力</title><link>https://caozuohua.github.io/posts/2026-09-18-agent-framework-evaluation-3-failure-evidence/</link><pubDate>Fri, 18 Sep 2026 00:00:00 +0000</pubDate><guid>https://caozuohua.github.io/posts/2026-09-18-agent-framework-evaluation-3-failure-evidence/</guid><description>&lt;p&gt;这是 &lt;a href="https://caozuohua.github.io/posts/2026-09-18-agent-framework-evaluation-series/"&gt;Agent 框架评测实验室系列&lt;/a&gt;第三篇。&lt;/p&gt;&#10;&lt;p&gt;一个 Agent 在 demo 中完成任务，最能说明的是：这次模型、网络和工具刚好都没有出大问题。企业系统真正区分框架能力的地方，往往发生在错误之后。&lt;/p&gt;&#10;&lt;h2 id="七类最低故障矩阵"&gt;七类最低故障矩阵&lt;/h2&gt;&#10;&lt;p&gt;生产变更 Alpha 固定测试七类场景：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;场景&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;要证明什么&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;审批通过&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;精确意图获批后才可继续&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;审批拒绝&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;拒绝不能通过新 ID 或重试绕过&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;取消&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;正在执行的 attempt 中断，预算结算&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;工具失败&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;错误可见，重试有界，不伪装成功&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;worker 崩溃&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;lease 和 reservation 可回收&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;进程重启&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;从已提交 checkpoint 恢复，不重跑完成阶段&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;重复副作用&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;同一外部操作最多生效一次&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;这些测试不能只检查“最后还是成功了”。还要检查事件顺序、预算余额、checkpoint 哈希、工具调用次数和幂等收据。&lt;/p&gt;&#10;&lt;h2 id="审批不是一个布尔值"&gt;审批不是一个布尔值&lt;/h2&gt;&#10;&lt;p&gt;如果审批只保存 &lt;code&gt;approved=true&lt;/code&gt;，就无法确认批准的是哪次操作。安全审批至少绑定：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ApprovalDecision&lt;/span&gt;(BaseModel):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; approval_id: UUID&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; job_id: UUID&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; attempt_id: UUID&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; operation_id: UUID&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; action: str&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; arguments_sha256: str&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; decision: Literal[&lt;span style="color:#e6db74"&gt;&amp;#34;approved&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;rejected&amp;#34;&lt;/span&gt;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; approver_id: str&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; revision: int&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;恢复时重新计算参数摘要。job、operation、action、参数或 revision 任一不一致，都不能复用原批准。测试不仅要覆盖正确批准，还要专门提交“看起来很像”的错误批准。&lt;/p&gt;</description></item></channel></rss>