Kimi K3 の提供を開始しましたKimi K3 を見る
明示的なリクエストエラーと、静かに無視されるパラメータを切り分ける Gemini 3.6 Flash API 移行ゲートウェイ
チュートリアル

Gemini 3.6 Flash 移行:5 つの API 変更と 1 つの静かな失敗

Jacey
Jacey
Founder
2026年7月21日
36 分
TL;DR gemini-3.6-flash または gemini-3.5-flash-lite への移行では、リクエストに 5 つの変更が入ります。うち 4 つは HTTP 400 を返すので、すぐに気づきます。残る 1 つは違います。temperaturetop_ptop_k は受け付けられ、そのまま無視されます。出力の安定を temperature=0 に頼っているパイプラインなら、頼りにしていた保証が消えたあとも API は 200 OK を返し続けます。まずこの 1 つを直し、それから声の大きい 4 つに取りかかってください。
Last verified: 2026-07-21
Google は 2026 年 7 月 21 日に Gemini 3.6 Flash と Gemini 3.5 Flash-Lite を公開しました。リリース当日の報道の多くはベンチマークと価格の話です。このページはもっと狭く、そしてもっと急ぎの話をします。リクエスト形式が変わったこと、そして新しいルールがこの 2 モデルと、それ以降にリリースされるすべてのモデルに適用されると Google が明言したことです。

設定ファイルで model ID を差し替えるだけで、あとはそのまま動くと思っているなら、デプロイする前に最初のセクションを読んでください。

5 つの変更、「いつ気づくか」で並べる

変更新モデルで何が起きるかどう気づくか
temperaturetop_ptop_k受け付けられ、そのあと無視される気づきません。エラーも警告もありません。
thinking_budgetthinking_level と同時に送るリクエスト拒否HTTP 400
リクエストの最後の turn が model ロールリクエスト拒否HTTP 400
call_idname がない FunctionResponseリクエスト拒否HTTP 400
candidate_countGemini 3.x では非対応リクエスト失敗、またはフィールドが破棄される

5 つのうち 4 つは自分から声を上げます。統合テストが捕まえ、エラートラッカーが呼び出し、午後いっぱいで直せます。問題を抱えたまま本番に届くのは、最初の 1 つです。

危険な 1 つ:temperature、top_p、top_k は無視されるようになった

Google 自身の表現に曖昧さはありません。これらのパラメータは「非推奨で無視される」、そして「将来のモデル世代では、これらのパラメータを渡すと HTTP 400 エラーを返す」。指示はすべてのリクエストから削除することです。
この順序は注意して読んでください。順番があなたにとって重要だからです。今日、このパラメータは no-op です。あとになってエラーになります。つまり、自分のシステムについて最も誤解しやすい時期は、すべてがまだ 200 を返している今この瞬間なのです。
Gemini 3.6 Flash の sampling parameter は有効に見えるが、その信号は本番の推論経路に届く前に消える
Gemini 3.6 Flash の sampling parameter は有効に見えるが、その信号は本番の推論経路に届く前に消える
sampling 制御はリクエスト経路で受け付けられても、Gemini 3.6 Flash の出力には何の効果もありません。

エラーを出さずに壊れるパイプラインはどれか

静かな no-op が危険なのは、そのパラメータに依存していた場合だけです。よくある構成は 4 つあります。

  • 決定性に頼るパイプライン。 繰り返し呼び出しの結果を一致させるために temperature=0 を設定しているものすべて。モデル出力から作るキャッシュキー、重複排除の処理、下流のステートマシンに結果を渡す分類ジョブなど。この設定はいま無効なので、それが買っていた出力の安定性は、もう買えていません。
  • golden file / スナップショットテスト。 temperature=0 を固定し、モデル出力を保存済みの期待文字列と diff するテストスイート。モデルを差し替えると不安定になり始めますが、その不安定さは設定の問題ではなくモデル品質の劣化のように見えるため、間違った方向のデバッグに向かわされます。
  • 低い温度でつなぎ止めていた構造化出力。 構造化出力を導入せず、代わりに temperature をほぼ 0、top_p を絞って、モデルにパース可能な JSON を安定して吐かせていたチーム。2 つのつまみが同時に無効になります。
  • ルートごとに調整した設定。 「創造性」スライダーを出しているプロダクトや、「要約」を 1 つの温度で、「ブレインストーム」を別の温度でルーティングしているもの。スライダーは UI 上ではまだ動きます。モデルの中では、もう何も動かしません。

どれもスタックトレースは出しません。出てくるのは、あなたが検証したものとわずかに違う出力です。しかもシステムは自身を健全だと報告します。

ゲートウェイも警告してくれない

ここは慎重なチームでも足をすくわれる部分です。モデルゲートウェイは、各モデルがどのパラメータをサポートするかを記述した機械可読なメタデータを公開しており、ツール類はそのメタデータを読んで何を送るかを決めます。

2026 年 7 月 21 日時点で、OpenRouter の models エンドポイントgoogle/gemini-3.6-flashgoogle/gemini-3.5-flash-lite の両方について、supported_parameterstemperaturetop_pseed をまだ載せています。ゲートウェイはこれらのフィールドを受け付けて転送します。受け取ったモデル側はそれを無視します。この経路のどこもエラーを出さず、メタデータもそのフィールドが死んでいることを教えてくれません。
Google 自身の画面にも同じ遅れがあります。Gemini 3.6 Flash のエンタープライズプラットフォームページは、カスタム値は無視されると書いてある同じページで、temperature、topP、topK の既定値(1.0、0.95、64)をいまだに表示しています。
実務的な帰結は身も蓋もありません。これらのモデルで出力品質を上げようと今 temperature を調整している人は、no-op を調整しています。 「要約器に最適な temperature を見つける」というチケットがチームに残っているなら、閉じてください。

temperature の代わりになるもの

Google が示す代替は、別のパラメータではありません。system instruction です。欲しい挙動を、サンプリング定数としてではなく、モデルが読むルールとして書くのです。

これは意図の表現方法そのものの変化なので、削除ではなく翻訳してください。

これまで数字で表していた意図いまはどこに書くか
簡潔で再現可能な回答のための temperature=0必要な形式・長さ・トーンを明記し、前置きなしで答えるルールを加えた system instruction
JSON をパース可能に保つための低い温度構造化出力。gemini-3.6-flashgemini-3.5-flash-lite の両方が対応
多様性のための高い温度candidate_count も無くなったので、1 回の応答で N 個の異なる案を求める指示
3 行目は立ち止まる価値があります。同じ移行で temperaturecandidate_count を両方削除すると、チームが出力の多様性に使っていた仕組みを一度に取り除くことになります。多様性に依存した機能があるなら、必要なのは設定の変更ではなく、本当の再設計です。

デプロイ前にすべての呼び出し箇所を見つける方法

設定レイヤーを信用せず、コードベースをパラメータ名で検索してください。これらの値はたいてい、複数の場所で別々の人によって設定されているからです。

# Gemini ネイティブと OpenAI 互換の綴り、およびそれらを載せる設定オブジェクト
grep -rn "temperature\|top_p\|topP\|top_k\|topK\|candidate_count\|candidateCount" \
  --include="*.py" --include="*.ts" --include="*.js" --include="*.go" --include="*.java" .

# それらを隠しているラッパー
grep -rn "generation_config\|generationConfig\|GenerateContentConfig\|thinking_budget\|thinkingBudget" .
アプリケーションコードの外も確認してください。YAML や JSON の設定、プロンプト管理ツール、ノートブック、評価ハーネス、そしてモデル設定を保存している Terraform や管理コンソール。半年前にダッシュボードで設定したつまみは、まさにコードレビューを生き延びる類のものです。

声を上げて失敗する 4 つ

こちらは単純です。API が教えてくれるからです。テストスイートが表面化させた順に直してください。

thinking_budget と thinking_level は同時に指定できない

Gemini 3.x は数値の thinking_budget を、minimallowmediumhigh を取る文字列 enum の thinking_level に置き換えました。1 つのリクエストで両方を送ると 400 が返ります。Google の移行ノートはthinking_budgetthinking_level に置き換えることであり、互換性のために両方を残すことではありません。

値を選ぶ際に知っておくべき既定値が 2 つあります。2 つのモデルで異なるからです。

  • gemini-3.6-flash の既定は medium
  • gemini-3.5-flash-lite の既定は minimal で、これはスループット向けに調整されています。
Google は、Flash-Lite の minimal 既定は自律的なサブエージェントとしての利用には向かず、複数ステップのタスクでは tool call を早すぎるタイミングで打ち切ると明言しています。Flash-Lite にコードを書かせたり、ターミナルコマンドを実行させたり、外部 API を呼ばせたりするなら、意図的に mediumhigh に上げてください。これは、既定値を受け入れることが形式的な手続きではなく、実際のプロダクト判断になる唯一の移行作業です。
この警告は再現します。そして、その失敗がどう見えるかを知っておく価値があります。失敗のようには見えないからです。 私たちはリリース当日に、8 つの「モデル + thinking レベル」構成にわたって 216 回の呼び出しを行いました。9 つのタスクをそれぞれ 3 回繰り返しています。誤答を出したのはちょうど 1 つminimal 既定の Flash-Lite が、3 ステップの通知チェーンで 3 回とも失敗しました。形は毎回まったく同じでした。最初の 2 つの tool を正しく呼び、そこで止まり、最後の通知を送らないまま成功したと報告しました。 エラーもなく、例外もなく、下流サービスが受け入れる整った応答でした。同じモデルを high に上げると、このタスクは毎回通りました。
移行の教訓は狭いですが鋭いです。複数ステップのワークフローを Flash-Lite に移し、thinking_level を未設定のままにすると、リクエストは失敗しません。やり終えていない作業について、自信たっぷりの答えを返します。 レベルを明示的に設定し、そのうえで、返ってきた応答ではなく、ワークフローが本来生み出すはずだった効果に対してアサーションを書いてください。

model turn の prefill はもうできない

リクエストの最後の非空 turn が model ロールだと、API は 400 を返します。prefill はよく使われる小技でした。{"role": "model", "parts": [{"text": "{"}]} のような途中までの assistant turn を末尾に足して、モデルに JSON の波括弧で始めさせたり、おしゃべりな前置きを抑えたりするものです。
この 2 つの目的は、ほかのすべてと同じ 2 か所に移ります。ルールを明記した system instruction か、機械でパース可能な形が必要なときは構造化出力です。末尾に assistant または model メッセージを足すリクエストビルダーをコードから探してください。とくにリトライと継続のロジックです。 prefill はそこで、リテラルに書かれるのではなく動的に生成されがちだからです。

すべての FunctionResponse に call_id と name が必要

generateContent API を使う場合、各 FunctionResponse は対応する call_id と関数の name の両方を持たなければなりません。ここで犠牲になりがちなのは手書きの tool ループです。その多くは結果だけ返せば十分だった時代に書かれ、モデルが送ってきたものをそのまま返すのではなく、応答オブジェクトをゼロから組み立て直すからです。
修正は機械的です。モデルの function call から call_id を保持し、返す応答にそれを戻します。tool ループをフレームワーク上に組んでいるなら、周りにパッチを当てるのではなくフレームワークを更新してください。

candidate_count は無くなった

candidate_count は Gemini 3.x では非対応です。削除してください。複数の答えをサンプリングして最良のものを選ぶために使っていたなら、そのロジックはいまや明示的に書く必要があります。1 回の応答の中で複数の案を求めるか、複数のリクエストを発行してそれぞれ別に課金されるかのどちらかです。

変更前 / 変更後:きれいに移行できるリクエスト

非推奨のフィールドをすべて載せた Gemini ネイティブの呼び出しと、移行を生き延びるバージョンを示します。

# 変更前:2.5 世代のモデルでは動くが、3.6 Flash では壊れるか、静かに誤動作する
config = {
    "temperature": 0,          # いまは無視される、エラーなし
    "top_p": 0.95,             # いまは無視される、エラーなし
    "top_k": 40,               # いまは無視される、エラーなし
    "candidate_count": 1,      # Gemini 3.x では非対応
    "thinking_budget": 8192,   # thinking_level と同時に送ると 400
}

# 変更後:意図をサンプリング定数から指示へ移した
config = {
    "system_instruction": (
        "回答は最大 3 文で。平叙文で述べること。"
        "前置きを付けず、質問を繰り返さず、追加の提案もしないこと。"
        "答えが不確かなら、その旨を 1 文で述べること。"
    ),
    "thinking_level": "medium",
}
「変更後」ブロックの要点は、短いことではありません。欲しい挙動が、モデルが実際に読む言葉で書き下されていること、そしてそれはつまり、次のエンジニアがあなたの意図を見て取れることです。設定ファイルの中の孤立した temperature=0 は、自分自身を説明してくれたことは一度もありません。
OpenAI 互換のゲートウェイ経由でこれらのモデルに到達する場合も、同じ削除が当てはまります。ゲートウェイがフィールドを転送し、モデルがそれを破棄するからです。EvoLink では、その呼び出しは base URL を差し替えた標準の OpenAI SDK です。
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["EVOLINK_API_KEY"],
    base_url="https://api.evolink.ai/v1"
)

response = client.chat.completions.create(
    model="gemini-3.6-flash",
    messages=[
        {"role": "system", "content": "回答は最大 3 文で。前置きなし。"},
        {"role": "user", "content": "このインシデントレポートを要約してください。"}
    ]
    # temperature も top_p も渡さない:渡しても受け付けられ、下流で無視される
)

print(response.choices[0].message.content)
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env["EVOLINK_API_KEY"],
  baseURL: "https://api.evolink.ai/v1",
});

const response = await client.chat.completions.create({
  model: "gemini-3.6-flash",
  messages: [
    { role: "system", content: "回答は最大 3 文で。前置きなし。" },
    { role: "user", content: "このインシデントレポートを要約してください。" },
  ],
  // temperature も top_p も渡さない
});

console.log(response.choices[0].message.content);
混乱を一巡分省ける細部が 1 つあります。model ID はちょうど gemini-3.6-flash です。preview サフィックスも日付スタンプもないので、固定すべき日付付きエイリアスは存在しません。デプロイプロセスが -preview-001 のバリアントの存在を前提にしているなら、その前提はリクエスト時に崩れます。
このページは変更されたフィールドだけを扱います。完全なリクエストリファレンス、能力マトリクス、そして初回呼び出しでぶつかりやすいエラーメッセージについては、Gemini 3.6 Flash 接続ガイドを参照してください。

静かな失敗を捕まえる移行手順

順序が重要です。声の大きいエラーは簡単で、静かなものはそうではないからです。この順序で進めてください。

リクエストの棚卸しから検証、canary ロールアウト、ロールバックまでの Gemini 3.6 Flash 本番移行ワークフロー
リクエストの棚卸しから検証、canary ロールアウト、ロールバックまでの Gemini 3.6 Flash 本番移行ワークフロー
安全な Gemini 3.6 Flash のロールアウトは、まず隠れた制御項目を棚卸しし、挙動を検証し、それからロールバック経路を備えて本番トラフィックを canary します。
  1. まず棚卸し。 上の grep を実行し、sampling parameter が設定されているすべての場所を、設定ストアやダッシュボードも含めて列挙します。それぞれがどの挙動を守っていたかを書き留めます。
  2. 意図を翻訳する、ただ削除しない。 見つけた temperature ごとに、それが何のためだったかを判断し、等価な system instruction を書きます。翻訳せずに削除するのは、品質劣化を出荷する手口そのものです。
  3. 400 を直す。 thinking_budgetthinking_level に差し替え、candidate_count を削除し、prefill された model turn を取り除き、すべての FunctionResponsecall_idname を付けます。
  4. thinking レベルを意図して選ぶ。 とくに Flash-Lite では、minimal 既定は自律的な複数ステップ作業に向きません。これは移行における最大のコストレバーでもあります。 私たちのタスクセットでは、minimal の 3.6 Flash は、同じモデルの medium 既定より 1 パスあたり 73.6% 安く、medium では thinking token が課金対象の出力の 85% を占めました。テストすべきは、あなたのワークロードがこの降格に耐えられるかどうかであって、その節約が本物かどうかではありません。
  5. 何かを比較する前に、スナップショットテストを新モデルで取り直します。 古い golden file は、もはや効かないパラメータの下で生成されたもので、有効な基準点ではありません。
  6. 同じタスクセットで両モデルの評価を回し、 合格率だけでなく出力の分布を比較します。静かな挙動変化は、誤答として現れる前に、形式・長さ・冗長さのドリフトとして現れます。
  7. 実トラフィックで canary し、API のエラー率だけでなく下流のパーサーを監視します。 何かが静かに壊れるとしたら、それは呼び出し自体ではなく、モデルの出力を消費するコードで壊れます。
ステップ 5 は、チームが飛ばしがちな 1 つです。temperature=0 がまだ効いていた頃に生成した golden file に対して新しい出力を diff すると、どの差分もモデルの問題に見え、しかもそのどれも問題ではありません。

Google の移行 skill に最初の一巡をさせる

Google はこの移行のための agent skill を公開しています。一度インストールして、自分のプロジェクトに向けます。
npx skills add google-gemini/gemini-skills --skill gemini-interactions-api --global

そのあと、コーディング agent の中でプロジェクトに向けます。

/gemini-interactions-api migrate my app to Gemini 3.6 Flash

実行する価値があります。機械的な作業を引き受けてくれます。非推奨フィールドの発見、リクエスト構築の書き換え、呼び出し箇所の更新で、上のステップ 3 の大半をカバーします。

できないのはステップ 2 です。ツールは temperature=0 を削除すべきだと分かります。しかし、その値が存在したのは、ある下流サービスが「同じ入力には同じ出力」を前提にしていたからだ、とは分かりませんし、その意図を保つ system instruction を書くこともできません。 skill はコードを一掃する一巡として扱い、意図の翻訳は自分でやってください。

廃止スケジュール:選択の余地がなくなるとき

移行は、そうでなくなるまでは任意です。Google の廃止ページが日付を挙げています。
モデル停止日公式の推奨代替
gemini-2.5-flash2026-10-16gemini-3.6-flash
gemini-2.5-flash-lite2026-10-16gemini-3.1-flash-lite
gemini-3.1-flash-lite2027-05-07gemini-3.5-flash-lite
gemini-3-flash-preview停止日は未発表gemini-3.6-flash
gemini-3.6-flashgemini-3.5-flash-lite停止日は未発表該当なし
2 行目に注意してください。このページで最も間違えやすいところです。Google が gemini-2.5-flash-lite の代替として名指しているのは gemini-3.1-flash-lite であり、新しくリリースされた gemini-3.5-flash-lite ではありません。最新の Lite モデルへ一足飛びに行くのは筋の通った選択ですが、それはあなたの選択であって、文書化された移行パスではなく、しかも 1 世代ではなく 2 世代のジャンプです。そのつもりで計画し、テストしてください。
ここでは 2 つの日付が実際に効いています。2.5 系の Flash モデルのどちらかを使っているなら、猶予は 2026 年 10 月 16 日まで、本記事の公開からおよそ 3 か月です。gemini-3-flash-preview を使っているなら、公表された終了日はありませんが、preview モデルはそもそもロードマップの土台にするものではありません。

Computer Use:4 つの公式ページ、2 つの答え

いま文書からは決着がつかない能力の問いが 1 つあります。これらのモデルが Computer Use に対応するかどうか、Google 自身の資料で記述が食い違っています。

4 つの公式ページ、矛盾する 2 つの答え、読んでも解決できません。Computer Use がクリティカルパス上にあるなら、コミットする前に自分のアカウントとエンドポイントで実際に試し、fallback モデルを配線したままにしておいてください。 このセクションは、実測した答えとその観測日で更新します。本ガイドの他の変更はすべて一貫して文書化されていますが、これだけは違います。

今週ちょうどプロバイダを選び直しているなら

予定していなかった移行がスプリントに降ってきました。作業は週末をつぶす書き直しではなく、1〜2 日の丁寧な編集です。どのみち全呼び出し箇所を触っているのですから、そもそもモデルがどうやって自分のところに届くのかを見直す自然なタイミングです。

ついでに確認する価値があることが 2 つあります。

  • 切り替え期間中、新旧のモデルを並べて動かせますか? 上のステップ 6 はそれを要求します。gemini-3.5-flashgemini-3.6-flash を同じタスクセットで動かすのが、いまの構成では面倒なら、その摩擦は次の移行でもそこにあります。そして次は必ずあります。Google は、これらのルールが今後リリースされるすべてのモデルに適用されると言っています。
  • 新しいモデルは、どれだけ速く呼べるようになりますか? gemini-3.6-flash は初日に、preview サフィックスなしで一般提供に到達しました。モデルが出てから、自分のコードがそれを呼べるようになるまでの間隔は、リリースのたびに払うコストです。
EvoLink は、その両方を軸に作られています。1 つの OpenAI 互換エンドポイントで Gemini、Claude、GPT などに届くので、2 つのモデルの A/B は、2 つ目の SDK と 2 組目の認証情報ではなく、model 文字列の変更で済みます。新しいモデルも、すでに使っている同じエンドポイントから利用できます。まずこの特定のモデルの現状を見たいなら、Gemini 3.6 Flash リリーストラッカーに提供状況と model ID の詳細があり、3.6 Flash と 3.5 Flash の比較は、このアップグレードをそもそもやる価値があるかどうかを扱います。これは、安全にやる方法とは別の問いです。
今年 Gemini の移行がこれで初めてでないなら、それぞれのモデルペアを扱う過去の 2 本があります。Flash 系の Gemini 3 Flash Preview から Gemini 3.5 Flash への移行と、Pro 系の Gemini 3 Pro 廃止移行ガイドです。それらは、名指しされたペアのために読んでください。このペアのためではありません。 このページのパラメータ廃止は 3.6 世代から始まるので、より前のペア向けに書かれたガイドは、sampling parameter がまだ使えると言いますが、gemini-3.6-flash ではもう使えません。

FAQ

Gemini 3.6 Flash に temperature を送るとエラーになりますか? なりません。今日、temperaturetop_ptop_k は受け付けられて無視され、エラーも警告もありません。Google は、将来のモデル世代ではこれらのパラメータに HTTP 400 を返すと述べているので、この静けさは一時的ですが、今のところ、それらを載せたリクエストは完全に健全に見えます。
決定的な出力のために temperature=0 の代わりになるものは? Google が文書化した代替は system instruction です。必要な形式・長さ・トーンを、モデルが読むルールとして述べます。機械でパース可能な出力には、両方の新モデルが対応する構造化出力を使います。temperature の位置を引き継ぐ数値パラメータはありません。
gemini-3.6-flash でまだ thinking_budget を使えますか? 使えません。Gemini 3.x は、値が minimallowmediumhigh の文字列 enum thinking_level を使います。同じリクエストで thinking_budgetthinking_level を送ると HTTP 400 が返ります。既定は 3.6 Flash が medium、3.5 Flash-Lite が minimal です。
gemini-2.5-flash-lite の公式の代替は何ですか? Google の廃止ページが名指しているのは gemini-3.1-flash-lite であり、gemini-3.5-flash-lite ではありません。停止日は 2026 年 10 月 16 日です。代わりに 3.5 Flash-Lite へ移ることもできますが、それは 2 世代のジャンプで、文書化されたパスではなくあなた自身の判断です。
これらの変更は Gemini 3.5 Flash-Lite にも当てはまりますか? はい。非推奨の sampling parameter、thinking_level への切り替え、prefill の制限、FunctionResponse の要件、candidate_count の削除は、いずれも gemini-3.5-flash-lite にも当てはまり、Google はこの 2 つ以降にリリースされるすべてのモデルに適用されると述べています。コードの変更はどちらでも同じなので、2 つのうちどちらへ移るかを決める前に移行を始められます。 その選択は別の問いで、Gemini 3.6 Flash と 3.5 Flash-Lite の比較で扱っています。
固定すべき日付付きや preview 版の model ID はありますか? ありません。model ID は gemini-3.6-flash で、preview サフィックスも日付スタンプもありません。デプロイのツール類が日付付きエイリアスを期待しているなら、リクエスト時に失敗します。

出典

AIコストを89%削減する準備はできましたか?

今すぐEvoLinkを始めて、インテリジェントなAPIルーティングの力を体験してください。