你的 AI Agent 不需要更聪明,它需要具备幂等性
大多数生产环境中的 AI agent 失败并不是因为推理能力差,而是因为网络错误。
模型选择了正确的工具,填写了正确的细节。然后,它给客户扣了两次款。
这种情况之所以发生,是因为具备写操作能力的 agent 运行在不可靠的网络环境中。
- 请求超时。
- 连接中断。
- 框架重试已经完成的步骤。
对于只读型 agent,重试是无代价的。但对于具备写操作能力的 agent,重试意味着第二次不可逆的操作。
解决方案就是幂等性 (idempotency)。
看看这个常见的失败场景:
- Agent 调用一个函数来发送发票。
- 服务端创建了发票。
- 在响应到达 agent 之前,连接中断了。
- Agent 检测到超时并进行重试。
- 现在,你有了两张发票。
更聪明的模型无法解决这个问题。甚至,一个更聪明的模型可能会因为更激进的重试机制而让情况变得更糟。
你可以向 Stripe 等支付系统学习。它们使用 Idempotency-Key。服务端会保存第一次请求的结果。如果客户端再次发送相同的 key,服务端会返回存储的结果,而不是再次执行该操作。
对于 AI agent,你必须从意图 (intent) 中推导出这个 key。
不要使用随机 ID。请使用工具名称及其稳定参数的哈希值 (hash)。
示例:
- Tool:
charge_customer - Params:
{customer_id: 42, amount: 500} - Key:
hash(tool + params)
如果 agent 重试完全相同的扣款操作,key 将保持不变。系统会识别出这一点并防止重复扣款。
需要注意一点:你的 key 的有效性取决于你对“单次操作”的定义。
- 如果你在哈希中包含了时间戳,那么每次重试都会得到一个新的 key。你的保护机制就会失效。
- 如果你在哈希中包含了由 LLM 生成的消息体,模型可能会改变其中一个词。这会产生一个新的 key 并导致重复操作。
始终基于稳定数据(如客户 ID 或发票 ID)来生成 key。排除任何模型可能会更改的内容。
不要再试图通过优化提示词 (prompts) 来提高 agent 的可靠性了。
可靠性在于让重复决策的成本降为零。如果你的 agent 执行了两次相同的操作,不应该发生任何错误。
Optional learning community: https://t.me/GyaanSetuAi
