Gemini モデルの回答のグラウンディングを行う

このページでは、Vertex AI でモデルの回答をグラウンディングする 2 つの方法と、Grounding API を使用してアプリケーションでグラウンディングを機能させる方法について説明します。

Vertex AI では、次のデータソースを使用してモデル出力をグラウンディングできます。

  • Google 検索: 一般公開されているウェブデータを使用して回答のグラウンディングを行います。
  • お客様のデータ: Vertex AI Search(プレビュー)からお客様のデータを使用して回答のグラウンディングを行います。

Google 検索によるグラウンディング

モデルを世界中の知識、幅広いトピック、インターネット上の最新情報に接続する場合は、Google 検索によるグラウンディングを使用します。

Google 検索によるグラウンディングでは、動的取得がサポートされているため、必要な場合にのみ Google 検索でグラウンディングされた回答を生成できます。そのため、動的取得が構成されている場合は、プロンプトで最近のイベントに関する知識が必要かどうかを評価し、Google 検索によるグラウンディングを有効にします。詳細については、動的取得をご覧ください。

Vertex AI でのモデルのグラウンディングの詳細については、グラウンディングの概要をご覧ください。

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

次のモデルはグラウンディングに対応しています。

  • Gemini 1.5 Pro(テキスト入力のみ)
  • Gemini 1.5 Flash(テキスト入力のみ)
  • Gemini 1.0 Pro(テキスト入力のみ)

サポートされている言語

  • English (en)
  • スペイン語(es)
  • 日本語(ja)

一般公開されているウェブデータを使用してモデルのグラウンディングを行うには、次の手順を使用します。

動的取得

リクエストで動的取得を使用すると、Google 検索でグラウンディングをオフにするタイミングを選択できます。これは、プロンプトで Google 検索による回答のグラウンディングが不要で、サポートされているモデルがグラウンディングなしで独自の知識を基に回答を提供できる場合に便利です。これにより、レイテンシ、品質、コストをより効果的に管理できます。

リクエストで動的取得の構成を呼び出す前に、次の用語を把握してください。

  • 予測スコア: グラウンディングされた回答をリクエストすると、Vertex AI はプロンプトに予測スコアを割り当てます。予測スコアは、[0,1] の範囲内の浮動小数点値です。その値は、プロンプトが Google 検索から得た最新の情報に基づいて回答をグラウンディングできるかどうかによって変化します。そのため、ウェブ上の最新の事実でグラウンディングされた回答が必要なプロンプトでは、予測スコアが高くなります。モデルで生成された回答で十分なプロンプトの場合、予測スコアは低くなります。

    以下に、いくつかのプロンプトとその予測スコアの例を示します。

    プロンプト 予測スコア コメント
    「牡丹についての詩を書いてください」 0.13 モデルは独自の知識を活用して回答でき、回答にグラウンディングは不要です
    「2 歳の子供向けのおもちゃを提案してください」 0.36 モデルは独自の知識を活用して回答でき、回答にグラウンディングは不要です
    「アジア風のグアカモーレのレシピを教えてください。」 0.55 Google 検索でグラウンディングされた回答を提供できますが、グラウンディングは厳密には必要ではなく、モデルの知識で十分な場合もあります
    「Agent Builder とは何ですか?Agent Builder でグラウンディングはどのように課金されますか?」 0.72 Google 検索で十分にグラウンディングされた回答を生成する必要があります
    「前回の F1 グランプリの優勝者は誰ですか?」 0.97 Google 検索で十分にグラウンディングされた回答を生成する必要があります
  • しきい値: リクエストで、しきい値を使用して動的取得の構成を指定できます。しきい値は [0,1] の範囲内の浮動小数点値で、デフォルトは 0.7 です。しきい値が 0 の場合、回答は常に Google 検索でグラウンディングされます。しきい値以外のすべての値には、次のことが適用されます。

    • 予測スコアがしきい値以上の場合、回答は Google 検索でグラウンディングされます。しきい値が低いほど、Google 検索によるグラウンディングを使用して生成された回答が含まれるプロンプトが増えます。
    • 予測スコアがしきい値未満の場合でも、モデルが回答を生成することがありますが、この場合、回答は Google 検索でグラウンディングされていません。

ビジネスニーズに合った適切なしきい値を見つけるには、想定される代表的なクエリのセットを作成します。次に、回答の予測スコアに基づいてクエリを並べ替え、ユースケースに適したしきい値を選択します。

考慮事項

  • Google 検索によるグラウンディングを使用するには、Google 検索の検索候補を有効にする必要があります。詳しくは、Google 検索の検索候補をご覧ください。

  • 最適な結果を得るには、0.0 の温度を使用します。この構成の詳細については、モデル リファレンスの Gemini API リクエスト本文をご覧ください。

  • Google 検索によるグラウンディングでは、1 日あたり 100 万件のクエリが上限となります。他にご不明な点がございましたら、サポートチームにお問い合わせください。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION: リクエストを処理するリージョン。
  • PROJECT_ID: 実際のプロジェクト ID
  • MODEL_ID: マルチモーダル モデルのモデル ID。
  • TEXT: プロンプトに含める指示のテキスト。
  • DYNAMIC_THRESHOLD: 動的取得の構成を呼び出すしきい値を設定するオプション フィールド。しきい値は [0,1] の範囲内の浮動小数点値です。dynamicThreshold フィールドを設定していない場合、しきい値はデフォルトで 0.7 になります。

HTTP メソッドと URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent

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

{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "TEXT"
    }]
  }],
  "tools": [{
    "googleSearchRetrieval": {
      "dynamicRetrievalConfig": {
        "mode": "MODE_DYNAMIC",
        "dynamicThreshold": DYNAMIC_THRESHOLD
      }
    }
  }],
  "model": "projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID"
}

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

次のような JSON レスポンスが返されます。

{
   "candidates": [
     {
       "content": {
         "role": "model",
         "parts": [
           {
             "text": "Chicago weather changes rapidly, so layers let you adjust easily. Consider a base layer, a warm mid-layer (sweater-fleece), and a weatherproof outer layer."
           }
         ]
       },
       "finishReason": "STOP",
       "safetyRatings":[
       "..."
    ],
       "groundingMetadata": {
         "webSearchQueries": [
           "What's the weather in Chicago this weekend?"
         ],
         "searchEntryPoint": {
            "renderedContent": "....................."
         }
         "groundingSupports": [
            {
              "segment": {
                "startIndex": 0,
                "endIndex": 65,
                "text": "Chicago weather changes rapidly, so layers let you adjust easily."
              },
              "groundingChunkIndices": [
                0
              ],
              "confidenceScores": [
                0.99
              ]
            },
          ]
          "retrievalMetadata": {
              "webDynamicRetrievalScore": 0.96879
            }
       }
     }
   ],
   "usageMetadata": { "..."
   }
 }

コンソール

Vertex AI Studio で Google 検索を使用してグラウンディングを使用する手順は次のとおりです。

  1. Google Cloud コンソールで、[Vertex AI Studio] ページに移動します。

    Vertex AI Studio に移動

  2. [自由形式] タブをクリックします。
  3. サイドパネルで [モデルの回答をグラウンディング] 切り替えボタンをクリックします。
  4. [カスタマイズ] をクリックし、Google 検索をソースとして設定します。
  5. テキスト ボックスにプロンプトを入力し、[送信] をクリックします。

プロンプトのレスポンスが Google 検索でグラウンディングされるようになりました。

Python

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

import vertexai

from vertexai.generative_models import (
    GenerationConfig,
    GenerativeModel,
    Tool,
    grounding,
)

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-001")

# Use Google Search for grounding
tool = Tool.from_google_search_retrieval(grounding.GoogleSearchRetrieval())

prompt = "When is the next total solar eclipse in US?"
response = model.generate_content(
    prompt,
    tools=[tool],
    generation_config=GenerationConfig(
        temperature=0.0,
    ),
)

print(response.text)
# Example response:
# The next total solar eclipse visible from the contiguous United States will be on **August 23, 2044**.

回答を理解する

Vertex AI Studio または API から Google 検索にモデル プロンプトが正常にグラウンディングされた場合、レスポンスにはソースリンク(ウェブ URL)を含むメタデータが含まれます。ただし、このメタデータが提供されず、プロンプト レスポンスがグラウンディングされない場合もあります。その理由はいくつかあります。たとえば、ソースの関連性が低い、モデルのレスポンス内の情報が不完全である、などです。

引用

引用を表示することを強くおすすめします。ユーザーは、パブリッシャーからのレスポンスを検証し、さらに学習するための手段を追加できます。

Google 検索ソースからのレスポンスの引用は、インラインと集計の両方で表示する必要があります。次の画像は、この方法の例を示しています。

引用の例

代替の検索エンジン オプションの使用

お客様が Google 検索によるグラウンディングを使用する場合でも、お客様は、代替の検索エンジン オプションを提供すること、代替の検索オプションをお客様のアプリケーションのデフォルト オプションにすること、お客様独自またはサードパーティの検索候補や検索結果をお客様のアプリケーションに表示することはできます。ただし、Google 以外の検索サービスや関連する検索結果は、グラウンディングされた検索結果や検索候補とは別に表示され、Google が提供する検索結果と混同されないようにする必要があります。

Gemini の回答をグラウンディングする

このセクションでは、Vertex AI API を使用して、テキストの回答を Vertex AI Agent Builder データストアにグラウンディングする方法について説明します。

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

次のモデルはグラウンディングに対応しています。

  • Gemini 1.5 Pro(テキスト入力のみ)
  • Gemini 1.5 Flash(テキスト入力のみ)
  • Gemini 1.0 Pro(テキスト入力のみ)

前提条件

モデル出力をデータにグラウンディングする前に、次の前提条件を満たす必要があります。

  1. Vertex AI Agent Builder を有効にして API を有効にする。
  2. Vertex AI Agent Builder のデータソースとアプリを作成する。
  3. Vertex AI Agent Builder でデータストアをアプリにリンクする。データソースは、Vertex AI で Gemini 1.0 Pro のグラウンディングを行うための基盤として機能します。
  4. データストアで Enterprise エディションを有効にする。

詳細については、Vertex AI Search の概要をご覧ください。

Vertex AI Agent Builder を有効にする

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. 利用規約を読んで同意し、[続行して API を有効にする] をクリックします。

Vertex AI Agent Builder は、global ロケーション、または euus のマルチリージョンで使用できます。詳細については、Vertex AI Agent Builder のロケーションをご覧ください。

Vertex AI Agent Builder でデータストアを作成する

モデルをソースデータにグラウンディングするには、データを準備して Vertex AI Search に保存する必要があります。これを行うには、Vertex AI Agent Builder でデータストアを作成する必要があります。

ゼロから始める場合は、Vertex AI Agent Builder に取り込むためにデータを準備する必要があります。開始するには、取り込むデータを準備するをご覧ください。取り込みには、データのサイズに応じて、数分から数時間かかることがあります。グラウンディングでは、非構造化データストアのみサポートされています。

取り込むデータを準備したら、検索データストアを作成できます。データストアが正常に作成されたら、それに結びつける検索アプリを作成し、Enterprise エディションを有効にします。

例: Gemini 1.5 Flash モデルのグラウンディングを行う

独自のデータでモデルをグラウンディングするには、次の手順を用います。

データストア ID がわからない場合は、次の操作を行います。

  1. Google Cloud コンソールで [Vertex AI Agent Builder] ページに移動し、ナビゲーション メニューで [データストア] をクリックします。

    [データストア] ページに移動

  2. データストアの名前をクリックします。

  3. データストアの [データ] ページで、データストア ID を取得します。

REST

Vertex AI API を使用してテキスト プロンプトをテストするには、パブリッシャー モデル エンドポイントに POST リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION: リクエストを処理するリージョン。
  • PROJECT_ID: 実際のプロジェクト ID
  • MODEL_ID: マルチモーダル モデルのモデル ID。
  • TEXT: プロンプトに含める指示のテキスト。

HTTP メソッドと URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent

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

{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "TEXT"
    }]
  }],
  "tools": [{
    "retrieval": {
      "vertexAiSearch": {
        "datastore": projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID
      }
    }
  }],
  "model": "projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID"
}

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

次のような JSON レスポンスが返されます。

{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [
          {
            "text": "You can make an appointment on the website https://dmv.gov/"
          }
        ]
      },
      "finishReason": "STOP",
      "safetyRatings": [
        "..."
      ],
      "groundingMetadata": {
        "retrievalQueries": [
          "How to make appointment to renew driving license?"
        ],
        "groundingChunks": [
          {
            "retrievedContext": {
              "uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/AXiHM.....QTN92V5ePQ==",
              "title": "dmv"
            }
          }
        ],
        "groundingSupport": [
          {
            "segment": {
              "startIndex": 25,
              "endIndex": 147
            },
            "segment_text": "ipsum lorem ...",
            "supportChunkIndices": [1, 2],
            "confidenceScore": [0.9541752, 0.97726375]
          },
          {
            "segment": {
              "startIndex": 294,
              "endIndex": 439
            },
            "segment_text": "ipsum lorem ...",
            "supportChunkIndices": [1],
            "confidenceScore": [0.9541752, 0.9325467]
          }
        ]
      }
    }
  ],
  "usageMetadata": {
    "..."
  }
}

Google 検索でグラウンディングされた回答を理解する

グラウンディングされた結果が生成されると、メタデータには、グラウンディングされた結果の生成に使用したコンテンツのパブリッシャーにリダイレクトする URI が付与されます。メタデータにはパブリッシャーのドメインも付与されます。付与された URI には、グラウンディングされた結果の生成後 30 日間アクセスできます。

Python

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

import vertexai

from vertexai.preview.generative_models import (
    GenerationConfig,
    GenerativeModel,
    Tool,
    grounding,
)

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# data_store_id = "your-data-store-id"

vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-001")

tool = Tool.from_retrieval(
    grounding.Retrieval(
        grounding.VertexAISearch(
            datastore=data_store_id,
            project=PROJECT_ID,
            location="global",
        )
    )
)

prompt = "How do I make an appointment to renew my driver's license?"
response = model.generate_content(
    prompt,
    tools=[tool],
    generation_config=GenerationConfig(
        temperature=0.0,
    ),
)

print(response.text)

コンソール

Google Cloud コンソールで Vertex AI Studio を使用してモデル出力を Vertex AI Agent Builder にグラウンディングするには、次の操作を行います。

  1. Google Cloud コンソールで、[Vertex AI Studio] ページに移動します。

    Vertex AI Studio に移動

  2. [自由形式] タブをクリックします。
  3. サイドパネルで [モデルの回答をグラウンディング] 切り替えボタンをクリックして、グラウンディングを有効にします。
  4. [カスタマイズ] をクリックし、Vertex AI Agent Builder をソースとして設定します。パスは projects/project_id/locations/global/collections/default_collection/dataStores/data_store_id の形式にする必要があります。
  5. テキスト ボックスにプロンプトを入力し、[送信] をクリックします。

プロンプトの回答が Vertex AI Agent Builder にグラウンディングされるようになりました。

その他の生成 AI リソース