Gemini 4 Argon 具備長解碼功能,可生成超過單一要求輸出限制的內容,用於深度推論工作,最多可達 100 萬個詞元的統一脈絡窗口 (輸入、思考和輸出共用 1,048,576 個詞元)。
只變更模型 ID 並不會啟用長解碼功能。如未進行額外設定,串流通話的輸出內容會在 64,000 個權杖處停止,非串流通話則會在 32,000 個權杖處停止。如要啟用長解碼功能,最快的方法是升級 Google GenAI SDK,並將 max_output_tokens 設為大於 65,536。本指南說明長解碼的運作方式、使用時機,以及如何透過 generateContent 啟用。
解碼作業時間
單一串流或 SDK 要求最多可產生 64,000 個權杖,非串流 REST 要求最多可產生 32,000 個權杖。如果回覆需要更多詞元,模型會透過多個要求和回覆躍點生成回覆,每個躍點都會從上一個躍點停止的位置繼續。
- 輸入和輸出詞元數量限制統一:輸入、思考、函式呼叫和最終回覆共用 100 萬個詞元的視窗。輸出內容最多可使用 1,048,576 個詞元,扣除輸入內容的詞元數。
- 每個躍點的上限:一個躍點最多可傳回 65,536 個輸出權杖。非串流 REST 要求最多可傳回 32,768 個詞元。
- 接續信號:如果模型達到上限且仍有詞元,回應會以
finish_reason: CONTINUATION和continuation_token結尾。 - 下一個躍點:用戶端會再次傳送相同要求,並附上權杖。模型會從停止處繼續訓練。
- 所有躍點的總數:
max_output_tokens會一併設定所有躍點的思考和輸出權杖總數。 - 停止信號:模型用完所有
max_output_tokens後,回覆會以finish_reason: MAX_TOKENS結尾。
遇到困難問題時,躍點可能會將所有權杖用於內部思考,並傳回空白文字和 continuation_token。這是正常現象,最終答案會在後續躍點中傳送。
預設輸出內容限制
如果沒有長時間解碼,單一要求會受到下列限制:
- 透過 Google GenAI SDK (
generate_content) 傳送串流和非串流要求:預設為 64K 輸出詞元。 - 直接非串流 REST 呼叫 (
generateContent):預設為 32K 個輸出詞元。在非串流 REST 呼叫中,如果將max_output_tokens設為大於 32,768,且未設定continuation_token,系統會傳回400錯誤。
| 如何呼叫模型 | 輸出限制 (不含長解碼) | 啟動時解碼時間過長 | 建議行動 |
|---|---|---|---|
| Google GenAI SDK 最新版本 | 64K | 是,SDK 會繼續為您服務 | 設定 max_output_tokens。 |
| Google GenAI SDK (舊版,非串流) | 64K | 否 | 升級 SDK。 |
REST streamGenerateContent |
64K | 是,使用自己的迴圈 | 編寫迴圈。請參閱選項 2。 |
REST generateContent |
32K | 可以,但必須使用自己的迴路 | 編寫迴圈。請參閱選項 2。 |
使用長解碼的時機
大多數要求會在單一要求限制內完成 (串流和 SDK 呼叫為 64K 個詞元,非串流 REST 呼叫為 32K 個詞元)。如果回覆所需的思考和輸出詞元總數超過單一要求允許的數量,請使用長解碼。提高 max_output_tokens 可讓模型有更多空間推論困難問題,而不是讓標準答案變長。
| 工作負載 | 使用長解碼? | 原因 |
|---|---|---|
| 艱澀的數學、科學、研究和正式證明 | 是 | 模型可使用超過 64,000 個詞元,探索及檢查推論過程。 |
| 最困難的程式設計和代理式工作 | 是 | 部分工作需要超過 64,000 個權杖的思考和程式碼,才能產生一個回覆。大多數程式設計和代理工作都能在 64K 內完成。 |
| 評估架構會在輸出內容達到上限時停止 | 是 | 當模型花費整個 64K 或 32K 要求進行思考時,長解碼功能可避免答案遭到截斷。 |
| 對話、問與答、摘要、分類和擷取 | 否 | 這些工作完成時,使用的詞元數量遠低於 32,000 個。 |
| 要求固定長度,例如「寫一本 70 萬字的小說」 | 否 | 模型未遵循長度目標。 |
| 代理在多個短對話輪中呼叫工具 | 否 | 每回合都很短。每輪輸出大量內容時,統一的 100 萬個輸入和輸出窗口很快就會填滿。 |
| 提示接近 100 萬個輸入詞元的上限 | 否 | 輸出內容只能使用 100 萬減去輸入內容。 |
| 對延遲時間敏感的要求 | 否 | 長時間解碼可能需要幾分鐘。 |
設定較高的 max_output_tokens 可讓模型有更多時間思考難題,但模型仍會決定要撰寫多少內容。如要控制模型使用的推論資源量,請設定 thinking_level。
開啟長解碼
您可以使用 Google GenAI SDK 自動執行長解碼 (選項 1,建議大多數應用程式採用),或自行編寫接續迴圈 (選項 2)。這兩種選項都支援完整的 100 萬個詞元脈絡窗口。
| 選項 1:Google GenAI SDK (建議) | 方法 2:自行建立串流迴圈 | 選項 2:自訂非串流迴圈 | |
|---|---|---|---|
| 誰會發起各個躍點 | SDK。你設定了 max_output_tokens。 |
程式碼,在每個檢查點或捨棄串流後 | 您的程式碼,每 3.2 萬個詞元 |
| 每項要求的權杖數 | 每個躍點 64,000 次 | 每個串流 64,000 個,超過 32,000 個後,每 5,000 個符記設一個檢查點 | 每項要求 32,000 個 |
| 每項要求的時間限制 | 20 分鐘 | 20 分鐘 | 20 分鐘 |
| 儲存空間 | 沒有伺服器儲存空間 | 沒有伺服器儲存空間 | 沒有伺服器儲存空間 |
| 適用情境 | 大多數應用程式 | 串流 REST 呼叫端和自訂測試控管 | 簡單的評估架構 |
加密的 continuation_token 會在要求之間傳遞模型狀態,因此伺服器不會儲存任何內容。
方法 1:使用 Google GenAI SDK (建議)
在最新版 Google GenAI SDK 中,automatic_continuation 預設為啟用,適用於串流和非串流呼叫,因此您不需設定。如果將 max_output_tokens 設為高於每個要求的上限,SDK 會自動執行接續跳轉,並傳回一個合併的回覆。
升級 SDK。
Python
pip install -U "google-genai>=2.30.1"JavaScript
npm install "@google/genai@>=2.29.1"將
max_output_tokens設為大於 65,536。Python
from google import genai from google.genai import types client = genai.Client() # Reads GEMINI_API_KEY response = client.models.generate_content( model="gemini-4-argon", contents="Write a complete, rigorous proof of the prime number theorem.", config=types.GenerateContentConfig( max_output_tokens=262_144, # Total thinking and output for all hops thinking_config=types.ThinkingConfig(thinking_level="high"), automatic_continuation=True, # Default. Shown for clarity. ), ) print(response.text) print("Finish reason:", response.candidates[0].finish_reason) print("Prompt size:", response.usage_metadata.initial_prompt_token_count) print("Billed tokens:", response.usage_metadata.total_token_count)JavaScript
import { GoogleGenAI, ThinkingLevel } from "@google/genai"; const ai = new GoogleGenAI({}); // Reads GEMINI_API_KEY const response = await ai.models.generateContent({ model: "gemini-4-argon", contents: "Write a complete, rigorous proof of the prime number theorem.", config: { maxOutputTokens: 262144, // Total thinking and output for all hops thinkingConfig: { thinkingLevel: ThinkingLevel.HIGH }, automaticContinuation: true, // Default. Shown for clarity. }, }); console.log(response.text); console.log("Finish reason:", response.candidates?.[0]?.finishReason); console.log("Prompt size:", response.usageMetadata?.initialPromptTokenCount); console.log("Billed tokens:", response.usageMetadata?.totalTokenCount);
請注意以下幾點:
- 串流:
generate_content_stream(Python) 和generateContentStream(JavaScript) 也會繼續為您服務。如果串流在檢查點後中斷,SDK 會從該檢查點繼續。 - 逾時:逾時和重試適用於每個躍點,而非完整執行。
- 手動控制:如要自行執行迴圈,請設定
automatic_continuation=False(Python) 或automaticContinuation: false(JavaScript)。然後按照選項 2 的步驟操作。 - 用量:用量欄位會顯示所有躍點的總和。如要取得提示的大小,請讀取
initial_prompt_token_count。請參閱「計算詞元數」。
選項 2:自行編寫迴圈
如果您直接呼叫 REST、使用沒有最新 SDK 的語言,或需要完整控制權,請自行編寫迴圈。您也可以參考 Python 和 JavaScript/TypeScript 的 Google GenAI SDK 實作。
請遵守下列規則:
- 在每個躍點上傳送相同要求。請傳送原始
contents、system_instruction、tools和generation_config。維持max_output_tokens不變。 - 請勿將部分輸出內容新增至
contents。continuation_token會攜帶模型的狀態,包括思考過程。 - 只傳送最新的權杖。每個權杖都包含先前的所有進度。
- 當
finish_reason為CONTINUATION時繼續。因其他原因而停止。 - 將最後一個躍點後的部分合併。將所有躍點的部分合併為對話記錄的一個模型回合。
Python
from google import genai
from google.genai import types
client = genai.Client() # Reads GEMINI_API_KEY
PROMPT = "Write a complete, rigorous proof of the prime number theorem."
parts = []
token = None
while True:
response = client.models.generate_content(
model="gemini-4-argon",
contents=PROMPT, # The original contents on every request
config=types.GenerateContentConfig(
max_output_tokens=262_144, # The same total on every request
thinking_config=types.ThinkingConfig(thinking_level="high"),
automatic_continuation=False, # You run the loop
continuation_token=token,
),
)
candidate = response.candidates[0]
if candidate.content and candidate.content.parts:
parts.extend(candidate.content.parts)
token = candidate.continuation_token
if candidate.finish_reason != types.FinishReason.CONTINUATION or not token:
break
print("".join(p.text for p in parts if p.text and not p.thought))
print("Finish reason:", candidate.finish_reason)
JavaScript
import { GoogleGenAI, ThinkingLevel } from "@google/genai";
const ai = new GoogleGenAI({}); // Reads GEMINI_API_KEY
const PROMPT = "Write a complete, rigorous proof of the prime number theorem.";
const parts = [];
let token = undefined;
let candidate = undefined;
while (true) {
const response = await ai.models.generateContent({
model: "gemini-4-argon",
contents: PROMPT, // The original contents on every request
config: {
maxOutputTokens: 262144, // The same total on every request
thinkingConfig: { thinkingLevel: ThinkingLevel.HIGH },
automaticContinuation: false, // You run the loop
continuationToken: token,
},
});
candidate = response.candidates?.[0];
if (candidate?.content?.parts) {
parts.push(...candidate.content.parts);
}
token = candidate?.continuationToken;
if (candidate?.finishReason !== "CONTINUATION" || !token) {
break;
}
}
console.log(parts.filter((p) => p.text && !p.thought).map((p) => p.text).join(""));
console.log("Finish reason:", candidate?.finishReason);
REST
# Hop 1: send the request with max_output_tokens.
curl -s "https://generativelanguage.googleapis.com/v1beta/models/gemini-4-argon:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"role": "user", "parts": [{"text": "Write a complete, rigorous proof of the prime number theorem."}]}],
"generationConfig": {
"maxOutputTokens": 262144,
"thinkingConfig": {"thinkingLevel": "high"}
}
}'
# Hop 2: if finishReason is CONTINUATION, send the same request plus the token.
curl -s "https://generativelanguage.googleapis.com/v1beta/models/gemini-4-argon:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"role": "user", "parts": [{"text": "Write a complete, rigorous proof of the prime number theorem."}]}],
"generationConfig": {
"maxOutputTokens": 262144,
"thinkingConfig": {"thinkingLevel": "high"}
},
"continuationToken": "TOKEN_FROM_HOP_1"
}'
如果某個躍點完全用於思考,則會傳回空白的 text,並附上 finishReason: "CONTINUATION"。將此視為正常進度,並要求下一個躍點:
{
"candidates": [{
"content": {"role": "model", "parts": [{"text": ""}]},
"finishReason": "CONTINUATION",
"continuationToken": "CiQ4ZmQ3..."
}],
"usageMetadata": {
"promptTokenCount": 142,
"candidatesTokenCount": 0,
"thoughtsTokenCount": 32768,
"totalTokenCount": 32910
}
}
串流迴圈還需要一項規則。超過 32,768 個詞元後,串流每 5,000 個詞元會傳送一個檢查點詞元。將新區塊保留在待處理清單中。如果區塊含有 continuation_token,請將待處理的區塊移至已提交的輸出內容,並儲存權杖。如果串流中斷,請捨棄待處理的區塊,並從最後一個權杖繼續。如果串流在第一個檢查點之前中斷,請再次傳送原始要求。
設定max_output_tokens
max_output_tokens 會設定所有躍點的思考和輸出合併限制。調低這個值不會讓模型生成更簡潔的回覆,而是會提早截斷回覆。
| 工作負載 | 建議採用 max_output_tokens |
|---|---|
| 現有應用程式的限制低於 32K | 將其提高至 32,768。 |
| 長時間的程式設計和代理工作 | 從 65,536 開始。 |
| 困難的數學、科學、研究和證明 | 測試值介於 262,144 到 1,048,576 之間,並扣除輸入詞元。 |
如要減少權杖用量,請調低 thinking_level。使用 high 處理最困難的推論工作。對於大多數程式設計和代理工作,請使用 medium (預設)。使用 low 處理較不複雜的工作。
處理長時間執行的要求
Gemini 4 Argon 思考困難問題的時間比 Gemini 3.x 模型長,因此請增加用戶端逾時時間,以免長時間要求提早中斷連線。
- 非串流呼叫:伺服器會在 10 分鐘後關閉連線。
- 串流通話:伺服器會在 20 分鐘後關閉串流。
- 用戶端逾時:將 HTTP 讀取逾時設為 20 分鐘。3 分鐘或 5 分鐘的逾時時間會提早停止要求。
在 Python 中,以毫秒為單位設定用戶端的逾時時間:
client = genai.Client(http_options=types.HttpOptions(timeout=1_200_000)) # 20 minutes
對於用戶端輪詢的作業,Interactions API 會在伺服器上執行長時間解碼。請參閱背景執行。
模型用完所有輸出權杖時繼續
如果回應以 MAX_TOKENS 結尾,仍會包含 continuation_token。您有以下兩種選擇:
- 繼續:使用權杖和較高的
max_output_tokens傳送相同要求。值必須高於目前使用的權杖數量。否則,API 會傳回 400 錯誤。 - 重新開始:傳送原始要求,並提高
max_output_tokens,且不含權杖。您必須支付兩次執行的費用。
計算詞元數
有了自動接續功能,usage_metadata 會回報所有躍點的總計。SDK 會加總各個計數欄位:prompt_token_count、cached_content_token_count、candidates_token_count、thoughts_token_count 和 total_token_count。
prompt_token_count 會加總每個躍點的輸入權杖。每次跳轉時,系統都會將提示詞和截至當時已生成的內容,一併傳回模型做為輸入內容,因此後續每次跳轉都會重複計算相同的詞元。舉例來說,如果使用 Google GenAI SDK,1,000 個權杖的提示會產生 200,000 個權杖的思考和輸出內容,需要四個躍點:
| Hop | 傳送至模型的輸入內容 | 輸入內容詞元 |
|---|---|---|
| 1 | 提示詞 | 1,000 |
| 2 | 提示 + 躍點 1 | 66,536 |
| 3 | 提示詞 + 躍點 1 和 2 | 132,072 |
| 4 | 提示詞 + 1 到 3 個躍點 | 197,608 |
| 總計 | 397,216 |
prompt_token_count 回報約 397,000 個詞元 (重複的 hop 輸入內容會透過隱含快取自動折抵 95%),total_token_count 則回報約 597,000 個詞元,即使實際的脈絡大小只有約 201,000 個詞元:1,000 個詞元的提示,加上 200,000 個詞元的思考和輸出內容。非串流 REST 迴圈會使用 32K 跳轉,因此相同輸出內容需要七次跳轉,並回報 695,128 個輸入權杖。
| 如何呼叫模型 | usage_metadata顯示的內容 |
成本 | 提示詞大小 |
|---|---|---|---|
| Google GenAI SDK,自動接續 (預設) | 所有躍點的總和 | 直接讀取用量欄位。 | 請參閱 usage_metadata.initial_prompt_token_count (Python) 或 usageMetadata.initialPromptTokenCount (JavaScript)。 |
使用 automatic_continuation=False 的 SDK 或 REST |
每個回應一個躍點 | 在每個躍點中新增每個欄位。 | 從第一個躍點讀取 prompt_token_count。 |
prompt_token_count 和 total_token_count 是每個躍點的總和,而非環境的大小。請勿使用這些屬性決定何時摘要或修剪對話記錄 (脈絡壓縮),或強制執行脈絡限制。如要預估脈絡大小,請將表格中的提示大小加到 candidates_token_count 和 thoughts_token_count。
執行長解碼前,請先更新代理架構、評估工具或 Proxy:
- 代理程式和評估工具:如果程式碼會壓縮內容或在達到權杖限制時停止執行,請使用
initial_prompt_token_count(或 REST 中的第一個躍點prompt_token_count),而非加總的prompt_token_count。如果回應在單一躍點中完成,這兩個欄位會回報相同的值,因此短期測試不會顯示問題。 - 呼叫 REST 的 Proxy 和閘道:每個 REST 回應只會回報自己的躍點。將各躍點的欄位加總,即可算出成本,並保留第一個躍點的
promptTokenCount做為提示大小。否則,使用者看到的數字會與 SDK 使用者看到的不同。 - 記錄和序列化回應:SDK 會在用戶端計算
initial_prompt_token_count。不會出現在 REST 回應或 SDK 的 JSON 輸出內容中,例如model_dump()。如果日後需要,請將其儲存為獨立值。
如果您在自己的迴圈中串流,usage_metadata 會在每個串流中累積。只保留每個資料串流的最後一個值,然後將各個躍點的值加總。
瞭解計費方式
您需要為每個躍點中的每個詞元付費,包括僅含思考過程的躍點。
- 快取折扣:隱含快取會在每個躍點中,將重複輸入的內容折扣 95%。新用戶優惠期間,快取輸入內容的費用為每 100 萬個詞元 $0.10 美元,而非 $2.00 美元。
- 快取失效:快取會在閒置 15 到 20 分鐘後失效。如果兩次跳轉之間間隔太久,系統會再次收取完整輸入費率。
- 失敗的非串流躍點:只有在回覆完成時,系統才會向您收費。失敗或捨棄的要求費用為 $0 美元。
- 中斷的串流:如果串流在 32,000 個權杖前中斷,費用為 $0 美元。之後,您只需支付到最後一個檢查點權杖的費用,因為您可以從該處繼續。
疑難排解
| 問題 | 原因和修正方式 |
|---|---|
使用 CONTINUATION 時,輸出內容會在 64K 或 32K 處停止 |
模型仍有權杖,但要求未繼續執行。請升級 SDK 或新增循環。 |
使用 MAX_TOKENS 時,輸出內容會在 64K 或 32K 處停止 |
max_output_tokens未設定或太低。請設為大於 65,536 的值。 |
空白文字,MAX_TOKENS |
模型已將所有權杖用於思考,提高 max_output_tokens 或降低 thinking_level。 |
| 400:「Continuation token has already used output tokens...」(接續符記已使用輸出符記...) | max_output_tokens 未超過目前使用的權杖數量。提高。 |
thinking_level: "minimal" 錯誤,或 thinking_budget 錯誤 (thinking_level) |
Gemini 4 Argon 不支援minimal。請使用 low、medium 或 high。設定 thinking_level 或 thinking_budget,但不要同時設定兩者。 |
thinking_budget、temperature、top_p 或 top_k 的警告 |
Gemini 4 Argon 會忽略或對應這些欄位。使用 thinking_level,並移除取樣參數。 |
| 要求會在 3 或 5 分鐘後結束 | 用戶端逾時時間過短。將時間設為 20 分鐘。 |
| 脈絡壓縮開始時間過早 | 測試架構會讀取加總後的輸入內容。請改為閱讀initial_prompt_token_count。 |
限制
- OpenAI 相容性端點:不支援長解碼。輸出內容達到單次要求上限時,就會停止。
- 舊版 SDK:如果版本低於附註中的最低版本,系統不會自動繼續。
- 長度:模型不會遵循詞元長度或字數目標。
檢查清單
- 將 Google GenAI SDK 升級至最低版本。
- 將
max_output_tokens設為大於 65,536。 - 請使用
thinking_level(low、medium或high),而非thinking_budget。 - 將 HTTP 讀取逾時時間設為 20 分鐘。
- 使用
initial_prompt_token_count取得內容大小和壓縮資訊。 - 先執行一個提示詞做為測試,再進行大規模評估。