レスポンスの消失により、AIエージェントが二重課金を行ってしまう問題

AIエージェントがカード決済のためのツールを呼び出した際、ネットワークの問題でレスポンスが消失した場合、エージェントは不適切な挙動を示します。エージェント自身が気づかないうちに、顧客に二重課金を行ってしまうのです。

お金はすでに移動しています。しかし、エージェントには「ok」という返答が届きませんでした。すると、エージェントはあらゆるリトライループがそうであるように、再試行を行います。同じプロンプトと同じ引数を使用して再度実行するため、これが二重課金を引き起こします。

リトライは単なるネットワークイベントではありません。それは、すでに発生しているかもしれない「副作用」に関する意思決定なのです。

バックオフ(backoff)やジッター(jitter)のような標準的なリトライツールは、リトライの頻度を適切に調整するだけで、二重課金を防ぐことはできません。

必要なのは「べき等性台帳(idempotency ledger)」です。これは一意のキーを使用することで、あるアクションが最大で一度しか実行されないことを保証します。

ツール呼び出しが失敗するパターンは2つあります:

エージェントにとって、これら2つは区別がつきません。どちらもタイムアウトや接続断のように見えます。

決済、メール送信、返金などの副作用を伴うツールの場合、単純なリトライに頼ることはできません。必ず「べき等性キー(idempotency key)」を使用する必要があります。

解決策:

「少なくとも1回(at-least-once)」と「正確に1回(exactly-once)」を混同しないでください。分散システムにおいて「正確に1回」を実現するには、「最大1回の配信(at-most-once delivery)」、「少なくとも1回のリトライ(at-least-once retries)」、そして「重複排除台帳(deduplication ledger)」を組み合わせる必要があります。

書き込み(write)を読み取り(read)と同じように扱わないでください。読み取りのリトライは無料ですが、書き込みのリトライはコスト(金銭的損失)がかかります。

出典: https://dev.to/0012303/your-ai-agent-will-double-charge-on-a-lost-response-5eed

学習コミュニティ(任意): https://t.me/GyaanSetuAi