エージェントシステムとガードレール

ガードレール(Guardrails)は、マルチエージェントシステムの堅牢性と信頼性を確保するための保護レイヤーである。検証チェックを行うことで、不適切、安全でない、あるいはビジネス要件に反する入出力を遮断し、ユーザー体験の一貫性を維持する。

1. 入力ガードレール (Input Guardrails)

エージェントがユーザー入力を処理する前に機能する第一の防衛線。

  • 役割: 飛行場の搭乗ゲートにおける係員のように、許可された(関連性のある)プロンプトのみをシステムに通す。
  • 利点:
    • コスト削減: 無関係なクエリを遮断することで、不要なLLMの呼び出しを減らし、トークンコストを節約する。
    • 安全性の向上: 悪意のある入力や、システムの目的外のプロンプトがエージェントに到達するのを防ぐ。
  • 実装のアプローチ:
    • ハードコード: 「苦情」や「解約」といった特定のキーワードを検知する単純なロジック。
    • エージェントベース: メインエージェントよりも軽量で安価なガードレール専用エージェントを配置し、入力の意図やポリシー適合性を高度に判別する。

2. 出力ガードレール (Output Guardrails)

エージェントが生成した回答がユーザーに届く直前に適用される最終的なセーフティネットである。

  • 役割: 回答が組織のポリシーに従っているか、機密情報が含まれていないか、あるいは正しいフォーマット(スキーマ)に従っているかを検証する。
  • 主なチェック項目:
    • ハルシネーションの検知: 生成された内容が無意味なものや、意図しない歌詞・詩などになっていないかの確認。
    • 個人情報の削除: 住所や電話番号などの機密情報のフィルタリング。
    • ビジネス要件の遵守: 特定の注文ステータス文言が含まれているか等の確認。

3. 実装のメカニズムと共通パターン

入力・出力ガードレールともに、SDKにおいて共通の実装パターンを持つ。

  • 実装のフロー:
    1. ガードレール関数の定義: @input_guardrail または @output_guardrail デコレータを使用して定義する。
    2. 戻り値: GuardrailFunctionOutput オブジェクトを返す。この中の tripwire_triggered フラグが True の場合、ガードレールが作動(トリップ)したと見なされる。
    3. 例外処理: ガードレールが作動すると、SDKは InputGuardrailTripwireTriggered または OutputGuardrailTripwireTriggered という特定の例外を発生させる。開発者はこれを try-except ブロックでキャッチし、適切なフォールバックメッセージ(例:「カスタマーサービスにお繋ぎします」)をユーザーに表示する。
  • 非同期処理 (async): ガードレール関数は async として定義されることが一般的である。これは、検証プロセスの中で別のエージェントを非同期的に呼び出す(Runner.run)必要があるためである。

4. まとめ

ガードレールを導入することで、メインエージェントはコアタスクに集中でき、エッジケースの処理やポリシー施行といったロジックを分離できる。これにより、複雑なシステムにおいても予測可能性と安全性が高まり、商用利用に耐えうる品質を維持できる。