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

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

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

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

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

このセクションでは、検索によるグラウンディングをサポートするモデルを一覧表示します。

クリックしてサポートされているモデルを開く

サポートされている言語

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

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

考慮事項

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

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

  • Google 検索によるグラウンディングでは、1 日あたり 100 万件のクエリが上限となります。さらにクエリが必要な場合は、Google Cloud サポートにお問い合わせください。

緯度と経度の座標を使用して、エンドユーザーの特定の地理的位置に合わせて検索結果をカスタマイズできます。詳細については、グラウンディング API をご覧ください。

コンソール

Gemini Enterprise Agent Platform の Agent Studio で Google 検索によるグラウンディングを使用する手順は次のとおりです。

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

    Agent Studio に移動

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

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

Python

インストール

pip install --upgrade google-genai

詳しくは、SDK リファレンス ドキュメントをご覧ください。

Vertex AI で Gen AI SDK を使用するための環境変数を設定します。

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_ENTERPRISE=True

from google import genai
from google.genai.types import (
    GenerateContentConfig,
    GoogleSearch,
    HttpOptions,
    Tool,
)

client = genai.Client(http_options=HttpOptions(api_version="v1"))

response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents="When is the next total solar eclipse in the United States?",
    config=GenerateContentConfig(
        tools=[
            # Use Google Search Tool
            Tool(
                google_search=GoogleSearch(
                    # Optional: Domains to exclude from results
                    exclude_domains=["domain.com", "domain2.com"]
                )
            )
        ],
    ),
)

print(response.text)
# Example response:
# 'The next total solar eclipse in the United States will occur on ...'

Go

Go をインストールまたは更新する方法について学びます。

詳しくは、SDK リファレンス ドキュメントをご覧ください。

Vertex AI で Gen AI SDK を使用するための環境変数を設定します。

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_ENTERPRISE=True

import (
	"context"
	"fmt"
	"io"

	genai "google.golang.org/genai"
)

// generateWithGoogleSearch shows how to generate text using Google Search.
func generateWithGoogleSearch(w io.Writer) error {
	ctx := context.Background()

	client, err := genai.NewClient(ctx, &genai.ClientConfig{
		HTTPOptions: genai.HTTPOptions{APIVersion: "v1"},
	})
	if err != nil {
		return fmt.Errorf("failed to create genai client: %w", err)
	}

	modelName := "gemini-2.5-flash"
	contents := []*genai.Content{
		{Parts: []*genai.Part{
			{Text: "When is the next total solar eclipse in the United States?"},
		},
			Role: genai.RoleUser},
	}
	config := &genai.GenerateContentConfig{
		Tools: []*genai.Tool{
			{GoogleSearch: &genai.GoogleSearch{ExcludeDomains: []string{"example.com", "example.org"}}},
		},
	}

	resp, err := client.Models.GenerateContent(ctx, modelName, contents, config)
	if err != nil {
		return fmt.Errorf("failed to generate content: %w", err)
	}

	respText := resp.Text()

	fmt.Fprintln(w, respText)

	// Example response:
	// The next total solar eclipse in the United States will occur on March 30, 2033, but it will only ...

	return nil
}

Java

Java をインストールまたは更新します。

詳しくは、SDK リファレンス ドキュメントをご覧ください。

Vertex AI で Gen AI SDK を使用するための環境変数を設定します。

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_ENTERPRISE=True


import com.google.genai.Client;
import com.google.genai.types.GenerateContentConfig;
import com.google.genai.types.GenerateContentResponse;
import com.google.genai.types.GoogleSearch;
import com.google.genai.types.HttpOptions;
import com.google.genai.types.Tool;

public class ToolsGoogleSearchWithText {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String modelId = "gemini-2.5-flash";
    generateContent(modelId);
  }

  // Generates content with Google Search tool
  public static String generateContent(String modelId) {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (Client client =
        Client.builder()
            .location("global")
            .vertexAI(true)
            .httpOptions(HttpOptions.builder().apiVersion("v1").build())
            .build()) {

      // Create a GenerateContentConfig and set Google Search tool
      GenerateContentConfig contentConfig =
          GenerateContentConfig.builder()
              .tools(Tool.builder().googleSearch(GoogleSearch.builder().build()).build())
              .build();

      GenerateContentResponse response =
          client.models.generateContent(
              modelId, "When is the next total solar eclipse in the United States?", contentConfig);

      System.out.print(response.text());
      // Example response:
      // The next total solar eclipse in the United States will occur on...
      return response.text();
    }
  }
}

Node.js

インストール

npm install @google/genai

詳しくは、SDK リファレンス ドキュメントをご覧ください。

Vertex AI で Gen AI SDK を使用するための環境変数を設定します。

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_ENTERPRISE=True

const {GoogleGenAI} = require('@google/genai');

const GOOGLE_CLOUD_PROJECT = process.env.GOOGLE_CLOUD_PROJECT;
const GOOGLE_CLOUD_LOCATION = process.env.GOOGLE_CLOUD_LOCATION || 'global';

async function generateGoogleSearch(
  projectId = GOOGLE_CLOUD_PROJECT,
  location = GOOGLE_CLOUD_LOCATION
) {
  const client = new GoogleGenAI({
    vertexai: true,
    project: projectId,
    location: location,
  });

  const response = await client.models.generateContent({
    model: 'gemini-2.5-flash',
    contents: 'When is the next total solar eclipse in the United States?',
    config: {
      tools: [
        {
          googleSearch: {},
        },
      ],
    },
  });

  console.log(response.text);

  // Example response:
  //    'The next total solar eclipse in United States will occur on ...'

  return response.text;
}

REST

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

  • LOCATION: リクエストを処理するリージョン。グローバル エンドポイントを使用するには、エンドポイント名からロケーションを除外し、リソースのロケーションをグローバルに構成します。
  • PROJECT_ID: [プロジェクト ID](/resource-manager/docs/creating-managing-projects#identifiers)。.
  • MODEL_ID: マルチモーダル モデルのモデル ID。
  • TEXT: プロンプトに含める指示のテキスト。
  • EXCLUDE_DOMAINS: 省略可。グラウンディングに使用しないドメインのリスト。
  • LATITUDE: 省略可。エンドユーザーの場所の緯度。たとえば、緯度 37.7749 はサンフランシスコを表します。緯度と経度の座標は、Google マップなどのサービスや他のジオコーディング ツールを使用して取得できます。
  • LONGITUDE: 省略可。エンドユーザーの場所の経度。たとえば、経度 -122.4194 はサンフランシスコを表します。

HTTP メソッドと URL:

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

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

{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "TEXT"
    }]
  }],
  "tools": [{
    "googleSearch": {
      "exclude_domains": [ "domain.com", "domain2.com" ]
    }
  }],
  "toolConfig": {
    "retrievalConfig": {
      "latLng": {
        "latitude": LATITUDE,
        "longitude": LONGITUDE
      }
    }
  },
  "model": "projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID"
}

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

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

{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [
          {
            "text": "The weather in Chicago this weekend, will be partly cloudy. The temperature will be between 49°F (9°C) and 55°F (13°C) on Saturday and between 51°F (11°C) and 56°F (13°C) on Sunday. There is a slight chance of rain on both days.\n"
          }
        ]
      },
      "finishReason": "STOP",
      "groundingMetadata": {
        "webSearchQueries": [
          "weather in Chicago this weekend"
        ],
        "searchEntryPoint": {
          "renderedContent": "..."
        },
        "groundingChunks": [
          {
            "web": {
              "uri": "https://www.google.com/search?q=weather+in+Chicago,+IL",
              "title": "Weather information for locality: Chicago, administrative_area: IL",
              "domain": "google.com"
            }
          },
          {
            "web": {
              "uri": "...",
              "title": "weatherbug.com",
              "domain": "weatherbug.com"
            }
          }
        ],
        "groundingSupports": [
          {
            "segment": {
              "startIndex": 85,
              "endIndex": 214,
              "text": "The temperature will be between 49°F (9°C) and 55°F (13°C) on Saturday and between 51°F (11°C) and 56°F (13°C) on Sunday."
            },
            "groundingChunkIndices": [
              0
            ],
            "confidenceScores": [
              0.8662828
            ]
          },
          {
            "segment": {
              "startIndex": 215,
              "endIndex": 261,
              "text": "There is a slight chance of rain on both days."
            },
            "groundingChunkIndices": [
              1,
              0
            ],
            "confidenceScores": [
              0.62836814,
              0.6488607
            ]
          }
        ],
        "retrievalMetadata": {}
      }
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 10,
    "candidatesTokenCount": 98,
    "totalTokenCount": 108,
    "trafficType": "ON_DEMAND",
    "promptTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 10
      }
    ],
    "candidatesTokensDetails": [
      {
        "modality": "TEXT",
        "tokenCount": 98
      }
    ]
  },
  "modelVersion": "gemini-2.0-flash",
  "createTime": "2025-05-19T14:42:55.000643Z",
  "responseId": "b0MraIMFoqnf-Q-D66G4BQ"
}

Google 画像検索によるグラウンディングを使用すると、モデルは Google 画像検索から取得したウェブ画像を、画像を生成する際の視覚的なコンテキストとして使用できます。Google 画像検索は、既存の Google 検索によるグラウンディング ツール内の新しい検索タイプであり、標準の Google ウェブ検索と並行して存在します。Google 画像検索によるグラウンディングは、Gemini 3.1 Flash Image モデルプレビューでのみ使用できます。

API リクエストの構成

Google 画像検索を有効にするには、API リクエストで googleSearch ツールを構成し、searchTypes オブジェクト内で imageSearch を指定します。Google 画像検索は、単独で使用することも、Google ウェブ検索と組み合わせて使用することもできます。

REST

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

  • LOCATION: リクエストを処理するリージョン。 グローバル エンドポイントを使用するには、エンドポイント名からロケーションを除外し、リソースのロケーションをグローバルに構成します。
  • PROJECT_ID: .
  • MODEL_ID: マルチモーダル モデルのモデル ID。
  • SEARCH_TERM: 画像の検索語句。
  • HTTP メソッドと URL:

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

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

    {
      "contents": [
        {
          "role": "user",
          "parts": [
            {
            "text": "SEARCH_TERM"
            }
          ]
        }
      ],
      "tools": [
        {
          "googleSearch": {
            "searchTypes": {
              "imageSearch": {},
              "webSearch": {}
            }
          }
        }
      ],
      "model": "projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID"
    }
    

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

    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/publishers/google/models/MODEL_ID:generateContent"

    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/publishers/google/models/MODEL_ID:generateContent" | Select-Object -Expand Content

    成功したことを示すステータス コード(2xx)と空のレスポンスが返されます。

表示の要件

Google 検索によるグラウンディングで Google 画像検索を使用する場合は、次の条件を遵守する必要があります。

  • ソースの帰属: ユーザーがリンクとして認識できる方法で、ソース画像を含むウェブページ(画像ファイル自体ではなく「含むページ」)へのリンクを提供する必要があります。

  • 直接ナビゲーション: ソース画像も表示する場合は、ソース画像からそのソース ウェブページへの直接のワンクリック パスを提供する必要があります。エンドユーザーが元のウェブページにアクセスするのを遅らせたり、抽象化したりする他の実装(複数回のクリックが必要なパスや、中間画像ビューアの使用など)は許可されません。

レスポンス

画像検索を使用するグラウンディングされたレスポンスの場合、API は明確な帰属とメタデータを提供し、出力を検証済みのソースにリンクします。groundingMetadata オブジェクトには次のフィールドが含まれます。

  • imageSearchQueries: モデルがビジュアル コンテキストに使用する特定のクエリ(「画像検索」とも呼ばれます)。

  • groundingChunks: 取得した結果のソース情報が含まれます。画像ソースの場合、これらは新しい画像チャンク タイプを使用してリダイレクト URL として返されます。チャンクには次のものが含まれます。

    • url: アトリビューション用のウェブページの URL(「ランディング ページ」とも呼ばれます)。
    • image_url: 画像の直接 URL。
  • groundingSupports: 生成されたコンテンツをチャンク内の関連する引用元にリンクする特定のマッピングを提供します。

  • searchEntryPoint: Google 検索候補をレンダリングするための準拠した HTML と CSS を含む Google 検索チップが含まれます。

レスポンスを理解する

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

文中の引用

インライン引用では、API から返された構造化された grounding_metadata を使用して、生成されたテキストの特定のセグメントを検証可能なソースにリンクします。

この機能は、検索、Google マップ、エージェント検索など、すべてのグラウンディング方法をサポートしています。これにより、アプリケーション内で正確なインタラクティブな引用を表示するために必要な正確なソースの詳細が提供されます。

response = client.models.generate_content(
   model="gemini-3.5-flash",
   contents="Where will the next FIFA World Cup be held?",
   config=types.GenerateContentConfig(
       tools=[types.Tool(google_search=types.GoogleSearch())],
   ),
)

display(Markdown(response.text))
print(response.candidates[0].grounding_metadata.grounding_chunks)
display(HTML(response.candidates[0].grounding_metadata.search_entry_point.rendered_content))

出力例:

…

Citations:
Wikipedia. "2026 FIFA World Cup." Retrieved February 11, 2026. (https://en.wikipedia.org/wiki/2026_FIFA_World_Cup)
US Soccer Players. "2026 FIFA World Cup FAQ — Dates, Hosts, Tickets, Teams & More." (https://ussoccerplayers.com/2026-fifa-world-cup-faq)
Holafly. "2026 World Cup host cities and countries: Full list of stadiums." (https://travel.holafly.com/esims/2026-world-cup-host-cities/)
…

グラウンディング サポート

グラウンディング サポートを表示する必要があります。パブリッシャーからのレスポンスを検証し、さらに学習するための手段を追加できます。

ウェブソースからのレスポンスのグラウンディング サポートは、インラインと集計の両方で表示する必要があります。たとえば、次の画像は、この方法の例を示しています。

グラウンディングのサポート例

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

Google 検索によるグラウンディングを使用する場合、お客様のアプリケーションは次のことができます。

  • 代替の検索エンジン オプションを提示する。
  • 他の検索エンジンをデフォルトのオプションにする。
  • 自社または第三者の検索候補や検索結果を表示する場合、Google 以外の結果は Google の Grounded Results や検索候補とは別に表示して、ユーザーの混乱や Google の結果であると誤解がないようにする必要があります。

利点

ツールとしての Google 検索によるグラウンディングを使用すると、計画、推論、思考を必要とする次の複雑なプロンプトとワークフローを実行できます。

  • グラウンディングを行うと、最新かつ最も正確な情報に基づいてレスポンスを生成できます。
  • ウェブからアーティファクトを取得して分析できます。
  • マルチモーダル推論やタスク生成を支援するために、関連する画像、動画、その他のメディアを見つけることができます。
  • コーディング、技術的なトラブルシューティング、その他の専門的なタスクを実行できます。
  • リージョン固有の情報の検索や、コンテンツの正確な翻訳をサポートできます。
  • 閲覧用の関連するウェブサイトを見つけることができます。

Google 検索の検索候補を使用する

Google 検索によるグラウンディングを使用し、回答で検索候補を受け取った場合は、本番環境とアプリケーションで検索候補を表示する必要があります。

具体的には、グラウンディングされた回答のメタデータに含まれる検索クエリを表示する必要があります。回答には次のものが含まれます。

  • "content": LLM によって生成された回答。
  • "webSearchQueries": Google 検索の検索候補に使用するクエリ。

たとえば、次のコード スニペットでは、熱帯植物の種類を尋ねる Google 検索のグラウンディングされたプロンプトに Gemini が応答しています。

"predictions": [
  {
    "content": "Monstera is a type of vine that thrives in bright indirect light…",
    "groundingMetadata": {
      "webSearchQueries": ["What's a monstera?"],
    }
  }
]

この出力は、Google 検索の検索候補を使用して表示できます。

検索候補の要件

検索候補には次のものが必要です。

要件 説明
すべきこと
  • 表示要件を遵守しながら、検索候補は厳密に提示され内容で変更されることなく表示されます。
  • Google 検索の検索候補を操作すると、検索結果ページ(SRP)に直接移動します。
禁止事項
  • ユーザーがタップしてから SRP が表示されるまでの間に画面や追加の手順を表示する。
  • Google 検索の検索候補または関連するグラウンディングされた LLM の回答の横に、他の検索結果や候補を表示する。

表示の要件

表示の要件は次のとおりです。

  • 検索候補は提示されたとおりに表示します。色、フォント、外観を変更しないでください。ライトモードやダークモードなど、次のモックで指定されているとおりに Google 検索の検索候補がレンダリングされるようにします。

  • グラウンディングされた回答を表示するたびに、対応する Google 検索の検索候補が常に表示されるようにする必要があります。
  • ブランディングについては、ブランド リソース センターへようこそに記載されている、Google ブランドの第三者による使用に関するガイドラインを厳守する必要があります。
  • Google 検索でグラウンディングを使用すると、Google 検索の検索候補チップが表示されます。検索候補チップを含むフィールドは、LLM のグラウンディングされた回答と同じ幅にする必要があります。

タップ時の動作

ユーザーがチップをタップしたときに、チップに表示されている検索キーワードの Google 検索結果ページ(SRP)に直接移動します。SRP は、アプリ内ブラウザまたは別のブラウザ アプリケーションで開くことができます。なんらかの方法で SRP の表示を最小化、削除しない、または妨げないようにすることが重要です。次のアニメーション モックアップは、タップして SRP を表示する操作を示しています。

タップ時の動作

app/desktop の例

Google 検索の検索候補を実装するためのコード

API を使用して検索に対する回答をグラウンディングすると、モデルの回答では renderedContent フィールドで遵守する HTML と CSS のスタイルが指定されます。これを実装すると、アプリで Google 検索の検索候補を表示できます。

なお、検索候補は以前は検索エントリー ポイントと呼ばれていました。一部の API フィールドで検索エントリー ポイントという用語が使用されている場合がありますが、どちらの用語も API レスポンスで受け取る現行の検索候補を指します。

以下は、検索に対するレスポンスをグラウンディングする curl の使用例です。

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://aiplatform.googleapis.com/v1/projects/PROJEC_ID/locations/global/publishers/google/models/gemini-3.5-flash:generateContent -d '{
    "contents": {
      "role": "user",
      "parts": {
        "text": "Why is the sky blue?"
      }
    },
    "tools": [
      {
        "googleSearch": {}
      }
    ]
  }'

Gemini 3 の料金変更

Gemini 3 モデルで Google 検索によるグラウンディングを使用している場合、Gemini によって生成され、検索に送信された検索クエリごとに課金が発生します。1 つのプロンプトから 1 つ以上の検索クエリが生成されることがあります。

この例では、課金対象となる可能性のあるユーザー プロンプトと検索クエリの例を示します。

  • ユーザー プロンプト: アインシュタインの生涯について教えて。
  • Gemini によって、次のような検索クエリが生成される可能性があります。
    • アルバート アインシュタインの誕生と幼少期の教育
    • アルバート アインシュタインの相対性理論
    • 米国でのアルバート アインシュタインの生活

この例では、これらの 3 つの検索クエリに対して課金されます。

次のステップ