Skip to content

店名 Web 検索の試行知見

関連: Gemini / 支出の保存 / 外部リンク

2026-08-16 に、支出保存前の店名を Gemini の Google Search grounding で正規化する実装を一度入れた。 無料枠まわりの制約が運用に合わなかったため、同日中に revert した(8f49287)。 コードには残っていない。 再実装するときの判断材料として、ここで得た事実だけを残す。

いまの結論

店名の Web 検索は 現状オフ である。 解釈(interpret)だけが Gemini を使う。

無料枠のまま「モデル指定+ Google Search grounding」で店名を安定して取るのは難しい、という判断である。 理由は次節のとおり、モデルの通常 RPD と Search Grounding の枠が別であり、かつ新規キーでは 2.5 系が使えないためである。

試したこと

  1. 支出 create の直前に、別呼び出しで店名を grounding 付き generateContent する
  2. 曖昧なときは Discord で番号選択する
  3. 「記録しないで」で DB 非保存のプレビュー経路を足し、検索だけ試せるようにする
  4. 解釈用と検索用でモデルチェーンを分ける(MERCHANT_LOOKUP_MODELS)

いずれも revert 済みである。

無料枠・モデルで詰まった点

通常の RPD と Search Grounding は別

AI Studio の「モデルごとのレート制限」で 通常の RPD が空いていても、grounding 付き呼び出しが 429 RESOURCE_EXHAUSTED になることがある。

Gemini 3 系では、無料枠で Search Grounding が使えない、または grounding 専用クォータが先に枯れる、という報告が多い。 ダッシュボードではモデル行の RPD だけ見て「使えるはず」と判断しない。 Search Grounding の行も見る。

確認用: レート制限(直近28日)

解釈のあとに検索すると枠を二回食う

1 通の Discord メッセージで、だいたい次の 2 回 API を叩く。

  1. interpret(structured JSON)
  2. 店名検索(grounding)

gemini-3.5-flash の無料 RPD はごく小さい(実測で 20/日前後)。 解釈だけで枯れると、フォールバックに落ちる。 検索まで同じ日に重ねると、さらに厳しい。

新規キーでは 2.5 Flash Lite が 404

gemini-2.5-flash-lite はドキュメント上まだ存在するが、このプロジェクトの API キーでは次のエラーになった。

404 NOT_FOUND
This model models/gemini-2.5-flash-lite is no longer available to new users.

「無料の Search 枠がある 2.5 に逃げればよい」は、新規キーでは成立しないことがある。

廃止・弱いフォールバック

モデル 観測
gemini-1.5-flash 404 NOT_FOUND(generateContent 不可)
gemini-3.5-flash 無料 RPD が極小。すぐ 429
gemini-3.5-flash-lite 解釈フォールバックとして実運用で 200 を確認
gemini-3.1-flash-lite モデル自体は呼べるが、grounding で 429 になった

解釈フォールバックに検索専用モデルを重ねると、1 通で同じモデルを連続で叩いて 429 になりやすい。 役割を分けるなら、解釈チェーンと検索チェーンでモデルを共有しない。

JSON schema と grounding の相性

response_mime_type=application/json や response_schema を 同じ呼び出し に付けると、一部モデルでは Google Search grounding が黙って無効化される。 HTTP は 200 のまま、記憶だけで店名をエコーする、という見え方になる。

プロンプト本文で「JSON だけ返せ」と書くだけでも、同様に grounding が弱まる/無効になる報告がある。 検索させるなら tools のみで一度呼び、整形は別呼び出し、という二段が安全側である。

別経路の候補(未採用)

経路 利点 コスト
Gemini 課金+ grounding いまの設計に近い Gemini 側の従量・ティア
Google Places / Custom Search モデル枠に依存しない 別 API・別課金
検索なし(人手の店名のまま) 単純 正規化されない

「モデル非依存の検索」は可能だが、Places 等は Gemini 無料枠の延長ではない。

再実装するときの最低条件

次を満たせないうちは、また同じところで止まる。

  1. Search Grounding(または Places 等)が、この API キーで実際に成功する呼び出しを journal で確認済みであること
  2. 解釈用モデルと検索用モデル(または検索 API)の枠が、1 日の想定通数で足りること
  3. 失敗時に「特定できへん」と枠切れ・404 を混同しないこと(ログと Discord で理由を分ける)

起動直後のログで、実際に使うモデルチェーンを出すこと。 AI Studio の利用が増えないのに Discord だけ 429 なら、別モデルを叩いているか、古いプロセスの可能性が高い。

運用メモ(解釈まわり)

店名検索とは独立に、いまの運用で使える観察である。

GEMINI_MODEL=gemini-3.5-flash
GEMINI_MODEL_FALLBACKS=gemini-3.5-flash-lite

gemini-1.5-flash をフォールバック末尾に残しても、404 で実質無効である。 gemini-3.5-flash の日次枠を使い切った日は、一時的に GEMINI_MODEL=gemini-3.5-flash-lite にすると会話自体は続けやすい。