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

1. 始める前に

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

前提条件

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

学習内容

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

必要なもの

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

はじめに

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

RAG は、まずドキュメント コーパスから関連するパッセージを取得します。これは、キーワード マッチング、セマンティック類似性、ML などのさまざまな方法で行われます。関連する文章が取得されると、それらの文章を使用して、ユーザーのクエリに対する要約や回答が生成されます。

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

RAG は、生成されたテキストが常にドキュメント コーパスの証拠に基づいていることを保証することで、ハルシネーションを回避します。これにより、信頼性の高い情報源となります。

RAG は、検索エンジン、chatbot、質問応答システムなど、さまざまなアプリケーションで使用されている強力な手法です。今後数年間で、AI においてますます重要な役割を果たす可能性があります。

RAG の実際の使用例をいくつかご紹介します。

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

RAG は、さまざまなドメインやアプリケーションでテキストを生成するために使用できる汎用性の高い手法です。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 アーキテクチャを構築する方法についても理解を深めます。また、Google Cloud でアプリケーションをコンテナとしてデプロイするサーバーレス プラットフォームである Cloud Run に、この RAG アーキテクチャ アプリケーション(フロントエンドとバックエンドを含む)をデプロイする方法も学びます。

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
  • [バケットを作成] をクリックします。

adf5c0382f6c3540.png

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

731aead7d8497725.png

  • [バケットを作成] をクリックします。

f7ac409ed9c4af21.png

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

4. ステップ 2: Vertex AI データストアを作成する

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

c4a67b92bb7900e3.png

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

f86f67d344d398fb.png

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

e64e771f33543f46.png

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

3a8d22888e7eedc2.png

  • [フォルダ] オプションの下のタブで、[参照] ボタンをクリックします。
  • ステップ 1 で作成したバケットを選択します。
  • 以下のオプションで、[リンクされた非構造化ドキュメント(JSONL とメタデータ)] が選択されていることを確認します。
  • [続行] をクリックします。

13876b5d12dbe1fb.png

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

618b7a456fbffad4.png

Brownie:

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

38471c1d3411610d.png

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

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

ae5294e33f63567c.png

  • [コンテンツ] で [汎用] を選択していることを確認します。構築するデータストア、データの種類、システムに基づいて、[メディア] または [レコメンデーション] を選択することもできます。
  • Enterprise エディションと高度な 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 Silicon チップを使用する 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 は、Docker コンテナの管理とバージョン管理を支援する Google の完全マネージド プラットフォームです。上記のタグ付きコンテナを 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

  • [構成] 領域
  • Cloud Run アプリケーションのサービス名を指定します(これは、Cloud Run にアプリケーションをデプロイするときに URL の一部になります)。
  • 適切なリージョンを選択します(この場合は us-central1 または任意のリージョン)。
  • [認証] で次の操作を行います。
  • [未認証の呼び出しを許可する] が選択されていることを確認する
  • [CPU の割り当てと料金] で
  • [リクエストの処理中にのみ CPU を割り当てる] を選択する
  • Service Auto Scaling を 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 を使用すると、パイプライン プロセスのあらゆる部分を効果的に処理するための透明性、能力、効率性がさらに高まります。