LLM パーサーを使用する

このページでは、Vertex AI RAG Engine LLM パーサーを使用する方法について説明します。

はじめに

Vertex AI RAG Engine は、ドキュメント解析に LLM を使用します。LLM は、次のようにドキュメントを効果的に処理できます。

  • さまざまな形式のセマンティック コンテンツを理解して解釈します。
  • 関連するドキュメント チャンクを取得します。
  • ドキュメントから有意な情報を抽出します。
  • ドキュメント内の関連するセクションを特定します。
  • 複雑なドキュメントを正確に要約します。
  • ビジュアルを理解して操作する。
  • グラフや図からデータを抽出します。
  • 画像の説明を入力します。
  • グラフとテキストの関係を理解する。
  • よりコンテキストに即した正確なレスポンスを提供します。

Vertex AI RAG Engine の機能により、生成される回答の品質が大幅に向上します。

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

LLM パーサーは Gemini モデルのみをサポートします。RAG API が有効になっている場合は、サポートされているモデルにアクセスできます。サポートされている生成モデルの一覧については、生成モデルをご覧ください。

サポートされているファイル形式

LLM パーサーは、次のファイル形式をサポートしています。

  • application/pdf
  • image/png
  • image/jpeg
  • image/webp
  • image/heic
  • image/heif

料金と割り当て

料金の詳細については、Vertex AI の料金をご覧ください。

適用される割り当てについては、割り当てをリクエストするをご覧ください。

LLM パーサーは Gemini モデルを呼び出してドキュメントを解析します。これにより追加費用が発生し、プロジェクトに請求されます。費用は次の式で概算できます。

cost = number_of_document_files * average_pages_per_document *
(average_input_tokens * input_token_pricing_of_selected_model +
average_output_tokens * output_token_pricing_of_selected_model)

たとえば、1,000 個の PDF ファイルがあり、各 PDF ファイルに 50 ページある場合、平均的な PDF ページには 500 個のトークンが含まれており、プロンプトにはさらに 100 個のトークンが必要です。平均出力は 100 トークンです。

構成でパース用に Gemini 2.0 Flash-Lite が使用されます。100 万個の入力トークンの場合は 0.075 ドル、出力テキスト トークンの場合は 0.3 ドルの費用がかかります。

cost = 1,000 * 50 * (600 * 0.075 / 1M + 100 * 0.3 / 1M) = 3.75

料金は 375 円です。

LlmParser を有効にしてファイルをインポートする

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

  • PROJECT_ID: Google Cloud プロジェクトの ID。
  • LOCATION: リクエストが処理されるリージョン。
  • RAG_CORPUS_RESOURCE: コーパスの ID。
  • GCS_URI: インポートするファイルの Cloud Storage URI。
  • GOOGLE_DRIVE_URI: インポートするファイルの Google ドライブ URI。
  • MODEL_NAME: 解析に使用されるモデルのリソース名。

    形式: projects/{project_id}/locations/{location}/publishers/google/models/{model_id}

  • CUSTOM_PARSING_PROMPT: 省略可: LLM パーサーがドキュメントの解析に使用するカスタム プロンプト。
  • MAX_PARSING_REQUESTS_PER_MIN: 省略可。ジョブが Vertex AI モデルに対して 1 分あたりに実行できるリクエストの最大数。詳細については、Vertex AI の生成 AI のレート上限と、プロジェクトの割り当てとシステムの上限のページで適切な値を設定してください。

REST

  curl -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/ragCorpora/RAG_CORPUS_RESOURCE/ragFiles:import" -d '{
    "import_rag_files_config": {
      "gcs_source": {
        "uris":  ["GCS_URI", "GOOGLE_DRIVE_URI"]
      },
      "rag_file_chunking_config": {
        "chunk_size": 512,
        "chunk_overlap": 102
      },
      "rag_file_parsing_config": {
        "llm_parser": {
          "model_name": "MODEL_NAME",
          "custom_parsing_prompt": "CUSTOM_PARSING_PROMPT"
          "max_parsing_requests_per_min": "MAX_PARSING_REQUESTS_PER_MIN"
        }
      }
    }
  }'

Python

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

  from vertexai.preview import rag
  import vertexai

  PROJECT_ID = "PROJECT_ID"
  CORPUS_NAME = "RAG_CORPUS_RESOURCE"
  LOCATION = "LOCATION"
  MODEL_ID = "MODEL_ID"
  MODEL_NAME = "projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/{MODEL_ID}"
  MAX_PARSING_REQUESTS_PER_MIN = MAX_PARSING_REQUESTS_PER_MIN # Optional
  CUSTOM_PARSING_PROMPT = "Your custom prompt" # Optional

  PATHS = ["https://drive.google.com/file/123", "gs://my_bucket/my_files_dir"]

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

  transformation_config = rag.TransformationConfig(
      chunking_config=rag.ChunkingConfig(
          chunk_size=1024, # Optional
          chunk_overlap=200, # Optional
      ),
  )

  llm_parser_config = rag.LlmParserConfig(
      model_name = MODEL_NAME,
      max_parsing_requests_per_min=MAX_PARSING_REQUESTS_PER_MIN, # Optional
      custom_parsing_prompt=CUSTOM_PARSING_PROMPT, # Optional
  )

  rag.import_files(
      CORPUS_NAME,
      PATHS,
      llm_parser=llm_parser_config,
      transformation_config=transformation_config,
  )

プロンプト

Vertex AI RAG Engine LLM パーサーは、事前定義されチューニングされたプロンプトを使用してドキュメントを解析します。ただし、一般的なプロンプトに適さない特殊なドキュメントがある場合は、API の使用時にカスタム解析プロンプトを指定できます。ドキュメントの解析を Gemini にリクエストすると、Vertex AI RAG Engine はデフォルトのシステム プロンプトにプロンプトを追加します。

プロンプト テンプレートの表

ドキュメントの解析に役立つように、次の表に、Vertex AI RAG Engine がドキュメントの解析に使用できるプロンプトの作成をガイドするプロンプト テンプレートの例を示します。

手順 テンプレート ステートメント
ロールを指定します。 あなたは [役割を指定します(事実データ抽出者、情報取得者など)] です。 情報取得者である。
タスクを指定します。 [ドキュメントのソース(ドキュメント、テキスト、記事、画像、表など)を指定] から [情報の種類(事実の記述、主要なデータ、具体的な詳細など)を指定] を抽出します。 sample.txt ファイルからキーデータを抽出します。
ドキュメントに応じて LLM が出力を生成する方法を説明します。 各事実を [出力形式を指定(構造化リスト、テキスト形式など)] で表示し、[出力元の場所を指定(ページ、段落、表、行など)] にリンクします。 各事実を構造化されたリストで提示し、サンプルページへのリンクを設定します。
LLM の焦点となるべき内容をハイライトします。 [名前、日付、数値、属性、関係など、主要なデータ型を指定] を指定されたとおりに抽出します。 名前と日付を抽出します。
LLM で回避する内容をハイライト表示します。 [分析、解釈、要約、推測、意見の表明など、避けるべき行動を列挙します]。ドキュメントに明記されている内容のみを抽出します。 自分の意見を述べないでください。ドキュメントに明記されている内容のみを抽出します。

一般的なガイドライン

LLM パーサーに送信するプロンプトを記述する際は、次のガイドラインに従ってください。

  • 具体的: タスクと抽出する情報の種類を明確に定義します。
  • 詳細: 出力形式、ソースの帰属、さまざまなデータ構造の処理について詳細な手順を記載します。
  • 制約: 分析や解釈など、AI が行わないことを明示的に指定します。
  • 明確: 明確で指示的な表現を使用します。
  • 構造化: 番号付きリストや箇条書きを使用して手順を論理的に整理し、読みやすくします。

解析品質の分析

次の表に、Vertex AI RAG Engine を使用してお客様が実行したシナリオの結果を示します。フィードバックは、LLM パーサーがドキュメントの解析品質を向上させていることを示しています。

シナリオ 結果
スライド間での情報の解析とセクションのリンク LLM パーサーが、1 つのスライドのセクション タイトルを、後続のスライドで表示される詳細情報に正常にリンクしました。
テーブルからの情報の理解と抽出 LLM パーサーは、特定の質問に回答するために、大規模な表内の列とヘッダーを正しく関連付けました。
フローチャートの解釈 LLM パーサーはフローチャート内のロジックに沿って、正しい一連のアクションと対応する情報を抽出できました。
グラフからのデータの抽出 LLM パーサーは、折れ線グラフなどのさまざまな種類のグラフを解釈し、クエリに基づいて特定のデータポイントを抽出できます。
見出しとテキストの関係をキャプチャする LLM パーサーは、プロンプトに基づいて見出しの構造に注意を払い、特定のトピックやセクションに関連するすべての情報を取得できました。
プロンプト エンジニアリングでエンベディングの制限を克服できる可能性 一部のユースケースでは、エンベディング モデルの制限により当初は妨げられましたが、追加のテストにより、適切に作成された LLM パーサー プロンプトを使用すると、エンベディング モデルだけでは意味理解が困難な場合でも、これらの問題を軽減し、正しい情報を取得できることが示されました。

LLM パーサーは、ドキュメント内のコンテキストを理解して推論する LLM の能力を強化し、より正確で包括的なレスポンスを生成します。

取得クエリ

生成 AI モデルに送信されるプロンプトを入力すると、RAG の検索コンポーネントがナレッジベースを検索し、クエリに関連する情報を探します。クエリテキストに基づいてコーパスから RAG ファイルを取得する例については、取得クエリをご覧ください。

次のステップ