GEMINI LABEN
NANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定ですNANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定です
記事一覧/高度な活用
高度な活用/2026-03-11上級

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

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

Gemini API191Grounding3Google Search2RAG15検索連携

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_configdynamic_threshold は、Gemini 1.5 系の google_search_retrieval ツール向けの設定です。Gemini 2.5 系の google_search ツールでは指定しても無視され、検索の要否はモデルが自動で判断します。

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

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

grounding_supportssegment が指す 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-07-08
Managed Agent の実行中に知識ベースが書き換わる問題 — File Search を実行エポックで固定する一貫性設計
Managed Agents の自律実行中に File Search ストアが更新されると、同じ実行の中で古い根拠と新しい根拠が混ざります。MVCCに倣った実行エポックの固定で、エージェント1回分の根拠を一貫させる設計と実装をまとめました。
高度な活用2026-07-08
複数アプリのFAQを1つの File Search ストアに同居させる — customMetadata と chunk 設定で検索を分ける
複数アプリのFAQを1つの File Search ストアにまとめると、metadataFilter が無言で空を返したり、回答がチャンク境界で割れて引用されなかったりします。customMetadata の設計、AIP-160 フィルタ構文の落とし穴、chunkingConfig の実測チューニングを実装ベースでまとめました。
高度な活用2026-06-01
Gemini Embedding の次元を 3072 から 768 へ切り詰める — ベクトルDBのコストとレイテンシを下げる Matryoshka 設計
gemini-embedding-001 は 3072 次元の埋め込みを返しますが、Matryoshka 表現のおかげで前方だけを切り出しても精度がほとんど落ちません。次元を 768 へ削ってベクトルDBのストレージとレイテンシを下げる設計を、再正規化の落とし穴と粗密二段検索のコード付きで組み立てます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →