Vertex AI を使用して Google 品質の検索システムを構築する

1. 始める前に

この Codelab を続行する前に、以下の点に留意してください。

前提条件

  • LLM に関する基礎知識
  • RAG システムの基本的な理解

学習内容

  • アップロードしたデータから質問に答えることができる Google 品質の検索エンジンを構築する方法
  • Vertex AI Datastore の作成方法
  • Vertex AI エージェントを作成する方法
  • CloudRun を利用してアプリケーションをデプロイする方法

必要なもの

  • Google Cloud アカウント
  • Google Cloud プロジェクト
  • ターミナル付きの IDE

はじめに

Google 検索は、ウェブページやその他のコンテンツの膨大なインデックスを使用して、ユーザーのクエリに関連する結果を提供する強力なツールです。これは、検索拡張生成(RAG)と呼ばれる手法によって可能になります。これは、最新の AI の重要な手法です。

RAG は、まずドキュメント コーパスから関連する文章を取得します。これには、キーワード マッチング、セマンティック シミラーリティ、機械学習などのさまざまな方法が使用されます。関連する文章が取得されると、それらを使用して、ユーザーのクエリに対する要約または回答が生成されます。

RAG の主なメリットは、言語モデルがハルシネーションを回避できることです。ハルシネーションとは、ドキュメント コーパス内の証拠によって裏付けられていないテキストの生成を表す用語です。これは、言語モデルが関連情報と無関係な情報を区別できない場合に発生することがあります。

RAG は、生成されたテキストが常にドキュメント コーパスの証拠に基づいていることを確認することで、幻覚を回避します。これにより、より信頼できる情報源になります。

RAG は、検索エンジン、chatbot、質問応答システムなど、さまざまなアプリケーションで使用されている強力な手法です。今後、AI でますます重要な役割を果たすと考えられます。

RAG の実際の使用例を次に示します。

  • 多くの検索システムは、RAG を使用してユーザーのクエリに関連する検索結果を生成します。
  • chatbot は RAG を使用して、有益で魅力的なユーザーの質問に対する回答を生成します。
  • 質問応答システムでは、RAG を使用して、正確かつ包括的なユーザーの質問に対する回答を生成します。

RAG は、さまざまなドメインやアプリケーションでテキストを生成するために使用できる汎用的な手法です。AI は、AI をよりインテリジェントで有益なものにする強力なツールです。

この Codelab では、ユーザーがアップロードした提供されたコーパスを使用して質問に回答できる RAG システムを構築します。Vertex AI Search/Agent Builder というすぐに使用できる RAG プラットフォームを使用すると、RAG システムの構築を迅速化できるため、ドキュメントの収集、解析、チャンキング、エンベディングの生成、クエリ拡張、候補の取得とランキングの手動作業を回避できます。すぐに使い始めることができる RAG システムはすぐに利用できますが、Google Cloud では、独自の DIY RAG システムを構築するためのすべてのプロセスに個別の API も用意されており、ビジネス要件に合わせて RAG システムを微調整するのに役立ちます。

作成するアプリの概要

この Codelab を修了すると、適切な参照情報で根拠と引用を行い、事実に基づく情報で質問に答えるのに役立つ、動作中の RAG システムがデプロイされます。

また、Vertex AI Search API を使用して Google Cloud でこの RAG アーキテクチャを構築する方法についても理解を深めます。また、この RAG アーキテクチャ アプリケーション(フロントエンドとバックエンドを含む)を、Google Cloud にコンテナとしてアプリケーションをデプロイするサーバーレス プラットフォームである CloudRun にデプロイする方法についても学習します。

2d055ded874603a6.png

アプリケーションの仕組み

  • データのアップロード: 独自のデータコーパス(PDF ファイルなど)を入力としてアップロードできます。
  • 検索バーでクエリを実行する: ユーザーは、アップロードされたデータコーパスに基づいて検索バーで質問できます。
  • 回答の取得: ユーザーは、検索結果または候補を取得し、クエリの関連性に基づいて取得された回答の真正性/根拠を確認できます。

2. 環境設定

  1. Google Cloud コンソールのプロジェクト選択ページで、Google Cloud プロジェクトを選択または作成します。
  2. Google Cloud プロジェクトの課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
  3. Google Cloud 上で動作するコマンドライン環境の Cloud Shell を使用します。アクセスするには、Google Cloud コンソールの上部にある [Cloud Shell をアクティブにする] をクリックします。

1829c3759227c19b.png

  1. Cloud Shell に接続したら、次のコマンドを使用して、認証が完了していることと、プロジェクトがプロジェクト ID に設定されていることを確認します。
gcloud auth list
  1. Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project
  1. プロジェクトが設定されていない場合は、次のコマンドを使用して設定します。
gcloud config set project <YOUR_PROJECT_ID>
  1. 次の API が有効になっていることを確認してください。
  • Cloud Run
  • Vertex AI
  • Cloud Storage

gcloud コマンドの代わりに、こちらのリンクからコンソールからアクセスすることもできます。gcloud コマンドとその使用方法については、ドキュメントをご覧ください。

3. ステップ 1: GCP バケットを作成する

  • コンソールに移動し、検索バーに「Cloud Storage」と入力します。
  • 候補として表示された結果から Cloud Storage を選択します。21d2bc910e71f7ec.png
  • [Create Bucket] をクリックします。

adf5c0382f6c3540.png

  • バケットにグローバルに一意の名前を指定します
  • [続行] をクリックします
  • [ロケーション タイプ] で [マルチリージョン] を選択します。
  • プルダウンで、オプション us (multiple regions in United States) を選択します。

731aead7d8497725.png

  • [Create Bucket] をクリックします。

f7ac409ed9c4af21.png

  • バケットが作成されたら、リポジトリから alphabet-metadata.json をアップロードします。

4. ステップ 2: Vertex AI Datastore を作成する

  • コンソール ページの検索バーに「Vertex AI Agent Builder」と入力します。
  • 最初のプロダクト「エージェント ビルダー」を選択します。

c4a67b92bb7900e3.png

  • [Agent Builder] ページで、左側のナビゲーション バーに表示されている [Data Stores] をクリックします。

f86f67d344d398fb.png

  • [データストアを作成] をクリックします。

e64e771f33543f46.png

  • データストアとして Cloud Storage を選択する
  • Cloud Storage アイコンの下にある [選択] をクリックします

3a8d22888e7eedc2.png

  • [Folder] オプションの下のタブで、[参照] ボタンをクリックします。
  • ステップ 1 で作成したバケットを選択します。
  • 下のオプションで、[リンクされた非構造化ドキュメント(メタデータを含む JSONL)] を選択してください
  • [続行] をクリックします。

13876b5d12dbe1fb.png

  • [Configuration] ページで、データストアのロケーションとして [global] を選択します。
  • データストアに識別可能な名前を付けます
  • [作成] をクリックします。

618b7a456fbffad4.png

ブラウニー:

  • [作成] ボタンのすぐ上に、ドキュメント処理オプションが表示されます。
  • デジタル パーサー、OCR パーサー、レイアウト パーサーなどのさまざまなパーサーを試すことができます
  • 高度なチャンクを有効にして、独自のカスタム チャンクサイズの上限を指定することもできます。

38471c1d3411610d.png

5. ステップ 3: エージェントを作成する

  • データストアが作成されたら、左側のナビゲーション バーでアプリをクリックし、[アプリ] を選択します
  • [アプリを作成] ボタンをクリックします。
  • アプリの種類として [検索] を選択します(エージェント、会話型ボット、おすすめコンテンツなども作成できます)。

ae5294e33f63567c.png

  • [コンテンツ] で [汎用] が選択されていることを確認します。データストアと、構築するデータとシステムの種類に基づいて、[メディア] または [レコメンデーション] を選択することもできます。
  • Enterprise Edition と高度な LLM 機能の両方をオンにします。
  • アプリケーション名を入力する
  • 会社名の指定

f8a41c9751f7a8d3.png

  • リージョンが「グローバル」であることを確認します。
  • [続行] ed17b18e094ba59a.png をクリックします。
  • 次の画面で、ステップ 2 で作成したデータストアを選択します。
  • [作成] をクリックします。

bc77006e0025ae9e.png

6. ステップ 4: アプリケーションを Docker 化する

  • Google Cloud コンソールでターミナルを開く
  • 次のコマンドを使用して、リポジトリ <sample_repository_link> のクローンを作成します。

git clone https://github.com/kkrishnan90/vertex-ai-search-agent-builder-demo

  • 次のコマンドを使用してディレクトリを変更し、クローン リポジトリに移動します。

cd vertex-ai-search-agent-builder-demo

  • フォルダ構造
  • バックエンド - フロントエンドが操作する RESTful エンドポイントの作成に役立つ Python ベースの API 実装を保持します。
  • フロントエンド - React ベースのアプリケーションを保持し、UI を提供します。また、REST エンドポイントを介したバックエンドへの必要なアプリケーション レベルの呼び出しも含まれます。
  • Dockerfile - このファイルには、Docker コンテナの作成に関連するすべてのコマンドが含まれます。
  • リポジトリ ディレクトリのルートで、Docker イメージのビルドに役立つ次のコマンドを実行します(注: M1、M2 などの Apple シリコン チップを使用している Macbook で Docker コンテナをビルドする場合は、- - platform フラグを使用してください。Windows マシンを使用してビルドする場合や、CPU アーキテクチャが Intel ベースの場合は、このフラグは必要ありません)。

docker build --platform linux/amd64 -t your-image-name .

  • Docker コンテナのビルドに成功したら、次のコマンドを実行してコンテナに正しいタグを付けて、イメージのバージョンを指定できるようにします。アプリケーションには複数のバージョンが存在する可能性があるため、Docker コンテナのタグとして複数のバージョンが存在する可能性があるので注意してください。最新の安定版を常に使用することは、DevOps の観点から推奨されるアプローチです。

docker tag your-image-name REGION-docker.pkg.dev/PROJECT-ID/REPOSITORY-NAME/IMAGE-NAME:TAG

  • Docker コンテナ イメージのタグ付けが成功したら、イメージを Google Artifact Registry(GAR)に push します。GAR は Google が提供するフルマネージドのプラットフォームで、Docker コンテナの管理とバージョン管理に役立ちます。次のコマンドを実行して、上記のタグ付きコンテナを GAR に push します。詳細については、次のリンク(https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling)をご覧ください。

docker push REGION-docker.pkg.dev/PROJECT-ID/REPOSITORY-NAME/IMAGE-NAME:TAG

7. ステップ 5: Cloud Run にアプリケーションをデプロイする

  • ターミナルを最小化します。Google Cloud コンソールの検索バーで「Cloud Run」を検索する
  • 提案された Cloud Run プロダクトをクリックします。

592103eb61c16738.png

  • [Create Service] をクリックします。
  • 次のページで、[既存のコンテナ イメージから 1 つのリビジョンをデプロイする] が選択されていることを確認します。
  • 下の [選択]をクリックします
  • 右側にナビゲーション バーが表示されます。
  • Artifact Registry がタブとして選択されていることを確認します。
  • プロジェクトが正しく選択されていることを確認してください
  • 矢印をクリックして、デプロイしたコンテナ イメージのアコーディオンを展開します。
  • コンテナタグを選択して展開します(常に、v1、v2 などの適切な最新タグが付いた最新のデプロイ済みタグを選択します)。
  • コンテナタグ名の下に表示されているコンテナ イメージをクリックします。

aac35d55d7dd874e.png

  • [Configure] 領域で
  • Cloud Run アプリケーションのサービス名を指定します(これは、Cloud Run にアプリケーションをデプロイする際の URL の一部になります)。
  • 適切なリージョンを選択します(この場合は us-central1 または任意のリージョン)。
  • [認証] で次の操作を行います。
  • [未認証の呼び出しを許可する] が選択されていることを確認します。
  • CPU の割り当てと料金が低い
  • [CPU はリクエストの処理中にのみ割り当てる] を選択します
  • Service Auto Scaling を 1 に変更します(本番環境では、1 日あたりのトラフィックを処理するために最小限のインスタンスを実行することをおすすめします。0 のままにすることもできます)。
  • インターネットからのトラフィックがアプリケーションにアクセスできるようにするには、[上り(内向き)制御] を [すべて] に設定します。
  • [作成] をクリックします。
  • Cloud Run インスタンスがデプロイされ、同じメイクのプロビジョニングに数分かかります。

b8b147265b8d457b.png

  • デプロイが完了すると、ウェブ アプリケーションにアクセスできる一般公開の URL が表示されます。

1dfdb007c52581a1.png

8. 仕組み

  • アプリケーションのホームページで、[Upload Document] ボタンをクリックします。
  • PDF ファイルをアップロードする
  • アップロードの完了後
  • ウェブページの上部にある検索バーをクリックします。
  • アップロードしたドキュメントに関連するクエリの検索を開始する
  • クエリを入力して [検索] をクリックすると、アップロードしたドキュメント内の関連する回答がすべて表示されます。
  • バックエンド コードを調べて、次のような構成を追加して試すことができます。
  • スニペットの追加
  • 抽出セグメントの追加
  • 回答の追加
  • LLM が回答を要約できるようにトップ k の結果をチューニングする(Google 検索の AI による概要など)
  • アドオンとして、ドキュメントのアップロード時にメタデータタグを追加することもできます。これにより、ファセットとフィルタ可能なカテゴリを生成できます

9. クリーンアップ

この Codelab で使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の操作を行います。

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。
  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
  4. または、コンソールで Cloud Run に移動し、デプロイしたサービスを選択して削除することもできます。

10.完了

これで、これで、Google が提供する最先端のモデルを使用して、すぐに使える RAG システムを構築し、検索クエリに Google 品質の結果を提供できるようになりました。この Codelab はデモ目的でのみ使用してください。本番環境のユースケースでは、より多くのセキュリティとガードレールを設定する必要があります。完全なリポジトリへのリンクはこちらです。Google Cloud を活用して、たった 5 つのステップで、Google 品質の結果をすぐに利用できるエンドツーエンドの RAG システムを生成できます。生成 AI と大規模言語モデルが進化するにつれて、このような RAG システムを構築することで、ハルシネーションや引用されていない情報が表示されるといった落とし穴を回避することもできます。

これは出発点にすぎませんが、完全にカスタマイズ可能な DIY RAG API により、パイプライン プロセスのあらゆる部分を効果的に処理するための透明性、パワー、効率性をさらに高めることができます。