◉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-07-02上級

url_context が取得に失敗しても答えは返ってくる — 取得ステータスを検証してから通すゲート設計

url_context ツールは対象URLの取得に失敗しても、それらしい回答を返します。url_context_metadata の取得ステータスを読み、根拠URLが実際に読めた時だけ答えを確定する検証ゲートと、失敗時のフォールバックを実装します。

Gemini API248url_contextgrounding8自動化28信頼性設計3

✦ プレミアム記事

自動処理に url_context を組み込んで一番ひやりとしたのは、対象ページの取得に失敗しているのに、応答そのものは普通に返ってきていた場面でした。個人開発で Dolice Labs の複数サイトの下書きを定期処理で回している私自身、公式の変更履歴ページを url_context で参照させ、要点を抜き出す小さなジョブを動かしていました。ある朝、生成された下書きの一部が、実際のページには書かれていない「それらしい」内容になっていたのです。

原因を追うと、対象URLの取得が失敗していました。ところが応答は空にならず、モデルが手元の知識で補った文章を、あたかもページを読んだ結果のように返していました。取得の成否を確認していなかった私の実装では、この差が完全に見えませんでした。

url_context の取得は「best-effort」だと考える

url_context は、指定したURLをモデル側が取得してグラウンディングの材料にするツールです。ここで見落としがちなのは、取得が失敗しても呼び出し自体はエラーにならないという点です。ネットワーク側の一時失敗、robots による拒否、対象が動的レンダリングでほぼ空、サイズ上限超過など、取得が満たされない理由はいくつもあります。そのどれであっても、多くの場合レスポンスは 200 で返り、本文もそれらしく埋まります。

自動処理で怖いのは、この「静かな失敗」です。人が画面越しに使っていれば「あれ、内容が古い」と気づけます。けれど定期実行のジョブは、返ってきたテキストをそのまま次の工程へ流します。取得の成否という一次情報を確認しない限り、空振りの回答がコンテンツへ混入し続けます。

まず url_context_metadata を読む

救いは、取得の結果がメタデータとして返ってくることです。各候補には url_context_metadata が付き、その中の url_metadata に、実際に取得しにいったURLと取得ステータスが並びます。ここを読めば「どのURLが本当に読めたのか」を機械的に判定できます。

まずは、応答から取得ステータスを取り出すところだけを切り出します。

from google import genai
from google.genai import types
 
client = genai.Client()
 
def ask_with_url_context(prompt: str, urls: list[str]):
    # 対象URLを本文に含めると、url_context がその取得を試みます
    url_list = "\n".join(urls)
    full_prompt = f"{prompt}\n\n参照するURL:\n{url_list}"
 
    resp = client.models.generate_content(
        model="gemini-flash-latest",
        contents=full_prompt,
        config=types.GenerateContentConfig(
            tools=[types.Tool(url_context=types.UrlContext())],
        ),
    )
    return resp
 
def extract_retrievals(resp) -> list[dict]:
    """各URLの取得結果を [{url, status}] の形で返す。"""
    out = []
    for cand in resp.candidates or []:
        meta = getattr(cand, "url_context_metadata", None)
        if not meta:
            continue
        for um in getattr(meta, "url_metadata", []) or []:
            out.append({
                "url": getattr(um, "retrieved_url", None),
                "status": str(getattr(um, "url_retrieval_status", "")),
            })
    return out

url_retrieval_status は列挙値で返ります。成功は末尾が SUCCESS、取得に失敗した場合は ERROR、安全性の理由で弾かれた場合は UNSAFE を含む値になります。文字列化して末尾で判定すると、SDK の細かな型差に振り回されずに済みます。

ステータス(末尾)意味その応答をどう扱うか
SUCCESSURLを取得できた根拠として認める
ERROR取得に失敗した根拠として認めない・フォールバックへ
UNSAFE安全性の理由で除外根拠として認めない・人手キューへ
(メタデータ無し)そもそも取得を試みていないグラウンディング不成立として不合格

一番厄介なのは最後の行、メタデータが空のケースです。URLを本文に入れたつもりでも、モデルが取得を試みず、内部知識だけで答えることがあります。「取得ステータスが失敗」ではなく「そもそも取得の記録が無い」状態は、成功と誤認しやすいので明示的に落とします。

✦

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

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦url_context_metadata の url_retrieval_status を読み、取得に失敗したURLを根拠に含む応答を不合格にする検証ゲート
✦取得失敗時は明示 fetch へ切り替え、根拠URLが実際に読めた時だけ答えを確定する二段構えのフォールバック
✦自動運用で「自信ありげな空振り回答」がコンテンツへ静かに混入するのを止める、冪等な適用の型
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

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

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

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

関連記事

⟐ 開発ツール2026-09-10
浮世絵カタログの表記ゆれ照合を、正規化と候補列挙の二層で組む手順
同じ絵師名が三通りに散らばったカタログを揃えるとき、Gemini に同一判定をさせると世代違いが混ざります。正規化を先に置き、モデルには候補の列挙だけを頼む二層構成を、動くコードと費用の見積もりつきでお伝えします。
⟐ 開発ツール2026-09-06
アイコンだけのボタンは、翻訳が揃っていても読み上げでは無言になります
翻訳ファイルが揃っていても、読み上げラベルの穴は残ります。iOS と Android からアイコン要素とラベルを集め、機械で決まる不備をローカルで確定させてから Gemini に文言だけを渡す二段構えを、実際の出力とともに書き残します。
⟐ 開発ツール2026-09-02
モデル入れ替えの合否を一致率で決めると、カテゴリ分布のずれは通過します
画像分類バッチのモデルを差し替えたとき、ゴールデンセットの一致率は通るのにカテゴリ構成比だけが動くことがあります。必要サンプル数を実際に計算し、切替前に判定できる対応比較のハーネスを組みました。