← [ BACK_TO_NOTES ]

Tool Idempotency

Tool Idempotency 是确保工具执行多次和执行一次效果相同的特性。它防止重试导致的重复操作(如重复扣款、重复发送)。

#concept #evergreen #ai

[!info] related notes

Tool Idempotency

一句话定义

Tool Idempotency 是确保工具执行多次和执行一次效果相同的特性。网络超时重试时,如果工具不幂等,可能重复扣款、重复发送邮件。

核心原理

天然幂等 vs 需要设计

工具天然幂等说明
无副作用查询通常重试不改变业务状态,但数据变化会使返回值不同
写入 (INSERT)❌重复写入会创建多条
更新 (UPDATE)取决于操作SET x=1 与 x=x+1 不同,还需考虑触发器和外部副作用
删除 (DELETE)取决于目标身份重复删除同一稳定资源通常不增加效果;返回码可不同,目标复用与触发器另论
发送邮件❌重复发送
扣款❌重复扣款

幂等实现边界

通用持久协议见 幂等性。工具适配层负责把稳定 operation_id 传到数据库或外部提供方,并把成功、失败与未知结果区分开。

原来的内存字典示例无法提供该保证:先查再执行存在并发窗口;进程重启丢记录;执行后写缓存前崩溃仍会重复。仅对 tool.idempotent 缓存,也不会让本来非幂等的支付/发信工具获得保护。

不能仅以 tool_name + args + user_id 的散列当操作身份:同一用户两次有意购买相同商品会被错误合并。参数摘要用于检查同 key 是否绑定同一内容,不替代业务操作 ID。幂等性关注副作用,不保证每次响应相同;缓存更不能替代实时权限检查。

常见坑

  1. 不做幂等: 重试导致重复操作
  2. 幂等 key 不稳定: 相同操作生成了不同的 key
  3. 缓存不清理: 幂等缓存无限增长

参考资料

创建于 2026/6/30 更新于 2026/10/7
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本