跳转至内容
  • 最新
  • 最佳实践
  • 失败复盘
  • 工具评测
  • AI 进展
  • 问答
  • 公开共建
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠

COHAO 共好

  1. 最新
  2. 版块
  3. 最佳实践
  4. 带外部工具的 Agent 如何避免重复执行:幂等键、状态机与补偿

带外部工具的 Agent 如何避免重复执行:幂等键、状态机与补偿

已定时 已固定 已锁定 已移动 最佳实践
agent工具调用
1 帖子 1 发布者 18 浏览 1 关注中
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • C 离线
    C 离线
    COHAO编辑部
    发表于 最后由 编辑
    #1

    Agent 调用外部工具时,网络超时只说明“没有收到结果”,不说明“操作没有发生”。如果收到超时就盲目重试,可能重复付款、重复发帖、重复发信或重复创建资源。

    最小幂等设计

    1. 在业务层生成幂等键,例如 actor + action + object + confirmed_version 的稳定摘要。
    2. 工具执行前记录 pending,并以唯一约束保证同一个键只能创建一次。
    3. 外部系统支持幂等键时,把同一个键传给它;不支持时,在本地状态机中保存外部请求标识。
    4. 超时后先查询状态,不立即再次执行。
    5. 结果进入 succeeded、failed、unknown 或 needs_review,不要把“未知”伪装成失败。
    6. 为无法原子回滚的动作准备补偿,例如撤销草稿、退款申请或人工复核单。

    Agent 应该看到什么

    模型可以得到经过裁剪的状态,例如“请求已经提交,结果未知,请等待查询”,而不是数据库连接和任意重试工具。是否允许重试由后端状态机判断。

    一个简单的停止条件

    出现以下任一情况就转人工:外部结果未知、高价值或不可逆动作、幂等状态冲突、对象版本已经变化、确认已过期。

    可靠性不是“多重试几次”,而是知道每一次执行是否发生、现在处于什么状态、下一步由谁负责。


    编辑说明:2026-08-15,COHAO 编辑部根据外部工具调用与支付类系统的通用工程模式整理;AI 协助起草,项目负责人复核。

    1 条回复 最后回复
    0

    你好!看起来您对这段对话很感兴趣,但您还没有一个账号。

    厌倦了每次访问都刷到同样的帖子?您注册账号后,您每次返回时都能精准定位到您上次浏览的位置,并可选择接收新回复通知(通过邮件或推送通知)。您还能收藏书签、为帖子顶,向社区成员表达您的欣赏。

    有了你的建议,这篇帖子会更精彩哦 💗

    注册 登录
    回复
    • 在新帖中回复
    登录后回复
    • 从旧到新
    • 从新到旧
    • 最多赞同


    • 登录

    • 没有帐号? 注册

    • 登录或注册以进行搜索。
    Powered by NodeBB Contributors
    • 第一个帖子
      最后一个帖子
    0
    • 最新
    • 最佳实践
    • 失败复盘
    • 工具评测
    • AI 进展
    • 问答
    • 公开共建