コンテンツに移動
AI & 機械学習

生成 AI アプリがアクセスするデータベースにユーザー認証を実装する

2024年8月7日
Wenxin Du

Software Engineer, Google

Jessica Chan

Engineering Manager, Google

※この投稿は米国時間 2024 年 7 月 20 日に、Google Cloud blog に投稿されたものの抄訳です。

生成 AI エージェントは、企業のワークスペースを変革する大きな可能性を秘めています。ほぼすべての業種の企業が生成 AI の可能性を模索しており、企業内の生産性向上からカスタマー サポートまで、さまざまな目的でAI エージェントを導入しています。これらの AI エージェントは、既存のデータベースのデータを活用して、要約の提供、複雑な質問への回答、示唆に富むコンテンツの生成などを行うことができますが、このテクノロジーの統合に際して、機密性の高いユーザーデータの保護に関する懸念は払拭されていません。

データ プライバシーのジレンマ

データ プライバシーについて説明する前に、重要なコンセプトである RAG (検索拡張生成)を定義しておきましょう。これは、生成 AI モデルの精度と信頼性を最適化する ML 技術です。アプリケーションは、RAG を使用して情報源(データベースなど)から情報を取得し、それを LLM のプロンプトに追加して、よりグラウンディングされた正確な回答を生成するために使用します。

多くのデベロッパーは、RAG を導入することで、アプリケーションがデータベースに含まれる自社専有のデータにアクセスできるようにしています。たとえば、アプリケーションは、顧客情報、独自の調査、機密の法的文書を含むデータベースに RAG エージェントを使用してアクセスすることで、自然言語による質問に企業のコンテキストで正しく回答できます。

RAG のユースケース: Cymbal Air

どんなデータアクセスのパラダイムも、注意深く導入しなければリスクとなります。Cymbal Air という仮想の航空会社が、以下のタスクを処理するために、RAG を使用した AI アシスタントを開発しているとします。

  • ユーザーの航空券を予約する(データベースへの書き込み)

  • ユーザーが予約した航空券を一覧表示する(ユーザーのプライバシー データベースからの読み出し)

  • ユーザーのフライト情報(スケジュール、場所、座席情報)を取得する(専有データベースからの読み出し)

このアシスタントは、幅広い運用データとユーザーデータにアクセスする必要があり、データベースに情報を書き込むことが必要になる場合もあります。しかし、AI に無制限のアクセスを与えてしまうと、別のユーザーに関する機密情報が偶発的に漏洩してしまう可能性があります。AI アシスタントがデータベースから情報を取得できるようにしながら、データの安全性を確保するにはどうすればよいでしょうか?

ユーザー中心のセキュリティ設計パターン

この問題に対処するには、エージェントがアクセスできるものを制限するのが一つの方法です。基盤モデルに無制限のアクセスを与えるのではなく、エージェントがデータベース情報に安全かつ予測可能な方法でアクセスするために使用する特定のツール関数を定義できます。主な手順は以下のとおりです。

  • あらかじめ記述された SQL クエリを実行するツール関数を作成します

  • このツール関数にユーザー認証ヘッダーを追加します

  • ユーザーがデータベース情報を要求した場合、エージェントはユーザー入力からパラメータを解析し、パラメータをツール関数に供給します

端的に言うと、基盤モデル エージェントには不透明なユーザー認証ツール関数を使用して、認証システムを設計しました。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1-architecture.max-1600x1600.png

認証とワークフロー

それでは、認証ワークフローを見てみましょう。

  1. ユーザーの認証トークンを取得します

    1. アプリケーションがユーザー ログインを要求し、認証サービスから認証トークンを受信します。

    2. アプリケーションがユーザーの認証トークンツール関数のリクエスト ヘッダーに追加します。

  2. 検索サービスにリクエストを送信します

    1. ユーザーがエージェントにデータベースからの情報を要求します。

    2. エージェントがツール関数を使用して検索サービスにリクエストを送信します。

  3. 認証トークンを確認してデータベースをクエリします

    1. 検索サービスがリクエスト ヘッダーからユーザーの認証トークンを解析します。

    2. 検索サービスがユーザー認証トークンを確認し、認証サービスからユーザー ID を受信します。

    3. 検索サービスがユーザー ID(ユーザーまたは基盤モデル エージェントには非表示)を使用して、データベースをクエリしてユーザー情報を取得します。

  4. 情報をエージェントに返送します

    1. アプリケーションが検索サービスからユーザー情報を含む回答を取得します。

    2. アプリケーションがユーザー情報を基盤モデルに供給します。

    3. アプリケーションがエージェントから回答を受信し、ユーザーに転送します。

この認証設計が安全な理由

プロセス全体を通して、AI エージェントがすべてユーザーのデータを一度に見ることはできません。AI エージェントがアクセスできるのは、認証されたユーザーに関する行のみです。この方法では、専用の AI アシスタントが各ユーザーに割り当てられ、ログインしたユーザーの情報のみにアクセスします。

アプリの構築

このようなユーザー認証機能を持つアプリを構築する方法を説明しましょう。主に次の 2 つのコンポーネントがあります。

  • アプリケーション レイヤ: オーケストレーションされたレイヤで、基盤モデル ベースのエージェントの実装と、検索サービスへの各リクエストにユーザーの認証トークンを追加する事前定義されたツールが含まれます。

  • 検索サービス: このサービスは、データベースの警備員のような役割を果たし、各ユーザーが許可された情報にのみアクセスするようにします。ユーザーのトークンをダブルチェックし、その情報を使用して、データベースからユーザーに許可されている情報のみを pull します。

ユーザー認証機能の実装

https://storage.googleapis.com/gweb-cloudblog-publish/images/2-agent.max-1500x1500.png

アプリケーション レイヤ

以下に、LangChain でツール リクエストを構築する方法のコード例を示します。ツールはアプリケーション レイヤに作成する必要があります。

  1. 認証サーバーにリクエストを送信し、ユーザーの認証トークンを取得する get_id_token() 関数を作成します。

  2. ユーザー認証トークンをリクエスト ヘッダーに追加します。

  3. ユーザー認証済みの list_ticket() 関数から LangChain ツールを生成します。
読み込んでいます...

検索サービス

検索サービスの受信エンドポイントは、アプリケーション レイヤからのリクエストを以下の手順で処理します。

  1. リクエスト ヘッダーからのユーザー認証トークンを解析します

  2. 認証サービスでトークンを確認し、ユーザー ID を取得します

  3. 事前定義された SQL クエリを送信し、データベースからユーザーの情報を取得します

  4. 結果をアプリケーションに返します

読み込んでいます...

Cymbal Air デモ

ワークフロー全体で、この旅行者のチケット情報はこのユーザー認証設計によって保護されます。この設計では、AI アシスタントのメモリと認証トークンの両方がユーザー ログインに関連付けられるため、各ユーザーに専用のエージェントと認証ツールが割り当てられます。

実際に試してみる

このユーザー認証設計の動作を確認するには、Cymbal Air デモを実行してみてください。このオープンソースのデモ アプリケーションは、LangChain を使用して構築され、Google OAuth 認証ワークフローを統合したユーザー認証機能の設計と実装を紹介するものです。ダウンロードして、目的に合わせて変更していただけます。詳細な手順については、プロジェクトの Codelab をご覧ください。さらに、マネージド LangChain サービスを使用してエージェントを構築することにご関心をお持ちの場合は、LangChain on Vertex AI についての詳細をこちらでご確認ください。

ー Google ソフトウェア エンジニア Wenxin Du

ー Google エンジニアリング マネージャー Jessica Chan

投稿先