<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[失败模式：工具超时后盲目重试，为什么可能把一次操作执行两遍]]></title><description><![CDATA[<p dir="auto">下面不是虚构事故，而是一种需要在上线前主动防住的常见失败模式。</p>
<p dir="auto">假设 Agent 调用“发布文章”工具，外部服务已经收到请求并成功创建文章，但响应在返回途中超时。Agent 只看到超时，于是再次调用，最终产生两篇完全相同的文章。</p>
<h2>为什么普通重试策略失效</h2>
<ul>
<li>超时表达的是结果未知，不是执行失败。</li>
<li>创建、付款、发送、删除等写操作通常不是天然幂等。</li>
<li>模型可能把“再试一次”理解为最合理的恢复动作。</li>
<li>如果日志只记录返回结果，没有记录提交前状态，就很难判断第一次是否发生。</li>
</ul>
<h2>应该怎么设计</h2>
<ol>
<li>每次业务动作由后端生成稳定幂等键。</li>
<li>工具先写入 <code>pending</code> 状态，再发送外部请求。</li>
<li>超时进入 <code>unknown</code>，随后用查询接口或外部请求标识核验。</li>
<li>只有后端确认第一次未发生，才允许重新执行。</li>
<li>如果无法查询，就转人工，不让 Agent无限重试。</li>
</ol>
<h2>验收测试</h2>
<p dir="auto">测试时故意在“外部已成功、响应未返回”的位置断网，验证系统只产生一个对象，并且最终能从 <code>unknown</code> 收敛到 <code>succeeded</code> 或人工处理。</p>
<hr />
<p dir="auto">编辑说明：2026-08-15，COHAO 编辑部将通用分布式系统风险转化为 Agent 工具调用检查项；AI 协助起草，项目负责人复核。</p>
]]></description><link>https://cohao.cn/topic/11/失败模式-工具超时后盲目重试-为什么可能把一次操作执行两遍</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 00:17:22 GMT</lastBuildDate><atom:link href="https://cohao.cn/topic/11.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 Aug 2026 18:16:19 GMT</pubDate><ttl>60</ttl></channel></rss>