AIエージェントに求められるのは、より高い知能ではない。冪等性(べきとうせい)である。
実用化されているAIエージェントの多くは、推論の誤りによって失敗するのではない。ネットワークエラーによって失敗するのだ。
モデルは正しいツールを選択し、正しい詳細情報を入力する。しかし、その結果、顧客に二重に課金してしまう。
これは、書き込み権限を持つエージェントが、信頼性の低いネットワーク上で動作しているために起こる。
- リクエストのタイムアウト。
- 接続の切断。
- フレームワークが、すでに完了したステップを再試行する。
読み取り専用のエージェントであれば、再試行のコストはゼロだ。しかし、書き込み可能なエージェントにとって、再試行は「取り返しのつかない2度目のアクション」を意味する。
解決策は、冪等性(idempotency)である。
よくある失敗例を見てみよう:
- エージェントが請求書を送るための関数を呼び出す。
- サービスが請求書を作成する。
- レスポンスがエージェントに届く前に、接続が切れる。
- エージェントはタイムアウトを検知し、再試行する。
- その結果、請求書が2枚発行されてしまう。
より賢いモデルにしたところで、これは解決しない。むしろ、再試行をより積極的に行うことで、かえって状況を悪化させる可能性さえある。
Stripeのような決済システムから学ぶことができる。彼らは「Idempotency-Key」を使用している。サーバーは最初のリクエストの結果を保存する。クライアントが同じキーを再度送信した場合、サーバーはアクションを2回実行する代わりに、保存された結果を返す。
AIエージェントの場合、このキーは「意図(intent)」から導き出さなければならない。
ランダムなIDを使用してはいけない。ツールの名前と、その安定したパラメータのハッシュ値を使用するのだ。
例:
- ツール: charge_customer
- パラメータ: {customer_id: 42, amount: 500}
- キー: hash(tool + params)
エージェントが全く同じ課金を再試行した場合、キーは同じままとなる。システムはそれを認識し、二重課金を防止する。
注意点として、キーの有効性は「単一のアクション」をどう定義するかによって決まる。
- ハッシュにタイムスタンプを含めると、再試行のたびに新しいキーが生成されてしまう。これでは保護機能が機能しない。
- LLMが作成したメッセージ本文を含めると、モデルがたった一言を変えただけで新しいキーが生成され、アクションが重複してしまう。
常に、顧客IDや請求書IDのような安定したデータに基づいてキーを作成すること。モデルが変更する可能性のあるものは除外せよ。
プロンプトを改善することでエージェントの信頼性を高めようとするのは、もうやめよう。
信頼性とは、繰り返された決定のコストをゼロにすることである。エージェントが同じアクションを2回実行したとしても、何も壊れてはならない。
Optional learning community: https://t.me/GyaanSetuAi
