Vertex AI RAG Engine で Document AI レイアウト パーサーを使用する

このページでは、Document AI レイアウト パーサーと、RAG Engine での使用方法について説明します。

Document AI

Document AI は、ドキュメントから非構造化データを取得し、その非構造化データをデータベースに保存するのに適したフィールドに変換するドキュメント処理とドキュメント理解のプラットフォームです。構造化データは、理解、分析、使用できるデータにつながります。

Document AI は、生成 AI を備えた Vertex AI 内のプロダクト上に構築されており、スケーラブルでエンドツーエンドのクラウドベースのドキュメント処理アプリケーションを構築できます。これらのプロダクトを使用するのに、機械学習の専門知識は必要ありません。

Document AI レイアウト パーサー

レイアウト パーサーは、ドキュメントからテキスト、表、リストなどのコンテンツ要素を抽出します。レイアウト パーサーは、生成 AI や検索アプリケーションでの情報検索を容易にするコンテキスト アウェア チャンクを作成します。

検索と LLM の生成に使用する場合、チャンキング プロセス中にドキュメントのレイアウトが考慮されるため、セマンティックな整合性が向上し、コンテンツのノイズが軽減されます。チャンク内のテキストはすべて、同じレイアウト エンティティ(見出し、副見出し、リストなど)から取得されます。

レイアウト検出で使用されるファイル形式については、ファイル形式ごとのレイアウト検出をご覧ください。

Vertex AI RAG でレイアウト パーサーを使用する

ImportRagFiles API はレイアウト パーサーをサポートしていますが、次の制限が適用されます。

  • すべてのファイル形式のファイルサイズの上限を 20 MB に入力します。
  • PDF ファイルあたりのページ数の上限は 500 ページです。

Document AI の割り当て料金が適用されます。

Document AI API を有効にする

プロジェクトで Document AI API を有効にする必要があります。API の有効化の詳細については、サービス使用状況のドキュメントをご覧ください。

Enable the Document AI API.

Enable the API

レイアウト パーサーをオンにする

レイアウト パーサーを有効にする手順は次のとおりです。

  1. プロセッサの作成と管理の手順に沿って、レイアウト パーサーを作成します。

    プロセッサ タイプ名は LAYOUT_PARSER_PROCESSOR です。

  2. プロセッサを有効にするの手順に沿って、レイアウト パーサーを有効にします。

RAG ナレッジベース(コーパス)

RAG コーパスがない場合は、RAG コーパスを作成します。たとえば、RAG コーパスの作成の例をご覧ください。

すでに RAG コーパスがある場合、Layout Parser を使用してファイルをインポートしても、レイアウト パーサーなしでインポートされた既存のファイルは再インポートされません。ファイルでレイアウト パーサーを使用する場合は、まずファイルを削除します。たとえば、RAG ファイルの削除の例をご覧ください。

レイアウト パーサーを使用したファイルのインポート

さまざまなソースのファイルとフォルダは、レイアウト パーサーを使用してインポートできます。

REST

コードサンプルは、レイアウト パーサーを使用して Cloud Storage ファイルをインポートする方法を示しています。別のソースからのファイルのインポートなど、その他の構成オプションについては、ImportRagFilesConfig リファレンスをご覧ください。

リクエスト データを使用する前に、コードサンプルで使用されている次の変数を置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID。
  • LOCATION: リクエストを処理するリージョン。
  • RAG_CORPUS_ID: RAG コーパス リソースの ID。
  • GCS_URIS: Cloud Storage ロケーションのリスト。例: "gs://my-bucket1""gs://my-bucket2"
  • LAYOUT_PARSER_PROCESSOR_NAME: 作成されたレイアウト パーサー プロセッサのリソースパス。例: "projects/{project}/locations/{location}/processors/{processor_id}"
  • CHUNK_SIZE: 省略可。各チャンクに必要なトークンの数。
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/ragCorpora/RAG_CORPUS_ID/ragFiles:import

リクエストの本文(JSON):

{
  "import_rag_files_config": {
    "gcs_source": {
      "uris": "GCS_URIS"
    },
    "rag_file_parsing_config": {
      "layout_parser": {
        "processor_name": "LAYOUT_PARSER_PROCESSOR_NAME"
      }
    },
    "rag_file_transformation_config": {
      "rag_file_chunking_config": {
        "fixed_length_chunking": {
          "chunk_size": CHUNK_SIZE
        }
      }
    },
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

request.json という名前のファイルにリクエスト本文を保存し、次のコマンドを実行します。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/ragCorpora/RAG_CORPUS_ID/ragFiles:import"

Powershell

request.json という名前のファイルにリクエスト本文を保存し、次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/ragCorpora/RAG_CORPUS_ID/ragFiles:import" | Select-Object -Expand Content

Python

Vertex AI SDK for Python のインストールまたは更新方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。

コードサンプルで使用されている次の変数を置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID。
  • LOCATION: リクエストを処理するリージョン。
  • RAG_CORPUS_ID: RAG コーパス リソースの ID。
  • GCS_URIS: Cloud Storage ロケーションのリスト。例: "gs://my-bucket1""gs://my-bucket2"
  • LAYOUT_PARSER_PROCESSOR_NAME: 作成されたレイアウト パーサー プロセッサのリソースパス。例: "projects/{project}/locations/{location}/processors/{processor_id}"
  • CHUNK_SIZE: 省略可。各チャンクに必要なトークンの数。
from vertexai import rag
import vertexai

PROJECT_ID = "PROJECT_ID"
corpus_name = "projects/{PROJECT_ID}/locations/LOCATION/ragCorpora/RAG_CORPUS_ID"
# paths = ["https://drive.google.com/file/123", "gs://my_bucket/my_files_dir"]
# Supports Cloud Storage and Google Drive links
layout_parser_processor_name = "LAYOUT_PARSER_PROCESSOR_NAME"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location="LOCATION")

response = rag.import_files(
    corpus_name=corpus_name,
    paths=paths,
    transformation_config = rag.TransformationConfig(
        chunking_config=rag.ChunkingConfig(
            chunk_size=512,  # Optional
            chunk_overlap=100,  # Optional
        ),
    ),
    max_embedding_requests_per_min=900,  # Optional
    parser=rag.LayoutParserConfig(
        processor_name=layout_parser_processor_name,
        max_parsing_requests_per_min=120,  # Optional
    )
)
print(f"Imported {response.imported_rag_files_count} files.")
# Example response:
# Imported 2 files.

取得クエリ

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

クエリテキストに基づいてコーパスから RAG ファイルを取得する例については、取得クエリをご覧ください。

予測

予測では、取得したコンテキストを使用してグラウンディングされた回答を生成します。例については、生成をご覧ください。

次のステップ