Google 検索でグラウンディングする

このページでは、一般公開されているウェブデータを使用する Google 検索を使用してモデルのレスポンスをグラウンディングする方法について説明します。

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

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

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

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

このセクションでは、検索によるグラウンディングをサポートするモデルを示します。各モデルが根拠のあるレスポンスを生成する方法を確認する手順は次のとおりです。

  1. Google Cloud コンソールで、この表に記載されているモデルを試します。

  2. [Grounding] をオンに切り替えます。

モデル 説明 モデルを試す
Gemini 1.5 Pro
テキスト入力のみ Gemini 1.5 Pro モデルを試す
Gemini 1.5 Flash
テキスト入力のみ Gemini 1.5 Flash モデルを試す
Gemini 1.0 Pro
テキスト入力のみ Gemini 1.0 Pro モデルを試す
Gemini 2.0 Flash

テキスト、コード、画像、音声、動画、音声付き動画、PDF

動的取得はサポートされていません。詳細については、考慮事項をご覧ください。

Gemini 2.0 Flash モデルを試す

サポートされている言語

サポートされている言語の一覧については、言語をご覧ください。

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

動的取得

リクエストで動的取得を使用すると、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 万件のクエリが上限となります。その他のクエリが必要な場合は、Google Cloud サポートにお問い合わせください。

  • 動的取得は、Gemini 1.0 モデルと Gemini 1.5 モデルでのみサポートされています。Gemini 2.0 モデルは動的取得をサポートしていません。

Console

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

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

    Vertex AI Studio に移動

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

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

Node.js

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

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

  • LOCATION: リクエストを処理するリージョン。

  • PROJECT_ID: プロジェクト ID。

  • MODEL_ID: マルチモーダル モデルのモデル ID。動的取得をサポートするのは、Gemini 1.0 モデルと Gemini 1.5 モデルのみです。Gemini 2.0 モデルは動的取得をサポートしていません。

  • TEXT: プロンプトに含める指示のテキスト。

  • DYNAMIC_THRESHOLD: 動的取得の構成を呼び出すしきい値を設定するオプション フィールド。これは、[0,1] の範囲内の浮動小数点値です。dynamicThreshold フィールドを設定しない場合は、しきい値はデフォルトで 0.7 になります。

  const {VertexAI} = require('@google-cloud/vertexai');

  // Initialize Vertex with your Cloud project and location
  const vertex_ai = new VertexAI({project: PROJECT_ID, location: LOCATION});
  const model = MODEL_ID;

  // Instantiate the models
  const generativeModel = vertex_ai.preview.getGenerativeModel({
    model: model,
    generationConfig: {
      'maxOutputTokens': 8192,
      'temperature': 1,
      'topP': 0.95,
    },
    safetySettings: [
      {
        'category': 'HARM_CATEGORY_HATE_SPEECH',
        'threshold': 'OFF',
      },
      {
        'category': 'HARM_CATEGORY_DANGEROUS_CONTENT',
        'threshold': 'OFF',
      },
      {
        'category': 'HARM_CATEGORY_SEXUALLY_EXPLICIT',
        'threshold': 'OFF',
      },
      {
        'category': 'HARM_CATEGORY_HARASSMENT',
        'threshold': 'OFF',
      }
    ],
    tools: [
      {
        googleSearchRetrieval: {
          dynamicRetrievalConfig: {
              mode: "MODE_DYNAMIC",
              dynamicThreshold: DYNAMIC_THRESHOLD
          }
        },
      },
    ],
  });

  async function generateContent() {
    const req = {
      contents: [
        {role: 'user', parts: [{text: `TEXT`}]}
      ],
    };

    const streamingResp = await generativeModel.generateContentStream(req);

    for await (const item of streamingResp.stream) {
      process.stdout.write('stream chunk: ' + JSON.stringify(item) + '\n');
    }

    process.stdout.write('aggregated response: ' + JSON.stringify(await streamingResp.response));
  }

  generateContent();

Vertex AI SDK for Python

Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、 Vertex AI SDK for 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(
        # Optional: For Dynamic Retrieval
        dynamic_retrieval_config=grounding.DynamicRetrievalConfig(
            dynamic_threshold=0.7,
        )
    )
)

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**.

REST

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

  • LOCATION: リクエストを処理するリージョン。
  • PROJECT_ID: 実際のプロジェクト ID
  • MODEL_ID: マルチモーダル モデルのモデル ID。動的取得は、Gemini 1.0 モデルと Gemini 1.5 モデルでのみサポートされています。Gemini 2.0 モデルは動的取得をサポートしていません。
  • 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 または API から Google 検索にモデル プロンプトが正常にグラウンディングされた場合、レスポンスにはソースリンク(ウェブ URL)を含むメタデータが含まれます。ただし、このメタデータが提供されず、プロンプト レスポンスがグラウンディングされない場合もあります。その理由はいくつかあります。たとえば、ソースの関連性が低い、モデルのレスポンス内の情報が不完全である、などです。

引用

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

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

引用の例

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

お客様が Google 検索で Grounding を使用している場合でも、お客様は代替の検索エンジン オプションを提供したり、代替の検索オプションをお客様のアプリケーションのデフォルト オプションにしたり、お客様のアプリケーションに独自の検索候補やサードパーティの検索候補や検索結果を表示したりできます。ただし、Google 検索以外のサービスや関連する結果は、Grounding の結果や検索候補とは別に表示され、Google が提供する結果と合理的に関連付けられないか、混同されないものでなければなりません。

次のステップ