RAG 用 Vertex AI の LlamaIndex の概要

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

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

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

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

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

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

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

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

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

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

サポートされているモデル

このセクションには、RAG 用 Vertex AI の LlamaIndex をサポートする Google モデルとオープンモデルについて記載されています。

Gemini モデル

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

モデル バージョン
Gemini 1.5 Flash gemini-1.5-flash-001
Gemini 1.5 Pro 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

オープンモデル

Google が運用するサービスとしての Llama 3.1 モデル(MaaS)エンドポイントと、お客様が独自にデプロイしたオープンモデルのエンドポイントは、RAG 用 Vertex AI の LlamaIndex をサポートしています。

次のコードサンプルは、Gemini API を使用してオープンモデル インスタンスを作成する方法を示しています。

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

  # 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]
  )

サポートされているエンベディング モデル

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

  • 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

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

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

ファイル形式 ファイルサイズの上限
Google ドキュメント Google Workspace からエクスポートする場合: 50 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 用 Vertex AI の LlamaIndex を他のドキュメント タイプで使用することは可能ですが、生成されるレスポンスの品質が低下する可能性があります。

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

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

  • ローカル ファイルをアップロードする: 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 用 Vertex AI の LlamaIndex が一連の変換を実行して、インデックス登録用のデータを準備します。次のパラメータを使用して、ユースケースを制御できます。

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

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

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

取得パラメータ

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

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

コーパスを管理する

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

コーパス管理

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

コーパスを作成するときに、次のことを指定できます。

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

ファイル管理

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

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

次のステップ