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

AIエージェントは、ある古い問題に直面しています。それは、90年代にウェブフォームを壊したのと同じバグです。

昔のウェブでは、ユーザーがフォームを送信しました。もしユーザーがページをリフレッシュすると、ブラウザはデータを再送信してしまいました。これは、注文が2回、課金が2回、あるいはメールが2通送られることを意味していました。

その解決策が、Post/Redirect/Get (PRG) パターンでした。

ロジックは単純です:

  • ユーザーがPOSTリクエストを送信する。
  • サーバーが処理を実行する。
  • サーバーが新しいURLへ302リダイレクトを送信する。
  • ブラウザがGETリクエストでそのリダイレクトに従う。

これにより、リフレッシュしても結果ページが再読み込みされるだけで、アクションが繰り返されることはなくなりました。

AIエージェントはこのバグを、新しいレイヤーへと持ち込んでしまいました。

エージェントがカード決済やレコード作成のためにツールを呼び出す際、問題が発生します。ネットワークの切断、コンテナの再起動、レート制限の発動などです。エージェントは、直前の呼び出しが成功したかどうかを知りません。そのため、リトライ(再試行)を行います。

対策を講じなければ、エージェントは重複した注文を作成し、顧客を怒らせることになります。

べき等性キー(idempotency keys)を使用して、エージェントのパイプラインにPRGパターンを適用しなければなりません。

べき等性キーは、あなたの「リダイレクト」にあたります。それはアクションと結果を分離します。

実装方法:

  • すべての状態を変更するツール(mutating tool)は、べき等性キーを受け入れなければならない。
  • 最初の試行の前にキーを生成する。
  • キーはタイムスタンプではなく、ユーザーの意図(intent)から派生させる。
  • サーバーは、そのキーを以前に受け取ったかどうかを確認しなければならない。
  • キーが既に存在する場合、タスクを再度実行するのではなく、保存されている結果を返す。

長時間のタスクには、単なるキー以上のものが必要です。チェックポインティング(checkpointing)が必要です。

チェックポインティングは、各ステップの状態を保存します。エージェントが20分かかるタスクの途中でクラッシュしても、中断したところから再開できます。最初からやり直す必要はありません。

もし、たった一つのことしかできないのであれば、すべてのツール呼び出しを「2回実行しても安全」なものにしてください。

以下の5つのチェック項目を備えたエージェントを構築してください:

  • すべてのツールはべき等性キーを受け入れるか?
  • キーは時間ではなく、意図に基づいているか?
  • リトライのたびに同じキーが再利用されているか?
  • 重複したキーに対して、サーバーは保存済みの結果を返しているか?
  • 長時間のタスクにおいて、中間ステップが保存されているか?

パターンは同じです。変わったのはレイヤーだけです。

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