Gemini Live API 2.5系から3.1へ移行すると壊れやすい3点を整理。非同期関数、thinkingBudget、プロアクティブ音声の変更点と代替実装をまとめます。
TL;DR: Gemini Live API を 2.5 → 3.1 に上げると、非同期関数呼び出し・thinkingBudget・プロアクティブ音声の3つが廃止されてコードが壊れます。Google は「drop-in upgrade として扱うな」と公式に明記。本記事では各廃止理由と代替実装を解説します。
関連記事としては
Blogスマホだけで英語YouTubeを同時通訳:Gemini 3.5 Live Translateを耳で使う実践メモ2026年6月公開のGemini 3.5 Live Translateを、スマホとBluetoothイヤホンだけで実機検証。スピーカーだと待たされるのにイヤホンだとほぼ完璧な同時通訳になる——その分かれ目と、英語YouTubeを耳で理解する一番実用的な使い方を共有します。→ もあわせて読むと、今回の論点とのつながりを把握しやすくなります。
対象モデル:
gemini-3.1-flash-live-preview/ 情報基準日: 2026-03-26(Google公式発表日)
thinkingBudget は thinkingLevel に変わった {#top2}
ここを最初に押さえないと、移行判断を誤ります。
2.5系でうまく動いていた音声エージェントは、たいてい次の3層に分かれています。
3.1 ではこのうち、ツール呼び出しのやり方と発話の自動化と推論コントロールが変わっています。つまり、見た目は同じ「Live API」でも、内部の設計前提が少し違う。
なので、移行の順番はこうです。
ここを飛ばして「型だけ直す」と、あとで会話の途切れや無音、ツール実行の詰まりが出ます。これは現場でかなり面倒です。
| 設定・機能 | 2.5系 | 3.1系 | 影響度 |
|---|---|---|---|
| 非同期関数呼び出し | ✅ 対応 | ❌ 廃止 | 高:ツール構成の再設計が必要 |
| thinkingBudget | thinkingBudget: 256(数値) | thinkingLevel: "medium"(段階) | 中:設定ファイルの修正が必要 |
| プロアクティブ音声 | ✅ 対応 | ❌ 廃止 | 高:UXの再設計が必要 |
| 出力トークン上限 | 8,192 | 65,536(8倍) | プラス変更 |
| 対応言語数 | 24言語 | 90言語以上 | プラス変更 |
| コンテキスト長 | — | 131,072トークン | プラス変更 |
非同期、と聞くとなんとなく「賢そう」な印象がありますが、3.1 は「賢くやるより、素直にやれ」という設計に寄っています。
2.5系では、会話を止めずにツール実行を待つような設計を組めました。ところが 3.1 では、非同期関数呼び出しが廃止され、同期的な扱いに寄ったと理解しておくのが安全です。
要するに、「呼び出しておいて裏で待つ」前提のコードが危ないです。
ポイント: 2.5系で「非同期ツール呼び出し」を使っていた実装は、3.1 では動作保証がない。ツール数が多いほど影響範囲が広い。
よくあるのはこのパターンです。
2.5系ではこれで通っていた実装が、3.1 では期待通りに進まないことがあります。
基本はシンプルです。ツール結果が必要なら、その場で待つ設計に寄せる。
Before(2.5系・動作するが3.1では危険)
# 裏で走らせて後で回収 → 3.1では期待通りに動かない可能性
async def handle_user_input(user_input):
tool_future = asyncio.create_task(fetch_weather(user_input))
# ツール結果を待たずに会話を続ける
response = model.generate_response_stream(conversation_state)
weather_result = await tool_future # 後から差し込む
After(3.1対応・同期寄りに再設計)
# ツール結果が返るまで待つ設計
def handle_user_input(user_input):
result = tool_call_sync(user_input)
if result is None:
raise RuntimeError("tool call failed")
response = model.generate_response(
conversation_state=conversation_state,
tool_result=result,
)
ポイントは、モデルに非同期の都合を押し付けないことです。
音声エージェントでやるなら、特に「ユーザーが話している最中に何かを返す」系の体験は、アプリのイベント制御に寄せた方が安定します。
thinkingBudget は thinkingLevel に変わった {#top2}これは地味ですが、移行時にハマりやすいです。
2.5系で使っていた thinkingBudget は廃止方向で、3.1 では thinkingLevel に置き換わっています。
つまり、これまでの「何トークン考えさせるか」という発想から、どの程度考えさせるかへ寄った、と見ておくとわかりやすいです。
thinkingBudget をそのまま残すと、設定が無視されるか、エラーになるか、少なくとも期待通りに効かない可能性があります。
そして厄介なのは、エラーで落ちないのに品質だけ変わることです。音声エージェントはこれが一番やっかいです。レスポンスは返るのに、要約が浅い、ツール選択が雑、説明が不安定、みたいな症状になります。実際に試したところ、thinkingBudget を指定したまま 3.1 を呼び出してもエラーは一切出ず、minimal 相当の動作になっていました。
ポイント: thinkingBudget の残骸は「サイレントに効かなくなる」。エラーログに出ないぶん、気づかないまま品質劣化が続く可能性がある。
Before(2.5系)
config = {
"thinkingBudget": 256, # トークン数で指定
}
After(3.1対応)
config = {
# thinkingBudget は削除
"thinkingLevel": "medium", # low / medium / high で指定
}
client = live_api_client.configure(
model="gemini-3.1-flash-live-preview",
generation_config=config,
)
ここで大事なのは、単純に名前を置換して終わりにしないことです。
thinkingBudget は「どれだけ考えるか」を数値で縛る発想でしたが、thinkingLevel は運用上の感覚が少し違います。なので、移行後は以下を見ます。
これが一番体験に効きます。
プロアクティブ音声は廃止です。つまり、モデルが勝手に話し出す前提で作ったフローは、そのままでは成立しません。
2.5系で「沈黙を埋める」「先に気の利いた一言を返す」「ユーザー入力待ちの間に自然に話す」ような体験を作っていた場合、3.1 ではそのまま再現しづらいです。
これらは、単にUIの見た目ではなく、会話の主導権をモデルに預けていた実装です。そこを3.1では見直す必要があります。
代替は、モデルに任せるより アプリ側でイベント駆動にする ことです。
Before(2.5系・モデルが自律的に話す)
// モデルが無音を検知して自動発話していた(3.1では動かない)
const session = await liveApi.connect({ proactiveAudio: true });
After(3.1対応・アプリ側でイベント制御)
function onUserSilence(timeoutMs) {
// アプリ側で明示的にTTSを発火する
playTTS("少し確認しています。お待ちください。");
}
function onToolPending() {
playTTS("情報を取得しています。");
}
function onModelReady(text) {
playTTS(text);
}
この設計にすると、体験は少し機械的になります。そこは正直に言うと、2.5系の"それっぽさ"は減ることがあります。
ただし、その代わりに得られるのは、挙動の予測しやすさです。音声エージェントは、予測しやすさの方が本番では大事な場面が多いです。
ここはそのままチームに共有しても使えるように、確認項目だけ並べます。
thinkingBudget が設定ファイルに残っていないか(grep で全プロジェクト確認推奨)thinkingLevel の値を本番相当で試したかここは大事です。移行は常に正義ではありません。
次のどれかに当てはまるなら、3.1 を急いで入れる理由は薄いです。
逆に、次の人は移行検討の価値があります。
ちょうどDIYで棚を作り直すときに似ています。「ネジ1本替えるだけ」のつもりが、開けてみたら設計ごと変わっていた、という体験です。
現場目線で言うと、2.5系から3.1への移行は、仕様差分を埋める作業というより、会話制御の再設計です。
特に、
この3つに依存していたなら、移行コストはそれなりに出ます。
一方で、ここを整理できるなら、コードはむしろ読みやすくなります。モデルに曖昧な役割を持たせず、アプリ側で責任分界を持つ形です。地味だけど、本番ではこちらの方が断然強い。
本記事の内容はGoogle公式ドキュメントと公式発表(2026-03-26)をもとに構成しています。プレビュー段階のため、GA時に仕様が変更される可能性があります。
Gemini Live API 2.5→3.1 の移行でまず見るべきは、次の3つです。
thinkingBudget の廃止 → thinkingLevel に合わせて品質を再調整するGoogle が drop-in upgrade として扱うな、と明記している以上、これは「軽いアップデート」ではありません。
移行前にやるべきことは、コードを一気に置換することではなく、壊れる3点を先に洗い出し、代替実装を切って、回帰テストの観点を決めることです。
読者のチームで共有するなら、この記事のチェックリストから始めてください。そこから、実際にどの会話フローが壊れるかを一つずつ潰していくのが一番早いです。
今回の変更は、派手さはありませんが、音声エージェントの本番運用ではかなり効きます。逆に言うと、ここを雑に見ると、あとで地味に苦しむ。それだけ。
Q. Gemini 2.5 Flash Live はいつまで使えますか?
A. 現時点(2026-03-26)では廃止時期は公式発表されていません。3.1はプレビュー段階のため、GA後も2.5が一定期間並行提供される可能性があります。公式ドキュメントで最新情報を確認してください。
Q. 3.1 はすでに本番利用できますか?
A. 現在は gemini-3.1-flash-live-preview というプレビューステータスです。本番環境での利用は自己判断になります。GAアナウンス後に改めて移行を検討するのが安全です。
Q. thinkingLevel の有効な値は何ですか?
A. 公式では low / medium / high が使用可能とされています。ただしプレビュー段階のため、GA時に変更される可能性があります。公式ドキュメントで常に最新仕様を確認することを推奨します。
ハードウェア系エンジニアとして22年・2000件超の単独SOL業務を経験。現在は複数のサービスをAI駆動で開発・運営しながら、Gemini・Claude・OpenRouter APIなどを日常的に検証・運用している。「で、実際のところどうなの?」が口癖。カタログスペックより、動かしてみてどうだったかを優先して書いている。
Gemini 3.1 Flash Lite
Gemini 3.1 Flash Lite——開発者向け軽量版
META-MARK × AI
ローカルAIを動かすGPU、ちゃんと選べていますか?
VRAM・性能・コスパをMetaScoreで数値化。AIアプリ別の推奨ハードウェア要件も確認できます。