Agent 重试不能重复下单:业务写入的幂等设计怎么做

解释 Agent 写入幂等:稳定业务意图标识、相同标识不同内容、并发请求、结果未知和过期窗口,附订单创建状态示例。

同一意图的重复请求处理:确定业务意图(生成稳定请求标识、绑定对象与范围);检查已有记录(相同标识与内容、处理并发冲突);一致完成写入(业务结果与记录、避免半完成状态);查询或重试(沿用原标识、返回原结果含义)
原创示意:重复的是网络尝试,不应重复业务动作。为本文原创示意图,不代表产品界面或客户案例。

先说结论

同一业务意图的重试应复用稳定请求标识,服务端将标识、内容校验、业务写入和结果记录保持一致。相同标识而内容不同应拒绝;响应丢失时按原标识查询或安全重试。仅在客户端去重、按参数哈希推断意图,或承诺网络只发送一次都不够。

读完你会得到

  • 一次业务意图与多次网络尝试分别编号。
  • 相同参数可以代表两次真实购买,不能只靠参数相同去重。
  • 服务端需处理并发、结果记录和标识过期后的策略。

创建订单已经成功,网络却丢了响应。Agent 再次调用工具,如果每次都生成新请求标识,就可能创建两单。本文用教学订单解释幂等性解决哪一部分问题,以及为什么它不能被写成万能的“恰好一次”。

配套资料与延伸阅读

先区分业务意图和调用尝试

用户想购买两件相同商品,可以形成两笔内容相同但意图不同的订单。网络丢包后重试同一笔订单,则是同一意图的不同尝试。把参数哈希直接当去重标识,可能把第二次真实购买误删。

AWS 的幂等 API 文章说明由调用方提供唯一请求标识,并讨论相同标识、不同意图和迟到请求。本文沿用这一原则,具体订单流程为本站演练。

稳定标识在意图被确认后生成,后续查询和重试沿用。任务重新计划、改变商品或用户另下新单,是否构成新意图必须由业务规则明确,不能让模型随意更新标识。

稳定 intent_id 应在首次写请求之前持久化,并与已确认任务及内容绑定。进程重启、检查点恢复或回调重放时读取原标识,不重新生成。否则服务端即使正确处理相同标识,客户端恢复后换了标识仍会重复下单。记录持久化失败时停止发送,先修复任务状态。

本节依据: [1] Amazon Web Services

服务端记录哪些内容

幂等记录的教学字段
字段目的
principal / tenant把标识限定在正确用户或业务范围
intent_id识别同一业务意图
payload_fingerprint检查相同意图是否被换成不同内容
status区分处理中、完成、失败与结果待确认
business_object_id关联真正创建的订单或工单
response_summary让重试得到含义一致的业务结果
created_at / retention定义记录保留与迟到请求策略

字段名和状态为示例。标识不是密码,知道它不代表有权查询订单。每次请求仍检查身份与对象范围;记录和查询入口不能泄露其他用户的结果。

幂等记录与业务写入要保持一致

如果先创建订单再登记标识,中间崩溃就可能在重试时再创建一次;如果先登记完成却没写入订单,调用方会被错误地告知成功。对于可放入同一数据库的变更,可用事务与唯一约束处理一致性。

调用外部支付、邮件或第三方服务时,单个本地事务不能覆盖整个网络链路。利用对方提供的幂等能力和结果查询,记录中间状态,再通过对账或明确补偿处理不一致。不要暗示本地加一张表就能保证所有外部动作只发生一次。

并发重复请求也要测试。两个请求同时查到“未处理”,再各自执行,会绕过普通的先查后写。服务端需要可靠的原子占用或唯一性机制,并定义处理中请求的返回方式。

结果未知时怎样恢复

响应丢失后的处理顺序

  1. 保留原始意图与内容

    不要生成新标识,也不把超时当作业务失败。

  2. 查询当前业务状态

    按稳定标识查看是否受理或完成,核对权威对象。

  3. 按合同重试

    只有明确具备幂等能力且仍在允许窗口内才安全重试。

  4. 处理内容变化

    用户修改商品、金额或目标时,按新意图或重新确认流程处理。

  5. 结果仍不确定

    保留待确认状态,交给对账或人工处理,不继续创建新动作。

幂等性保护重复副作用,不保证服务永远成功。超时、权限变化和下游故障仍需要预算与恢复流程。

相同标识不同内容为何必须拒绝

第一次提交商品 A,重试却提交商品 B,如果服务直接返回原订单,用户会误以为买到 B;如果按新内容执行,就破坏了去重合同。应返回内容冲突,并说明需要重新确认当前意图。

内容指纹可以用于检测这种变化,但它不是生成意图标识的唯一依据。计算时明确哪些字段参与,例如对象、金额、币种与目标;忽略真正影响动作的字段会留下漏洞。

草稿修改、审批过期或权限撤销时,继续执行前重新校验。旧标识不能证明当前授权仍有效,已完成请求的结果查询与尚未执行的新动作应按各自规则处理。

迟到请求和记录过期怎样约定

服务的幂等记录通常有保留范围。若记录已经过期,一个很晚的重试可能被当作新请求。项目应说明允许的重试窗口、记录保留和窗口外的结果查询或人工确认方式。

不要把所有请求无限保留,也不要为了省存储任意删除。期限由业务任务周期、对账和平台能力决定。任务端保存足够标识,超过窗口后停止自动重试,不猜测原动作没有发生。

测试覆盖响应丢失、并发重复、不同内容、暂停恢复和迟到请求。最后检查真实对象数量与状态,而不是只检查工具返回码。

从一条高影响写接口开始落地

优先检查创建订单、退款、发送消息或工单等重复代价明确的动作,确认服务是否有幂等标识和查询能力。没有这两项时,缩小自动执行范围,先生成草稿或安排受控接管。

这套方法适合带副作用的 Agent 与工作流。它描述的是约定边界内重复请求的处理,不承诺分布式系统全局“恰好一次”。外部平台的具体幂等合同必须单独核实。

常见问题

让 Agent 记住“不要重复调用”够不够?

不够。网络、进程恢复和用户重复提交都可能造成多次调用。需要稳定意图标识与服务端一致性机制,提示词只能辅助理解。

同一个请求标识返回“对象已存在”可以吗?

应清楚表明是不是该意图创建的对象,以及其当前状态。模糊的已存在错误会让调用方无法区分重试成功与其他过程创建的记录。

资料来源与核对说明

文章中的行业定义与技术方法尽量引用官方或标准组织资料;表格、清单和决策框架是基于这些资料形成的编辑性整理,不代表来源机构对本站服务的背书。

  1. Making retries safe with idempotent APIsAmazon Web Services

    用于调用方请求标识、相同标识不同意图、幂等记录与业务变更的一致性;订单例子为本文演练。

把文章方法用于你的真实业务

带上流程、样例和目标,添加企业微信沟通。先确定项目范围与验收方式,再安排实施。

查看企业 AI / FDE 服务 →
相机、麦克风和布光台上的雕塑,表现图片、视频与声音的创作
AI 生成 · 内容创作场景示意

把你正在做的事,
拿来一起聊聊。

还没有完整方案也没关系。选一个方向,带着下面几条信息联系团队,我们先了解问题,再确认下一步。

企业 AI / FDE 项目

先从一段具体流程说起。

  • 我们目前怎样完成这项工作?
  • 哪一步最费时间,或经常出错?
  • 已有的资料、系统和期望结果是什么?
Shopify 建站与经营

有店铺的话,可以一并发来链接。

  • 店铺是准备上线,还是已经在运营?
  • 销售什么商品,面向哪些市场?
  • 希望先解决哪个页面或经营问题?
内容创作与工具使用

说明准备制作的内容,或遇到的操作问题。

  • 想做图片、视频、配音,还是图文?
  • 已有素材、参考风格和使用场景是什么?
  • 如果使用时遇到问题,具体停在哪一步?
扫码添加随心创技术客服企业微信

微信扫码,发来你的问题

可以直接按提纲描述,也可以先发一句话。人工服务会在确认范围后单独报价。

手机上可保存二维码后识别。