RAG Engine の概要

旧称 Vertex AI の LlamaIndex、最新の Knowledge Engine である RAG Engine は、コンテキスト拡張大規模言語モデル(LLM)アプリケーションを開発するためのデータ フレームワークです。コンテキストの拡張は、LLM をデータに適用するときに行われます。これは、検索拡張生成(RAG)を実装します。

LLM の一般的な問題は、プライベート データ(組織のデータ)を理解していないことです。RAG Engine を使用すると、追加の非公開情報で LLM のコンテキストを拡充できます。これは、モデルがハルシネーションを低減し、質問に正確に答えることができるためです。

追加の情報源と LLM が持つ既存の知識を組み合わせることで、より優れたコンテキストが提供されます。クエリとともにコンテキストが改善されることで、LLM のレスポンスの品質が向上します。

RAG Engine を理解するうえで、次のコンセプトは重要です。これらのコンセプトは、検索拡張生成(RAG)プロセスの順序で記載されています。

  1. データの取り込み: さまざまなデータソースからデータを取得します。たとえば、ローカル ファイル、Cloud Storage、Google ドライブが該当します。

  2. データ変換: インデックス登録の準備としてデータを変換します。たとえば、データはチャンクに分割されます。

  3. エンベディング: 単語やテキストの断片の数値表現。これらの数値は、テキストの意味論的意味とコンテキストを捉えています。類似または関連する単語やテキストは、エンベディングが類似する傾向があります。つまり、高次元ベクトル空間内で近接します。

  4. データのインデックス登録: RAG Engine は、コーパスと呼ばれるインデックスを作成します。インデックスは、検索用に最適化されるようにナレッジベースを構造化します。たとえば、インデックスは、膨大な参考書の詳細な目次のようなものです。

  5. 検索: ユーザーが質問をするか、プロンプトを指定すると、RAG Engine の検索コンポーネントがナレッジベースを検索し、クエリに関連する情報を探します。

  6. 生成: 取得した情報は、生成 AI モデルが事実に基づいた関連性の高いレスポンスを生成するためのガイドとして、元のユーザークエリに追加されるコンテキストになります。

RAG をサポートする生成 AI モデル

このセクションでは、RAG をサポートするモデルについて説明します。

Gemini モデル

次の表に、RAG Engine をサポートする Gemini モデルとそれらのバージョンを示します。

モデル バージョン
Gemini 1.5 Flash gemini-1.5-flash-002
gemini-1.5-flash-001
Gemini 1.5 Pro gemini-1.5-pro-002
gemini-1.5-pro-001
Gemini 1.0 Pro gemini-1.0-pro-001
gemini-1.0-pro-002
Gemini 1.0 Pro Vision gemini-1.0-pro-vision-001
Gemini gemini-experimental

セルフデプロイ モデル

RAG Engine は、Model Garden のすべてのモデルをサポートしています。

独自にデプロイしたオープンモデル エンドポイントで RAG Engine を使用します。

  # Create a model instance with your self-deployed open model endpoint
  rag_model = GenerativeModel(
      "projects/PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID",
      tools=[rag_retrieval_tool]
  )

Vertex AI のマネージド API を使用したモデル

Vertex AI で RAG Engine をサポートするマネージド API を使用するモデルには、次のようなものがあります。

次のコードサンプルは、Gemini GenerateContent API を使用して生成モデル インスタンスを作成する方法を示しています。モデル ID /publisher/meta/models/llama-3.1-405B-instruct-maas は、モデルカードにあります。

  # Create a model instance with Llama 3.1 MaaS endpoint
  rag_model = GenerativeModel(
      "projects/PROJECT_ID/locations/REGION/publisher/meta/models/llama-3.1-405B-instruct-maas",
      tools=[rag_retrieval_tool]
  )

次のコードサンプルは、OpenAI 互換の ChatCompletions API を使用してモデル レスポンスを生成する方法を示しています。

  # Generate a response with Llama 3.1 MaaS endpoint
  response = client.chat.completions.create(
      model="meta/llama-3.1-405b-instruct-maas",
      messages=[{"role": "user", "content": "your-query"}],
      extra_body={
          "extra_body": {
              "google": {
                  "vertex_rag_store": {
                      "rag_resources": {
                          "rag_corpus": rag_corpus_resource
                      },
                      "similarity_top_k": 10
                  }
              }
          }
      },
  )

埋め込みモデル

エンベディング モデルは、コーパスの作成と、レスポンスの生成時の検索と取得に使用されます。このセクションでは、サポートされているエンベディング モデルを示します。

  • textembedding-gecko@003
  • textembedding-gecko-multilingual@001
  • text-embedding-004(デフォルト)
  • text-multilingual-embedding-002
  • textembedding-gecko@002(ファインチューニングされたバージョンのみ)
  • textembedding-gecko@001(ファインチューニングされたバージョンのみ)

エンベディング モデルのチューニングの詳細については、テキスト エンベディングをチューニングするをご覧ください。

次のオープン エンベディング モデルもサポートされています。Model Garden で確認できます。

  • e5-base-v2
  • e5-large-v2
  • e5-small-v2
  • multilingual-e5-large
  • multilingual-e5-small

RAG でサポートされているドキュメントの種類

テキスト ドキュメントのみがサポートされています。次の表に、ファイルの種類とファイルサイズの上限を示します。

ファイル形式 ファイルサイズの上限
Google ドキュメント Google Workspace からエクスポートする場合: 10 MB
Google 図形描画 Google Workspace からエクスポートする場合: 10 MB
Google スライド Google Workspace からエクスポートする場合: 10 MB
HTML ファイル 10 MB
JSON ファイル 1 MB
マークダウン ファイル 10 MB
Microsoft PowerPoint スライド(PPTX ファイル) 10 MB
Microsoft Word ドキュメント(DOCX ファイル) 50 MB
PDF ファイル 50 MB
テキスト ファイル 10 MB

RAG Engine を他のドキュメント タイプで使用することは可能ですが、生成されるレスポンスの品質が低下する可能性があります。

RAG でサポートされるデータソース

サポートされているデータソースは次のとおりです。

  • ローカル ファイルをアップロードする: upload_file(最大 25 MB)を使用した単一ファイルのアップロード。これは同期呼び出しです。
  • Cloud Storage: Cloud Storage からファイルをインポートします。
  • Google ドライブ: Google ドライブからディレクトリをインポートします。

    サービス アカウントには、ファイルをインポートするための適切な権限が付与されている必要があります。それ以外の場合は、ファイルはインポートされず、エラー メッセージも表示されません。ファイルサイズの上限の詳細については、サポートされているドキュメント タイプをご覧ください。

    認証と権限付与を行うには、次の手順を行います。

    1. Google Cloud プロジェクトの IAM ページに移動します。
    2. [Google 提供のロール付与を含む] を選択します。
    3. Vertex AI RAG データサービス エージェントのサービス アカウントを検索します。
    4. ドライブのフォルダで [共有] をクリックし、サービス アカウントと共有します。
    5. サービス アカウントに Google ドライブのフォルダまたはファイルに対する Viewer 権限を付与します。Google ドライブのリソース ID は、ウェブ URL で確認できます。
  • Slack: データコネクタを使用して Slack からファイルをインポートします。

  • Jira: データコネクタを使用して Jira からファイルをインポートします。

詳細については、RAG API リファレンスをご覧ください。

RAG 変換を微調整する

ドキュメントが取り込まれると、RAG Engine が一連の変換を実行して、インデックス登録用のデータを準備します。次のパラメータを使用して、ユースケースを制御できます。

パラメータ 説明
chunk_size ドキュメントがインデックスに取り込まれると、チャンクに分割されます。(トークン内の)chunk_size パラメータはチャンクのサイズを指定します。デフォルトのチャンクサイズは 1,024 トークンです。
chunk_overlap デフォルトでは、ドキュメントは一定量の重複があるチャンクに分割され、関連性と検索品質が向上します。デフォルトのチャンク オーバーラップは 200 トークンです。

チャンクサイズが小さいほど、エンベディングの精度が高くなります。チャンクサイズを大きくすると、エンベディングはより一般的な内容になりますが、特定の詳細情報が欠落する可能性があります。

たとえば、1,000 語ではなく 200 語を同じディメンションのエンベディング配列に変換すると、詳細が失われる可能性があります。これは、モデルに関するコンテキストの長さの上限を考慮する際の良い例でもあります。テキストの大きなチャンクは、小さなウィンドウ モデルに収まらない可能性があります。

RAG の割り当て

RAG Engine を使用して検索拡張生成(RAG)を実行するサービスごとに、次の割り当てが適用されます。割り当ては 1 分あたりのリクエスト数(RPM)で測定されます。
サービス 割り当て 指標
RAG Engine データ マネジメント API 60 RPM VertexRagDataService requests per minute per region
RetrievalContexts API 1,500 RPM VertexRagService retrieve requests per minute per region
base_model: textembedding-gecko 1,500 RPM Online prediction requests per base model per minute per region per base_model

指定できる追加のフィルタは base_model: textembedding-gecko です。
次の上限が適用されます。
サービス 上限 指標
同時実行される ImportRagFiles リクエスト 3 RPM VertexRagService concurrent import requests per region
ImportRagFiles リクエストあたりの最大ファイル数 10,000 VertexRagService import rag files requests per region

その他のレート制限と割り当てについては、Vertex AI の生成 AI のレート制限をご覧ください。

取得パラメータ

次の表に、取得パラメータを示します。

パラメータ 説明
similarity_top_k 取得するコンテキストの最大数を制御します。
vector_distance_threshold 距離がしきい値より小さいコンテキストのみが考慮されます。

RAG ナレッジベース(コーパス)を管理する

このセクションでは、インデックス管理とファイル管理を実行して、RAG タスクのコーパスを管理する方法について説明します。

コーパス管理

コーパス(インデックスとも呼ばれます)は、ドキュメントまたは情報源の集合です。コーパスをクエリして、レスポンスの生成に関連するコンテキストを取得できます。コーパスを初めて作成する場合は、プロセスに要する時間が若干長くなる可能性があります。

次のコーパス オペレーションがサポートされています。

オペレーション 説明 パラメータ
RAG コーパスを作成します。 ドキュメントをインポートまたはアップロードするためのインデックスを作成します。 パラメータを作成する サンプルの作成
RAG コーパスを更新する。 ドキュメントをインポートまたはアップロードするために、以前に作成したインデックスを更新します。 パラメータを更新する 更新例
RAG コーパスの一覧を取得します。 すべてのインデックスを一覧表示します。 パラメータを一覧表示する リストの例
RAG コーパスを取得します。 インデックスを記述するメタデータを取得します。 パラメータを取得する サンプルを取得する
RAG コーパスを削除します。 インデックスを削除します。 パラメータを削除する 削除例

コーパスに対する同時オペレーションはサポートされていません。詳細については、RAG API リファレンスをご覧ください。

ファイル管理

次のファイル オペレーションがサポートされています。

オペレーション 説明 パラメータ
RAG ファイルをアップロードします。 より正確なレスポンスを生成するために、LLM にコンテキストを提供するための追加情報を含むファイルをローカル ストレージからアップロードします。 アップロード パラメータ アップロード例
RAG ファイルをインポートします。 他のストレージからファイルセットを保存先にインポートします。 インポート パラメータ インポート例
RAG ファイルを取得します。 LLM で使用する RAG ファイルの詳細を取得します。 パラメータを取得する サンプルを取得する
RAG ファイルを削除する。 より正確なレスポンスを生成するために、LLM にコンテキストを提供するための追加情報を含むファイルをローカル ストレージからアップロードします。 パラメータを削除する 削除例

詳細については、RAG API リファレンスをご覧ください。

次のステップ