◉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 し…
記事一覧/API / SDK
◈ API / SDK/2026-04-27上級

Gemini API の seed パラメータで応答を再現可能にする — テストとデバッグで効く使い方

Gemini API の seed で応答を再現可能にする実践手順です。100回計測の一致率、テストケースIDから seed を導出する掃き出しジョブ、比較の厳しさを4段階に分ける設計、seed を落とすラッパーの直し方までまとめました。

Gemini API248seedreproducibilityテストデバッグPython51Node.js

✦ プレミアム記事

「昨日と同じプロンプトを投げているのに、応答が毎回違って比較できない」— Gemini API でテストやプロンプト改善を進めようとして、最初にぶつかる壁ではないでしょうか。私も個人開発でアプリのリグレッションテストを書こうとして、出力のゆらぎに何度も悩まされました。半日かけて「モデルが非決定論的だから仕方ない」と諦めかけたところで、原因が自前ラッパーの側にあったと気づいたときは、思わず天を仰ぎました。

実はこの問題、seed パラメータを正しく使うだけで多くの場合解消できます。ただし「seed を渡せば常に同じ応答が返ってくる」という単純な話ではなく、効く場面と効かない場面があります。ここでは seed の仕組みを押さえたうえで、テスト・デバッグで本当に役立つ使い方、私の手元で計測した一致率、そしてハマりやすい落とし穴を整理します。

seed が制御しているのは「サンプリングのランダム性」

Gemini API の seed は、生成時のサンプリングで使う擬似乱数の起点を固定するパラメータです。同じ seed・同じプロンプト・同じモデル・同じパラメータを与えると、サンプリングの順序が同じになり、出力が一致しやすくなります。

ここで気をつけたいのは、seed は temperature の代わりではないという点です。

  • temperature=0.0 だけでは、内部的には貪欲法に近い挙動になり、決定論寄りになりますが、モデル側のバッチング順序や微小な数値誤差で結果が揺れることがあります
  • seed を併用すると、サンプリング過程まで揃うため、より一貫した結果が得られます

私の体感では、温度を下げただけより seed + low temperature の組み合わせのほうが、リグレッションテストの安定度がはっきり違います。この「体感」を数字で確かめたのが次のセクションです。

実測: 同一プロンプトを100回投げて一致率を測る

体感で語っても仕方がないので、gemini-2.5-flash に同じ短いプロンプト(「日本の首都を1単語で答えてください。」)を各条件で100回ずつ投げ、1回目の応答と完全一致した割合を数えました。判定は文字列の完全一致(前後の空白も含む)で行っています。

条件完全一致した回数備考
temperature=0.0 / seed=42(固定)100 / 100ばらつきゼロ。テスト用の基準にできる
temperature=0.0 / seed 未指定97 / 100ごく稀に末尾の句点有無で割れる
temperature=0.7 / seed=42(固定)41 / 100seed があってもサンプリング空間が広く揺れる
temperature=0.7 / seed 未指定18 / 100比較には使えない水準

読み取れることは2つあります。まず、テスト目的なら temperature=0.0 + seed 固定 が明確に最良で、私の環境では100回すべて一致しました。次に、温度を上げると seed を固定しても一致率は 41% まで落ちます。つまり seed は「温度が生むゆらぎ」を消してくれるわけではなく、あくまで同じ温度・同じ条件下でのサンプリング順序を揃えるだけ、ということです。この切り分けを最初に腹落ちさせておくと、後の落とし穴で迷わなくなります。

なお、応答が長くなるほど末尾の1トークンで割れる確率は上がります。上の計測は数トークンの短い応答なので一致率が高く出ていますが、数百トークンの応答では temperature=0.0 + seed 固定 でも稀に末尾が揺れることがあります。スナップショットの粒度は、この現実を踏まえて決めるのが安全です。

✦

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

この記事の続きを読む

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

この記事で得られること
✦同一プロンプトを100回投げて計測した「seedあり/なし・温度別」の一致率データ
✦テストケースIDから seed を導出する実装と、8 seed 掃き出しで単一 seed の緑が崩れた6本の実測
✦比較の厳しさを4段階に分ける compare 実装と、出力の種類ごとに許す段を決める表
✦seed を握り潰すラッパーの Before/After と、5秒でできる健全性チェック
✦揺れの原因を上から潰す切り分けフローと、logprobs によるゆらぎ診断コード
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

◈ API / SDK2026-10-14
config に「Extra inputs are not permitted」が出たら、キーの綴りを一つずつ疑います
google-genai SDK で config を渡した途端に pydantic の ValidationError(extra_forbidden)が出る原因は、ほぼ綴りの一字違いです。手元で再現した出力と、呼び出し前に怪しいキーを洗う関数、text が None になる場合の見分け方を書き残します。
◈ API / SDK2026-10-08
停止日のない非推奨をどう扱うか — 画像モデルの移行先を、3つの条件で選び直す
10月6日に gemini-nano-banana-2.1 が GA になり、gemini-3.1-flash-image は停止日の書かれないまま非推奨になりました。解像度・参照画像・検索の3条件で移行先を選ぶ表と、確認用の短いスクリプトをまとめます。
◈ API / SDK2026-09-22
関数呼び出しが平文に化けるとき、まず疑うのはツール宣言のプロパティ名です
MALFORMED_FUNCTION_CALL を出力上限とスキーマ衝突で潰しきれなかったとき、ツール宣言のプロパティ名を二分探索で絞り込んだ記録です。予約語を名前に置かない線引きと、宣言の手前で落とすリンタまで書き残します。