◉GEMINI LABEN
●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…
記事一覧/高度な活用
⬡ 高度な活用/2026-03-11上級

Grounding with Google Search — Geminiの検索連携で回答精度を上げる

Gemini APIのGrounding with Google Search機能を使って、最新情報に基づいた正確な回答を生成する方法を詳しく解説。Dynamic Retrieval、ソース引用、コスト管理まで実践的にカバーします。

Gemini API248Grounding3Google SearchRAG15検索連携

Grounding とは

LLMの最大の弱点の一つが「ハルシネーション(幻覚)」です。モデルが学習データに基づいて回答するため、最新情報や事実と異なる回答を生成することがあります。

Grounding with Google Searchは、Geminiの回答をGoogleの検索結果に基づかせることで、この問題を大幅に軽減する機能です。

基本的な使い方

import google.genai as genai
 
client = genai.Client(api_key="YOUR_API_KEY")
 
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="2026年のAI業界の最新トレンドは?",
    config={
        "tools": [{"google_search": {}}]
    }
)
 
print(response.text)

これだけで、Geminiは自動的にGoogle検索を実行し、検索結果に基づいた回答を生成します。

Grounding Metadata の活用

検索結果のソース情報は grounding_metadata として返されます。

for candidate in response.candidates:
    meta = candidate.grounding_metadata
    if meta:
        # 検索クエリ
        for query in meta.web_search_queries:
            print(f"Search query: {query}")
 
        # ソース情報
        for chunk in meta.grounding_chunks:
            print(f"Title: {chunk.web.title}")
            print(f"URL: {chunk.web.uri}")
 
        # Grounding サポート情報
        for support in meta.grounding_supports:
            print(f"Text: {support.segment.text}")
            print(f"Confidence: {[s.confidence_score for s in support.grounding_chunk_indices]}")

Dynamic Retrieval

すべてのリクエストで検索が必要なわけではありません。Dynamic Retrievalを使うと、Geminiが検索の必要性を自動判断します。

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="量子コンピュータの基本原理を説明して",
    config={
        "tools": [{
            "google_search": {
                "dynamic_retrieval_config": {
                    "mode": "MODE_DYNAMIC",
                    "dynamic_threshold": 0.5
                }
            }
        }]
    }
)

dynamic_threshold を調整することで、検索のトリガー感度を制御できます。

  • 0.0: 常に検索を実行
  • 0.5: バランスの取れた閾値(デフォルト推奨)
  • 1.0: ほとんど検索しない

RAG(検索拡張生成)との比較

項目Grounding with Google SearchカスタムRAG
データソースGoogle 検索インデックス独自データベース
セットアップゼロ(API パラメータのみ)ベクトルDB構築が必要
最新性リアルタイム更新頻度による
コストAPI使用量に応じてインフラ費用 + API費用
カスタマイズ性低い高い
社内データ利用不可利用可能

実装パターン

ニュース要約ボット

def get_news_summary(topic: str) -> str:
    response = client.models.generate_content(
        model="gemini-2.5-flash",
        contents=f"{topic}に関する最新ニュースを3件要約してください。各ニュースにソースURLを付けてください。",
        config={
            "tools": [{"google_search": {}}]
        }
    )
    return response.text

ファクトチェッカー

def fact_check(claim: str) -> str:
    response = client.models.generate_content(
        model="gemini-2.5-pro",
        contents=f"以下の主張のファクトチェックを行ってください。検索結果に基づいて、真偽と根拠を示してください。\n\n主張: {claim}",
        config={
            "tools": [{"google_search": {}}]
        }
    )
    return response.text

コスト管理

Grounding with Google Searchは便利ですが、リクエストごとに追加コストが発生します。

最適化のヒント:

  • Dynamic Retrievalを使い、不要な検索を避ける
  • 事実確認が不要な創作タスクではGroundingをオフにする
  • バッチ処理では、まず検索なしで回答を生成し、信頼度の低い部分だけGroundingを適用する

制限事項

  • 検索結果はGoogleの検索インデックスに依存するため、インデックスされていない情報は取得できません
  • 社内データや非公開情報にはアクセスできません(その場合はカスタムRAGが必要)
  • 検索結果の言語は、プロンプトの言語に影響されます

つまずきやすいポイントと注意点

Grounding は設定こそ簡単ですが、実運用に入ると「検索が走っていない」「引用がずれる」といった見えにくい不具合に出会います。私自身も個人開発で組み込んだとき、何度か手が止まりました。特に引っかかりやすい点をまとめます。

grounding_metadata が空で返る

検索結果が一切返ってこないときは、まず web_search_queries を確認してください。ここが空なら、そもそも検索が実行されていません。

モデルが内部知識だけで十分と判断した場合や、プロンプトが時事性を含まない場合、Gemini は検索をスキップします。最新情報を必ず使わせたいときは、プロンプトに「最新の」「2026年6月時点で」といった時点を明示すると、検索が走りやすくなります。

dynamic_threshold が効かない

dynamic_retrieval_config と dynamic_threshold は、Gemini 1.5 系の google_search_retrieval ツール向けの設定です。Gemini 2.5 系の google_search ツールでは指定しても無視され、検索の要否はモデルが自動で判断します。

2.5 系で「閾値を変えても挙動が変わらない」と感じたら、この違いを疑ってください。2.5 ではシンプルに {"google_search": {}} を渡すだけで構いません。

引用位置が本文とずれる(日本語特有)

grounding_supports の segment が指す start_index / end_index は、UTF-8 のバイトオフセットです。Python の文字列はバイトではなく文字単位で扱うため、日本語のようなマルチバイト文字をそのままスライスすると、引用位置が後ろにずれます。

本文へ脚注を差し込むときは、response.text を一度 encode("utf-8") してバイト列で切り出し、再び decode する手順を挟むと位置が揃います。

raw = response.text.encode("utf-8")
for support in meta.grounding_supports:
    seg = support.segment
    cited = raw[seg.start_index:seg.end_index].decode("utf-8")
    sources = [meta.grounding_chunks[i].web.uri
               for i in support.grounding_chunk_indices]
    print(cited, "→", sources)

検索結果サジェストの表示が必須

Grounding with Google Search を使ったレスポンスを画面へ出す場合、Google の利用条件として検索候補(Search Suggestions)の表示が求められます。grounding_metadata.search_entry_point.rendered_content に表示用の HTML が入っているので、これを回答の近くにそのまま埋め込んでください。表示を省くと規約に抵触する可能性があります。

検索しているのに古い・誤った情報を返す

検索は走っているのに内容が古い場合、プロンプト側で時点を明示し、temperature を下げて検索結果への忠実度を上げると改善することがあります。

事実確認が主目的なら、gemini-2.5-flash ではなく gemini-2.5-pro を使い、「検索結果に書かれていないことは推測しない」と明示すると、根拠のない補完を抑えられます。

全体を振り返って

Grounding with Google Searchは、Geminiの回答精度を飛躍的に向上させる強力な機能です。特に最新情報やファクトチェックが重要なユースケースでは必須と言えます。Dynamic Retrievalを組み合わせることで、コストと精度のバランスを最適化できます。

シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

⬡ 高度な活用2026-09-24
Gemini に「合っていますか」と聞くのをやめ、答えを伏せたまま分類し直してもらう設計に変えました
自分で付けたラベルの確認を Gemini に頼むと、頷く答えが返りがちです。確認型・反論指示型・伏せ型の三つを比べて伏せ型を選んだ理由と、答えが漏れる経路の塞ぎ方、食い違いだけを人が見る振り分けのコードまで書き残します。
⬡ 高度な活用2026-09-14
BLOCK_NONE を入れても結果が変わらないとき — Gemini のブロックを閾値で動かせるかどうかの見分け方
安全フィルタで止まったとき、閾値を緩めて直る場合と、何をしても直らない場合があります。返ってきたレスポンスのどこを見て、その境目を先に判定するかをまとめました。
⬡ 高度な活用2026-09-05
長い動画を Gemini に辿らせるとき、見つける問いと「無い」を確かめる問いは別々に投げています
9月1日に来たエージェント的動画理解では、どこを観るかをモデル自身が決めます。見つける問いには効きますが、映り込みが無いことの確認には被覆の保証がありません。問いの形で処理モードを分ける判断と、被覆を自分で担保する実装を書き残します。