AIエージェントのためのPRGパターン

AIエージェントは、25年前の過ちを繰り返しています。

90年代、ウェブフォームには重大なバグがありました。ユーザーが注文を行い、ページを更新すると、ブラウザが再び注文を送信してしまうのです。これにより、二重課金が発生し、顧客の怒りを買うことになりました。

その解決策が、Post/Redirect/Get (PRG) パターンでした。仕組みは以下の通りです。

  • ユーザーがデータを送信するためにPOSTリクエストを送信する。
  • サーバーがデータを処理する。
  • サーバーが新しいURLへリダイレクトを送信する。
  • ブラウザが結果を表示するためにGETリクエストを実行する。

ユーザーが更新ボタンを押しても、GETリクエストが再送されるだけです。危険なPOSTリクエストは消えています。

AIエージェントが、このバグを復活させてしまいました。

エージェントがカード決済やレコード作成のためのツールを呼び出した際、ネットワークが切断されることがあります。エージェントはアクションが成功したかどうか判断できず、再試行します。その結果、顧客には二重の請求が発生してしまいます。

これは「べき等性キー(idempotency key)」を使用することで解決できます。べき等性キーはリダイレクトのように機能します。「アクションを実行すること」と「結果を表示すること」を分離するのです。

エージェントにおけるパターンは、以下のようになるべきです。

  • エージェントは最初の試行の前に一意のキーを生成する。
  • ユーザーIDやカートIDのような、安定した値を使用する。
  • すべてのツール呼び出しにこのキーを添えて送信する。
  • サーバーはキーを確認する。同じキーを再度受け取った場合は、アクションを二度実行するのではなく、前回の結果を返す。

長時間のタスクには、キーだけでは不十分です。「チェックポインティング(checkpointing)」が必要です。各ステップで状態を保存しなければなりません。これにより、再起動時に中断した箇所から再開できるようになります。

データを変更するあらゆるエージェントツールにおいて、以下のルールに従ってください。

  • すべての更新(mutating)ツールは、べき等性キーを受け入れなければならない。
  • キーはタイムスタンプからではなく、ユーザーの意図から導き出す。
  • 最初の試行の前にキーを生成する。
  • 再試行の際は常に同じキーを再利用する。
  • 長時間のタスクについては、すべての途中経過をチェックポイントとして保存する。

レイヤーは変わっても、ロジックは変わりません。

Source: https://dev.to/ravikiran438/the-prg-pattern-for-ai-agents-a-25-year-old-fix-coming-of-age-in-a-new-era-23fh

Optional learning community: https://t.me/GyaanSetuAi