1. 始める前に
この Codelab を続行する前に、以下の点に留意してください。
前提条件
- LLM に関する基礎知識
- RAG システムに関する基本的な知識
学習内容
- アップロードしたデータから質問に答えられる Google 品質の検索エンジンを構築する方法
- Vertex AI Datastore の作成方法
- Vertex AI エージェントの作成方法
- CloudRun を活用してアプリケーションをデプロイする方法
必要なもの
- Google Cloud アカウント
- Google Cloud プロジェクト
- ターミナルのある IDE
はじめに
Google 検索は、ウェブページやその他のコンテンツの膨大なインデックスを使用して、ユーザーのクエリに対して関連性の高い結果を提供する強力なツールです。これは、検索拡張生成(RAG)と呼ばれる手法によって実現されます。RAG は現代の AI における重要な手法です。
RAG はまず、ドキュメント コーパスから関連する文章を取得します。これは、キーワード マッチング、意味的類似性、機械学習などのさまざまな手法を使用して行われます。関連する文章が取得されると、それらを使用して、ユーザーのクエリに対する要約または回答が生成されます。
RAG の主なメリットは、言語モデルでハルシネーションを回避できることです。ハルシネーションとは、ドキュメント コーパス内の証拠によって裏付けられていないテキストの生成を表す用語です。これは、言語モデルが関連性のある情報と無関係な情報を区別できない場合に発生します。
RAG は、生成されるテキストが常にドキュメント コーパスからの証拠に基づいていることを保証することで、ハルシネーションを回避します。そのため、より信頼性が高く信頼できる情報源となっています。
RAG は、検索エンジン、chatbot、質問応答システムなど、さまざまなアプリケーションで使用されている強力な手法です。今後数年間で、AI が 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 アーキテクチャ アプリケーションを(フロントエンドとバックエンドを含む)CloudRun にデプロイする方法も学びます。CloudRun は、アプリケーションをコンテナとして Google Cloud にデプロイするサーバーレス プラットフォームです。
アプリケーションの仕組み
- データのアップロード: 独自のデータコーパス(PDF ファイルなど)を入力としてアップロードできます。
- 検索バーで質問する: アップロードしたデータのコーパスに基づいて検索バーで質問できます。
- 回答の取得: ユーザーは、検索結果または候補を取得し、クエリの関連性に基づいて取得された回答の真正性/根拠を確認できます。
2. 環境設定
- Google Cloud コンソールのプロジェクト選択ページで、Google Cloud プロジェクトを選択または作成します。
- Google Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
- ここでは、Google Cloud で動作するコマンドライン環境である Cloud Shell を使用します。アクセスするには、Google Cloud コンソールの上部にある [Cloud Shell をアクティブにする] をクリックします。
- Cloud Shell に接続したら、次のコマンドを使用して、すでに認証されていることと、プロジェクトが自分のプロジェクト ID に設定されていることを確認します。
gcloud auth list
- Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project
- プロジェクトが設定されていない場合は、次のコマンドを使用して設定します。
gcloud config set project <YOUR_PROJECT_ID>
- 次の API が有効になっていることを確認してください。
- Cloud Run
- Vertex AI
- Cloud Storage
gcloud コマンドの代わりに、こちらのリンクからコンソールからアクセスすることもできます。gcloud のコマンドと使用方法については、ドキュメントをご覧ください。
3. ステップ 1: GCP バケットを作成する
- コンソールに移動し、検索バーに「Cloud Storage」と入力します。
- 結果の提案から Cloud Storage を選択します。
- [バケットを作成] をクリックします。
- バケットにグローバルに一意の名前を指定します
- [続行] をクリックします
- [ロケーション タイプ] で、[マルチリージョン] を選択します。
- プルダウンで [
us (multiple regions in United States)
] を選択します。
- [バケットを作成] をクリックします。
- バケットが作成されたら、リポジトリから
alphabet-metadata.json
をアップロードします(リンクからダウンロード: https://github.com/kkrishnan90/gcp-vertex-search-demo/blob/main/alphabet-metadata.json)。
4. ステップ 2: Vertex AI Datastore を作成する
- コンソール ページの検索バーに「Vertex AI Agent Builder」と入力します。
- 最初のプロダクトである [Agent Builder] を選択します。
- [Agent Builder] ページで、左側のナビゲーション バーに表示されている [Data Stores] をクリックします。
- [データストアを作成] をクリックします。
- データストアとして Cloud Storage を選択する
- Cloud Storage アイコンの下にある [選択] をクリックします
- [Folder] オプションの下のタブで、[参照] ボタンをクリックします。
- ステップ 1 で作成したバケットを選択します。
- 下のオプションで、[リンクされた非構造化ドキュメント(メタデータを含む JSONL)] を選択してください
- [続行] をクリックします。
- [Configuration] ページで、データストアのロケーションとして [global] を選択します。
- データストアに識別可能な名前を付けます
- [作成] をクリックします。
ブラウニー:
- [作成] ボタンのすぐ上に、ドキュメント処理オプションが表示されます。
- デジタル パーサー、OCR パーサー、レイアウト パーサーなどのさまざまなパーサーを試すことができます
- 高度なチャンクを有効にして、独自のカスタム チャンクサイズの上限を指定することもできます。
5. ステップ 3: エージェントを作成する
- データストアが作成されたら、左側のナビゲーション バーでアプリをクリックし、[アプリ] を選択します
- [Create App] ボタンをクリックします。
- アプリの種類として [Search](検索)を選択します(エージェント、会話型 bot、推奨事項などを作成することもできます)。
- [コンテンツ] で必ず [一般] を選択してください。構築するデータストアとシステムの種類に基づいて、メディアまたは推奨事項を選択することもできます。
- Enterprise エディションと高度な LLM 機能の両方をオンに切り替えてください
- アプリケーション名を入力してください
- 会社名の指定
- リージョンは「グローバル」にしてください。
- [続行] をクリックします
- 次の画面で、手順 2 で作成したデータストアを選択します。
- [作成] をクリックします。
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
- フォルダ構造
- Backend - Python ベースの API 実装を保持し、フロントエンドでやり取りする RESTful エンドポイントを作成します。
- フロントエンド - リアクション ベースのアプリケーションを保持し、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 は 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 プロダクトをクリックします。
- [サービスを作成] をクリックします。
- 次のページで、[既存のコンテナ イメージから 1 つのリビジョンをデプロイする] が選択されていることを確認します。
- 下の [選択]をクリックします
- 右側にナビゲーション バーが表示されます。
- Artifact Registry がタブとして選択されていることを確認してください
- プロジェクトが正しく選択されていることを確認する
- 矢印をクリックして、デプロイしたコンテナ イメージのアコーディオンを展開します。
- コンテナタグを選択して展開します(デプロイされている最新のタグを常に選択し、v1、v2 などの適切な最新のタグを使用します)。
- コンテナタグ名の下に表示されるコンテナ イメージをクリックします。
- [構成] 領域
- Cloud Run アプリケーションのサービス名を指定します(これは Cloud Run にアプリケーションをデプロイする際の URL の一部になります)
- 適切なリージョン(この場合は us-central1 など)を選択します。
- [Authentication] の
- [未認証の呼び出しを許可する] が選択されていることを確認します
- CPU の割り当てと料金が低い
- [CPU はリクエストの処理中にのみ割り当てる] を選択します
- [Service Auto Scaling] を 1 に変更します(本番環境では、毎日のトラフィックを処理するために最小インスタンス数の稼働をおすすめします。0 のままにしておいてかまいません)。
- インターネットからのトラフィックがアプリケーションにアクセスできるようにするには、[上り(内向き)制御] を [すべて] に設定します。
- [作成] をクリックします。
- Cloud Run インスタンスがデプロイされます。同じメイクのプロビジョニングに数分かかります。
- デプロイすると、ウェブ アプリケーションにアクセスできる一般公開の URL を確認できます。
8. 仕組み
- アプリケーションのホームページが表示されたら、[Upload Document] ボタンをクリックします。
- PDF ファイルをアップロードする
- アップロードの完了後
- ウェブページの上部にある検索バーをクリックします。
- アップロードしたドキュメントに関連するクエリの検索を開始します
- クエリを入力して [Search] をクリックすると、アップロードしたドキュメント内の関連する回答がすべて表示されます。
- バックエンド コードを調べて、次のような構成を追加してみてください
- スニペットの追加
- 抽出セグメントの追加
- 回答を追加しています
- 上位 k 個の結果を調整して、LLM が回答を要約できるようにする(Google 検索の AI による概要など)
- アドオンとして、ドキュメントのアップロード中にメタデータタグを追加することもできます。これにより、ファセットやフィルタ可能なカテゴリを生成しやすくなります
9. クリーンアップ
この Codelab で使用したリソースについて、Google Cloud アカウントに課金されないようにする手順は次のとおりです。
10.完了
お疲れさまでした。Google の最先端のモデルを使用して、すぐに使える RAG システムを構築し、検索クエリに対して Google 品質の結果を提供することができました。この Codelab はデモのみを目的としています。本番環境のユースケースでは、より多くのセキュリティとガードレールを設定する必要があります。完全なリポジトリへのリンクはこちらです。Google Cloud を活用することで、わずか 5 ステップでエンドツーエンドの RAG システムを生成し、すぐに Google 品質の結果を数分間で提供できます。生成 AI や大規模言語モデルが進化するなか、このような RAG システムを構築することで、ハルシネーションや引用されていない情報が表面化することの落とし穴を避けることもできます。
これは出発点にすぎませんが、完全にカスタマイズ可能な DIY RAG API により、パイプライン プロセスのあらゆる部分を効果的に処理するための透明性、パワー、効率性をさらに高めることができます。