智能体幂等设计应绑定稳定业务意图
文章分析以新生成 UUID 或提示词哈希作为幂等依据时的失效风险,主张用稳定业务意图识别重复操作。讨论范围覆盖工具调用、状态修改和跨轮次续执行。
完整中文译文
AI Agent 重试时,怎样避免同一请求重复调用工具、修改业务状态?dev.to 上这篇文章提出:去重依据应该绑定稳定的业务意图,不能只靠每次新生成的 UUID 或提示词哈希。现有节选覆盖了设计思路和示例代码,但其中几处实现仍有明显缺口。
目前能确认什么
幂等性(Idempotency)关注的是:同一操作重复执行,不应产生额外的业务效果。在智能体中,这个约束还要覆盖工具调用、状态修改和跨轮次续执行。
作者指出,每次重试都换一个 UUID,系统就难以识别重复请求;直接对提示词做哈希,也可能因措辞、时间戳或会话状态变化而漏掉重复操作。他们主张先提取核心动作和稳定参数,再记录执行结果,供重试复用。
问题不在哈希算法,而在被哈希的内容能否稳定标识同一次业务操作。
不过,节选代码只做了小写转换和空白整理,尚未实现文中所说的语义归一化。相同意思的不同表达,仍可能得到不同结果。
我的判断
对程序员最有用的检查项,是确认请求标识是否在重试和续执行之间保持一致。UUID 可以承担这个角色,前提是为一次操作生成后持续复用。
还要区分「重试上一次」与「再次执行一次」。用户连续发出内容相同的指令,也可能确实需要两次操作,仅凭动作和参数去重容易误拦。
节选中的缓存检查代码,还不能保证并发请求不会重复执行。
两个请求可能同时读到缓存为空;外部操作成功后、结果写入前崩溃,也会留下重复执行窗口。真正落地需要明确并发占用、失败恢复,以及外部工具是否支持幂等键。
另一个疑点是文中把 Schema ID 当作幂等键:结构定义通常会被多个请求共用,不能直接识别某一次操作。这里究竟指结构标识还是意图实例标识,现有节选没有说清。