プロジェクト概要
この集大成レッスンでは、認証されたユーザーに代わって4つの実世界タスクを実行する完全なAIエージェントを構築します:認証による身元確認、データベースへのレコード読み書き、外部API呼び出しによるデータの取得や送信、そしてユーザーが閲覧可能な範囲を制限するロールベースアクセス制御(RBAC)の実施です。これは、本コースのこれまでのすべての概念がつながる統合ポイントです。
構築するエージェントはリクエスト・レスポンスパターンに従います:ユーザーがリクエストを送信し、エージェントはユーザーの身元を確認し、ユーザーに許可されている操作を決定し、データベース照会、API呼び出し、またはその両方を行い、結果を返します。エージェントロジックにはPython、永続化にはSQLデータベース、外部データにはモック外部API、認証にはシンプルなJWT(JSON Web Token)メカニズムを使用します。
アーキテクチャとセットアップ
コードを書く前に、4つの構成要素とそれらの接続方法を概説します。ユーザーがJWTトークン付きでリクエストを送信します。エージェントはトークンを検証してユーザーIDとロールを抽出し、ユーザーの意図に応じてデータベースハンドラまたはAPI呼び出し部にルーティングします。データベースハンドラはインジェクション攻撃を防ぐためパラメータ化されたSQLクエリを使用します。API呼び出し部は同じJWTを外部リクエストに添付するため、外部サービスが呼び出し元を独立して検証できます。
このUserContextオブジェクトはすべての内部呼び出しと共に流れます。リクエストがエージェントに入るとコンテキストがスタンプされ、すべての下流関数が同じコンテキストを受け取るため、認可チェックはエントリーポイントだけでなくすべてのステップで実行されます。
認証の実装
認証とは、ユーザーの身元を証明することです。シンプルなJWTスタイルのトークンを使用します:ユーザーID、ロール、有効期限タイムスタンプを含むbase64エンコード文字列で、共有秘密鍵で署名されています。本番環境ではPyJWTのようなライブラリを使用しますが、ここでは仕組みを理解できるよう最小限に留めています。
verify_token関数はゲートキーパーです。すべての保護されたエンドポイントが最初にこれを呼び出します。tokenが改ざんされている、期限切れ、または欠落している場合、データベースやAPIコードが実行される前リクエストは拒否されます。
データベースの安全な照会
認証が完了したので、次のステップはエージェントにユーザーレコードを読み取らせることです。ここでの重要なルールは、SQLを文字列連結で組み立てないことです。常にパラメータ化されたクエリを使用し、ユーザー入力を実行可能なSQLではなくデータとして扱います。
ユーザーIDが文字列に補間されるのではなくタプルパラメータとして渡されていることに注目してください。このたった一つの習慣が、SQLインジェクション(最も一般的なデータベース攻撃)を防ぎます。
外部APIの呼び出し
多くのエージェントタスクは、宅配便の配送状況や配送ルートの天候など、データベースにないデータを必要とします。エージェントは外部HTTP APIを呼び出し、外部サービスが呼び出し元を検証できるよう同じJWTを渡します。
トークンは新規生成されず転送されます。これにより、宅配便サービスは誰が要求したかをログに記録し、ユーザーごとに独自のレート制限を適用できます。
ロールベースアクセス制御の実施
認証はユーザーの身元を伝えます。認可(RBAC)はユーザーに許可されている操作を伝えます。これを実施する最もクリーンな場所は、すべてのエントリーポイントで呼び出される小さなポリシー関数です。
一般ユーザーがlist_all_ordersを呼び出すと拒否されます。管理者が呼び出すとテーブル全体を取得できます。ポリシーチェックは1行ですが、これがセキュアなシステムとデータ侵害の差を生みます。
すべてを統合する
メインエージェント関数は、認証、データベースアクセス、API呼び出し、RBACを1つのフローに統合します。
すべてのパスはverify_tokenから始まります。機密データに触れるすべてのパスはrequire_roleを呼び出します。すべてのデータベースクエリはパラメータ化されています。すべての外部API呼び出しはユーザーのトークンを伝送します。あらゆる場所で繰り返されるこれら4つの習慣が、エージェントを本番環境に対応させるものなのです。
まとめ
これで動作するエンドツーエンドのエージェントが完成しました。認証が署名付きトークンで身元を証明します。パラメータ化されたSQLクエリがインジェクションリスクなくデータを読み書きします。外部API呼び出しが同じトークンを再利用するため、外部サービスはユーザーごとに監査とレート制限を行えます。ロールベースアクセス制御が正面玄関だけでなくすべてのエントリーポイントに配置されるため、権限昇格には複数のチェックを突破する必要があります。実際のエージェントを構築する際も、パターンは同じです:1回認証し、あらゆる場所で認可し、常にパラメータ化し、すべての呼び出しでコンテキストを伝播させることです。
レッスンのチェックポイント
学んだ内容を復習し、回答へのフィードバックを受けましょう。