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を組み合わせることで、コストと精度のバランスを最適化できます。