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 を有効にする

次のサンプルコードは、curl コマンドと Vertex AI SDK for Python を使用して REST を使用して高度な解析を有効にする方法を示しています。

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/v1beta1/projects/PROJECT_ID/locations/LOCATION/ragCorpora/RAG_CORPUS_ID/ragFiles:import

JSON 本文のリクエスト:

{
  "import_rag_files_config": {
    "gcs_source": {
      "uris": GCS_URIS
    },
    "file_parsing_config": {
      "layout_parser": {
        "processor_name": "LAYOUT_PARSER_PROCESSOR_NAME"
      }
    },
    "rag_file_chunking_config": {
      "chunk_size": CHUNK_SIZE
    },
  }
}

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

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

curl -X POST \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/ragCorpora/RAG_CORPUS_ID/ragFiles:import"

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.preview import rag
import vertexai

PROJECT_ID = "PROJECT_ID"
corpus_name = "projects/<var>PROJECT_ID</var>/locations/LOCATION/ragCorpora/RAG_CORPUS_ID"
# paths = ["https://drive.google.com/file/123", "GCS_URIS"]
# Supports Cloud Storage and Google Drive Links
layout_parser_processor_name = "projects/PROJECT_ID/locations/<var>LOCATION</var>/processors/LAYOUT_PARSER_PROCESSOR_NAME"

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

response = rag.import_files(
    corpus_name=RAG_CORPUS_ID,
    paths=paths,
    chunk_size=512,  # Optional
    chunk_overlap=100,  # Optional
    max_embedding_requests_per_min=900,  # Optional
    layout_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 コーパスがない場合は、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/v1beta1/projects/PROJECT_ID/locations/LOCATION/ragCorpora/RAG_CORPUS_ID/ragFiles:import

JSON 本文のリクエスト:

{
  "import_rag_files_config": {
    "gcs_source": {
      "uris": "GCS_URIS"
    },
    "file_parsing_config": {
      "layout_parser": {
        "processor_name": "LAYOUT_PARSER_PROCESSOR_NAME"
      }
    },
    "rag_file_chunking_config": {
      "chunk_size": CHUNK_SIZE
    },
  }
}

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

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

curl -X POST \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/ragCorpora/RAG_CORPUS_ID/ragFiles:import"

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.preview 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,
    chunk_size=512,  # Optional
    chunk_overlap=100,  # Optional
    max_embedding_requests_per_min=900,  # Optional
    layout_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 ファイルを取得する例については、取得クエリをご覧ください。

予測

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

次のステップ