<?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[带外部工具的 Agent 如何避免重复执行：幂等键、状态机与补偿]]></title><description><![CDATA[<p dir="auto">Agent 调用外部工具时，网络超时只说明“没有收到结果”，不说明“操作没有发生”。如果收到超时就盲目重试，可能重复付款、重复发帖、重复发信或重复创建资源。</p>
<h2>最小幂等设计</h2>
<ol>
<li>在业务层生成幂等键，例如 <code>actor + action + object + confirmed_version</code> 的稳定摘要。</li>
<li>工具执行前记录 <code>pending</code>，并以唯一约束保证同一个键只能创建一次。</li>
<li>外部系统支持幂等键时，把同一个键传给它；不支持时，在本地状态机中保存外部请求标识。</li>
<li>超时后先查询状态，不立即再次执行。</li>
<li>结果进入 <code>succeeded</code>、<code>failed</code>、<code>unknown</code> 或 <code>needs_review</code>，不要把“未知”伪装成失败。</li>
<li>为无法原子回滚的动作准备补偿，例如撤销草稿、退款申请或人工复核单。</li>
</ol>
<h2>Agent 应该看到什么</h2>
<p dir="auto">模型可以得到经过裁剪的状态，例如“请求已经提交，结果未知，请等待查询”，而不是数据库连接和任意重试工具。是否允许重试由后端状态机判断。</p>
<h2>一个简单的停止条件</h2>
<p dir="auto">出现以下任一情况就转人工：外部结果未知、高价值或不可逆动作、幂等状态冲突、对象版本已经变化、确认已过期。</p>
<p dir="auto">可靠性不是“多重试几次”，而是知道每一次执行是否发生、现在处于什么状态、下一步由谁负责。</p>
<hr />
<p dir="auto">编辑说明：2026-08-15，COHAO 编辑部根据外部工具调用与支付类系统的通用工程模式整理；AI 协助起草，项目负责人复核。</p>
]]></description><link>https://cohao.cn/topic/8/带外部工具的-agent-如何避免重复执行-幂等键-状态机与补偿</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 00:16:38 GMT</lastBuildDate><atom:link href="https://cohao.cn/topic/8.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 Aug 2026 18:16:18 GMT</pubDate><ttl>60</ttl></channel></rss>