長いデコードを使用すると、Gemini 4 Argon は、深い推論タスクで 64,000 トークンを超えるトークンを生成できます。最大で、統合された 100 万トークンのコンテキスト ウィンドウ(入力、思考、出力で共有される 1,048,576 トークン)まで生成できます。Interactions API では、バックグラウンド実行で長いデコードを有効にすると、サーバーが各 64, 000 ホップを自動的に生成して 1 つのインタラクションに結合します。
長いデコードの仕組み
1 回のモデル呼び出しで最大 64,000 トークンが生成されます。レスポンスに 64,000 トークンを超えるトークンが必要な場合、サーバーは前のホップが停止した位置から続く 64,000
ホップで生成します。各ホップは、同じインタラクション ID の interaction.steps に model_output
ステップを追加します。これらのステップを結合して、完全なレスポンスを読み取ります。
background: trueとmax_output_tokensを 65,536 より大きく(最大 100 万)して、インタラクションを作成します。- サーバーは最初のホップを生成します(最大 64, 000 トークン)。
- サーバーは最後のホップが停止した位置から次のネクストホップを開始し、モデルが完了するか、
max_output_tokensをすべて使用するまで繰り返します。 - インタラクションをポーリングするか、ストリーミングして結果を取得します。
Python
import time
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-4-argon",
input="Write a complete, rigorous proof of the prime number theorem.",
background=True,
generation_config={
"max_output_tokens": 262144,
"thinking_level": "high",
},
)
while interaction.status in ("in_progress", "queued"):
time.sleep(5)
interaction = client.interactions.get(id=interaction.id)
# Each hop adds a model_output step, so join the text of all of them.
text = "".join(
content.text
for step in interaction.steps
if step.type == "model_output"
for content in step.content
if content.type == "text"
)
print(text)
print("Status:", interaction.status)
print("Usage:", interaction.usage)
JavaScript
import { GoogleGenAI } from "@google/genai";
const client = new GoogleGenAI({});
let interaction = await client.interactions.create({
model: "gemini-4-argon",
input: "Write a complete, rigorous proof of the prime number theorem.",
background: true,
generation_config: {
max_output_tokens: 262144,
thinking_level: "high",
},
});
while (interaction.status === "in_progress" || interaction.status === "queued") {
await new Promise((resolve) => setTimeout(resolve, 5000));
interaction = await client.interactions.get(interaction.id);
}
// Each hop adds a model_output step, so join the text of all of them.
const text = interaction.steps
.filter((step) => step.type === "model_output")
.flatMap((step) => step.content ?? [])
.filter((content) => content.type === "text")
.map((content) => content.text)
.join("");
console.log(text);
console.log("Status:", interaction.status);
console.log("Usage:", interaction.usage);
REST
# 1. Create the background interaction. It returns an ID right away.
ID=$(curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-4-argon",
"input": "Write a complete, rigorous proof of the prime number theorem.",
"background": true,
"generation_config": {"max_output_tokens": 262144, "thinking_level": "high"}
}' | jq -r '.id')
# 2. Poll until the status is no longer in_progress or queued.
# The REST response has no output_text field, so join the text of every model_output step.
while true; do
RESP=$(curl -s "https://generativelanguage.googleapis.com/v1beta/interactions/$ID" \
-H "x-goog-api-key: $GEMINI_API_KEY")
STATUS=$(echo "$RESP" | jq -r '.status')
if [[ "$STATUS" != "in_progress" && "$STATUS" != "queued" ]]; then
echo "$RESP" | jq -r '[.steps[]? | select(.type == "model_output") | .content[]? | select(.type == "text") | .text] | join("")'
echo "$RESP" | jq '{status, usage}'
break
fi
sleep 5
done
出力の上限
ストリーミング インタラクションと非ストリーミング インタラクションのデフォルトの出力トークン上限は 64,000 トークンです。そのため、64,000 トークンまでのレスポンスではコード不要です。64, 000 トークンを超えるトークンを生成するには、バックグラウンド実行を有効にして max_output_tokens を増やします。
| インタラクションの作成方法 | 出力の上限 |
|---|---|
background: false(ストリーミングまたは非ストリーミング) |
65,536 トークン。65,536 を超える値は 400 エラーを返します。長いデコードは近日公開予定です。 |
background: true、max_output_tokens が設定されていない |
65,536 トークン |
background: true、max_output_tokens が 65,536 より大きい |
入力トークンを引いた max_output_tokens(最大 1,048,576) |
長いデコードを使用する場合
ほとんどのリクエストは 64,000 トークン以内に完了します。長いデコードは、1 つのレスポンスでそれ以上の思考と出力が必要な場合にのみ使用してください。
| ワークロード | 長いデコードを使用しますか? | 理由 |
|---|---|---|
| 難しい数学、科学、研究、正式な証明 | ○ | モデルは 64,000 トークンを超えるトークンを使用して、推論を探索して確認できます。 |
| 最も難しいコーディングとエージェント タスク | ○ | 一部のタスクでは、1 つのレスポンスで 64,000 トークンを超える思考とコードが必要です。ほとんどのコーディングとエージェント タスクは 64,000 未満で完了します。 |
| 出力上限で停止する評価ツール | ○ | 長いデコードを使用すると、モデルが思考に 64,000 レスポンスを費やした場合でも、回答が途中で切れるのを防ぐことができます。 |
| チャット、Q&A、要約、分類、抽出 | いいえ | これらのタスクは 32,000 トークン未満で完了します。 |
| 「70 万語の本を書く」など、固定長の要求 | いいえ | モデルは長さの目標に従いません。 |
| 短いターンでツールを呼び出すエージェント | いいえ | 各ターンは短いです。各ターンの出力が大きいと、共有コンテキスト ウィンドウがすぐにいっぱいになります。 |
| 入力上限に近いプロンプト | いいえ | 出力には、入力トークンを引いた 1,048,576 トークンのみを使用できます。 |
| レイテンシの影響を受けやすいリクエスト | いいえ | 長いデコードは数分間実行されることがあります。 |
max_output_tokens を大きく設定すると、モデルは難しい問題について長く考えることができますが、書き込む量を決定するのはモデルです。モデルが使用する推論の量を制御するには、thinking_level を設定します。
長いデコードの実行方法を選択する
バックグラウンド実行は、Interactions API で長いデコードを実行する最も簡単な方法です。コードが各ホップを開始するクライアントサイドの継続は、GenerateContent API で使用できます。Interactions API では、独自の復元力を管理するための高度なオプションとして近日公開予定です。
| バックグラウンド実行(Interactions API) | クライアントサイドの継続(GenerateContent API) | |
|---|---|---|
| 各ホップを開始するユーザー | Google のサーバー | Google GenAI SDK または独自のコード |
| リクエストあたりのトークン数 | 1 回のインタラクションでの max_output_tokens |
ストリームあたり 64,000、非ストリーミング リクエストあたり 32,000 |
| 実行日時 | 最大 24 時間 | 20 分 |
| ストレージ | store: true が必要 |
サーバーに保存されるものはありません。 |
| 最適な用途 | 長いデコードを実行する最も簡単な方法 | 再試行をきめ細かく制御できるため、独自のバックオフ、エラー処理、復元力を構築できます。 |
クライアントサイドの継続を使用するには、GenerateContent API で長いデコードをご覧ください。
長いデコードをストリーミングする
出力と思考の要約が到着したらストリーミングするには、stream: true と thinking_summaries: "auto" を追加します。長いストリームはドロップする可能性があるため、クライアントは再接続する必要があります。バックグラウンド実行ガイドの再接続パターンに従ってください。長いデコードでは、次のルールが追加されます。
- インタラクション ID を保存する:
interaction.createdイベントから読み取ります。 - すべての
event_idを保存する:event_idは、テキストの差分だけでなく、interaction.status_updateイベントでも到着する可能性があります。 last_event_idで再接続する:interactions.getとstream: trueと最後のevent_idを指定して を呼び出します。ストリームはそのイベントの後に続きます。- 最後まで読み取る: 再接続したら、ステータスを確認する前にストリームを最後まで読み取ります。インタラクションが完了した後でも、サーバーは欠落したイベントを再生します。
- 長いタイムアウトを設定する: HTTP 読み取りタイムアウトをストリームあたり 15 ~ 20 分に設定します。
- 5,000 トークンのチャンクで出力する: 最初の 64,000 トークン(最初の 10 分ほど)の後、ストリームは約 5,000 トークンのチャンクで出力を送信します。チャンク間の一時停止は正常です。インタラクションが停止することはないため、接続を開いたままにしてください。
バックグラウンドのステータス
バックグラウンド インタラクションは最大 24 時間実行できます。ステータスが in_progress または
queued でなくなった場合は、次の表を使用して最終状態を処理します。
| ステータス | 意味 | 手順 |
|---|---|---|
completed |
モデルが完了しました。 | steps の model_output ステップを結合して、usage を読み取ります。会話を続けるには、このインタラクションの id を previous_interaction_id として渡します。 |
requires_action |
モデルがツール呼び出しをリクエストしました。 | ツールを実行します。次に、このインタラクションの id を使用して結果を送信します。 |
incomplete |
モデルが max_output_tokens をすべて使用しました。モデルがまだ思考中の場合、テキストは空になることがあります。 |
より高い max_output_tokens でリクエストを再度送信します。 |
failed |
サーバーが完了できなかったか、インタラクションが 24 時間を超えて実行されました。 | リクエストを再試行してください。再度失敗する場合は、インタラクション id をサポートと共有してください。 |
cancelled |
インタラクションをキャンセルしました。 | usage を読み取って、課金対象のトークンを確認します。 |
実行中のインタラクションを停止するには、Python で client.interactions.cancel(id=interaction.id)、JavaScript で client.interactions.cancel(interaction.id)、REST で POST /v1beta/interactions/{id}/cancel を呼び出します。
max_output_tokens を設定する
max_output_tokens は、インタラクション全体の思考と出力の合計上限を設定します。値を小さくしても、モデルの思考が簡潔になるわけではなく、レスポンスが途中で切れてしまいます。
| ワークロード | 推奨される max_output_tokens |
|---|---|
| 上限が 32,000 未満の既存のアプリ | 32,768 に増やします。バックグラウンド実行は必要ありません。 |
| 長いコーディングとエージェント タスク | 65,536(デフォルト)から始めます。バックグラウンド実行は必要ありません。 |
| 複雑な推論、難しい数学、科学、証明 | background: true を設定し、262,144 から始めます(入力トークンを引いた 1,048,576 まで)。 |
使用するトークン数を減らすには、thinking_level を下げます。最も難しい推論タスクには high を使用します。ほとんどのコーディングとエージェント タスクには medium(デフォルト)を使用します。
トークンをカウントする
interaction.usage は、すべてのホップの合計を報告します。total_input_tokens、total_cached_tokens、total_output_tokens、total_thought_tokens、total_tokens の各フィールドを読み取ります。
total_input_tokens は、すべてのホップの入力トークンの合計です。各ホップは、プロンプトとそれまでに生成されたすべてのものを入力としてモデルに送信するため、後続のホップでは同じトークンが再度カウントされます。たとえば、1,000 トークンのプロンプトで 200,000 トークンの思考と出力が生成される場合、4 つのホップが必要です。
| ホップ | モデルに送信された入力 | 入力トークン |
|---|---|---|
| 1 | プロンプト | 1,000 |
| 2 | プロンプト + ホップ 1 | 66,536 |
| 3 | プロンプト + ホップ 1 と 2 | 132,072 |
| 4 | プロンプト + ホップ 1 ~ 3 | 197,608 |
| 合計 | 397,216 |
total_input_tokens は約 397,000 トークンを報告します(繰り返されるホップ入力は暗黙的なキャッシュ保存によって自動的に 95% 割引されます)。実際のコンテキスト サイズは約 201,000 トークンです。1,000 トークンのプロンプトと 200,000
トークンの思考と出力です。
ストリーム中、step.stop イベントと interaction.status_update イベントの両方に usage
(インタラクションの累積)が含まれます。それらを合計するのではなく、最新の usage 値を読み取ります。
課金について
思考のみを含むホップを含め、すべてのホップのすべてのトークンに対して料金が発生します。
- キャッシュ割引: 暗黙的なキャッシュ保存により、各ホップの繰り返し入力が 95% 割引されます。キャッシュに保存された入力の費用は、導入期間中は 100 万トークンあたり $2.00 ではなく $0.10 です。
- キャンセルされたインタラクションと失敗したインタラクション: インタラクションが終了するまでに完了したすべての作業に対して料金が発生します。
トラブルシューティング
| 症状 | 原因と修正 |
|---|---|
| 出力が 64,000 で停止する | background が false であるか、max_output_tokens が設定されていません。background: true と max_output_tokens を 65,536 より大きく設定します。 |
| 400: 「max_output_tokens greater than 65536 is not yet supported with background=false.」 | バックグラウンド実行なしの長いデコードはまだ使用できません。background: true を設定します。 |
| 400: 「store=true is required for background interactions」 | バックグラウンド実行には store: true が必要です。 |
ステータスが incomplete でテキストが空 |
モデルが思考にすべてのトークンを使用しました。max_output_tokens を増やすか、thinking_level を下げます。 |
| コンテキストの圧縮が早すぎる | エージェント フレームワークまたは評価ツールが total_input_tokens を読み取ります。トークンをカウントするをご覧ください。 |
制限事項
- バックグラウンド実行なしの長いデコードはできません:
background: falseのインタラクションは 65,536 トークンで停止します。近日公開予定です。 - 長さの目標はありません: モデルはトークン長や単語数の目標に従いません。