Gemini 4 Argon continuation 指南:為什麼不能再發一句“繼續”

保留原請求、分清用量統計,併為長生成設定明確的停止與預算邊界。

Buda Team
← 返回部落格
Gemini 4 Argon continuation 指南:為什麼不能再發一句“繼續”

一次評測呼叫返回 finish_reason=CONTINUATION,可見正文卻為空。指令碼把它判成失敗,再發一句“繼續”,隨後得到另一條生成軌跡。問題不是模型忘了說話,而是客戶端把同一次生成的續接誤當成了新的對話。

Gemini 4 Argon 的 long decode 用 continuation token 恢復生成狀態。自管客戶端需要攜最新 token 重送原請求;多數應用可以讓支援該協議的 Google Gen AI SDK 負責續接。

一個總額度,拆成多次請求

開發者指南規定,輸入和輸出共享 1,048,576 token。輸出包含 thinking、函式呼叫和最終正文,不是輸入一百萬再加輸出一百萬。

流式單段最多 65,536 輸出 token,直接 HTTP 非流式單次最多 32,768。Long decode 把一次生成拆成多次請求,仍受統一額度與請求輸出預算限制。假設輸入佔 200,000 token,算術上剩餘輸出上限為 848,576;這不是實際生成長度預測。

10 月 13 日公告給出釋出背景。遷移客戶端時,先看當前協議與響應欄位,不把能力榜單當介面說明。

續接沿用原請求,而非新增對話

先決定誰負責續接

路徑配置邊界
Google Gen AI SDKPython google-genai>=2.30.1,JS @google/genai>=2.29.1,合適的輸出預算支援自動續接;最終用量可能已累計。
自管流式 RESTv1beta1 的 streamGenerateContent自己處理 checkpoint、斷流與分段統計。
自管非流式 RESTv1beta1 的 generateContent每請求最多 32,768 token,自己管理有界迴圈。

目前 GenerateContent long decode 只支援 v1beta1,不支援 v1。SDK 預設使用 v1beta1,顯式改版本時要檢查。Interactions API 不支援 long decode;透過 interaction ID 延續普通對話是另一種操作。舊 SDK 與 OpenAI compatibility layer 無法用這些 token 取得長生成。

需要 long decode 時,流式 max_output_tokens 超過 65,536,非流式超過 32,768。不要習慣性開到最大:低延遲聊天、提取和多數短工具輪次不需要這麼長。

自管迴圈必須保留原輸入

首次請求前凍結 contents、system_instruction、tools 和生成配置。續接時重送這些欄位與最新 token,不追加部分輸出,不換成“繼續”提示詞,也不半途改任務。token 包含原提示詞 hash 與生成狀態。

下面是控制流虛擬碼,不是已跑通的 API 客戶端。extract、final_usage 等輔助方法需按實際 SDK 或 REST 響應實現。

original = immutable_copy(authorized_request)
latest_token = absent
for segment in bounded_segment_count:
    response = call_v1beta1(original, latest_token)
    save_redacted_segment_metadata(response)
    accumulate_parts(response)
    reason, token = extract(response)
    if reason == STOP:
        assemble_one_model_turn()
        finish()
    if reason == CONTINUATION and token exists:
        check_elapsed_time_and_total_budget()
        latest_token = token
        continue
    stop_for_explicit_handling(reason, token)

Thinking-only 段可能返回 parts: [{"text": ""}]。有 CONTINUATION 和 token 時,正文空不等於失敗;token 缺失或 finish reason 異常,也不能進入盲重試。

帶 token 的 MAX_TOKENS 表示請求的生成預算用盡。指南說明可提高 cap 繼續,但提高預算應當是一項明確決定:記錄截斷,按獲准新預算繼續,不能偷偷加額度。只有 STOP 後才把所有段組合成一個 model turn,放進後續對話歷史。

三種計數不要混起來

Python SDK 的 generate_content、generate_content_stream 最終響應或 chunk,其 usage_metadata 會累計各次續接的計費 token。不要把重複累計值再相加。

自管 REST 的用量在每請求內累計;取每次請求最終的 prompt、cached-content、candidate、thought 計數,再跨請求相加。不是把每個流式快照都相加。保留單請求賬本與彙總,才方便對賬。

續接會重新 prefill 已生成的片段,所以累計 prompt_token_count 會增長。原始上下文測量使用 initial_prompt_token_count,等生成結束、沒有 continuation token 後再做 compaction。中途改歷史會破壞原請求約定。

符合條件的連續續接可享隱式快取上下文 95% 折扣:至少 6,144 token,文件 TTL 為 15–20 分鐘。它不是整項任務打 95 折扣,thinking、輸出及其他計費仍要算;快取條件不滿足時成本也會變。顯式 context cache 不受支援。

統一預算與單請求上限

舊引數要逐項移除

有效 thinking level 是 LOW、MEDIUM、HIGH;普通 Argon 預設 MEDIUM,cyber-permissive 預設 HIGH。thinking_budget、MINIMAL 返回 HTTP 400。frequency_penalty、presence_penalty、candidate_count 也返回 400;自定義 temperature、top_k、top_p 則被忽略,不能靠改它們可靠調優。

FunctionResponse 要與前一組 FunctionCall 的 ID、名稱和順序對應。工具執行與生成重試分開:斷流不意味著已完成的付款、傳送或資料庫寫入可以重做。

先測停止規則,再放大任務

建議用短響應 STOP、thinking-only 續接、多段原輸入不變、預算耗盡、舊 SDK 或錯誤 endpoint、工具副作用之後斷流六類樣本。檢查請求指紋、終止、用量彙總與副作用日誌。這是建議測試,不是本次真實 API 實測結果。

把遷移清單和脫敏呼叫軌跡留在 Drive。Agent Workspace可承接檔案與獲准程式碼執行;是否支援協議取決於真實客戶端,不從模型選擇器或 wrapper 推斷續接已實現。

哪些任務不用 long decode?

單次響應能在分段上限內完成的摘要、分類和短工具輪次。輸入很大時,可留給輸出的統一預算也更小。

為什麼不能發“繼續”?

新提示詞會開啟新的請求,不是恢復原生成狀態。用 token 攜原請求續接,完整結束後再把輸出寫入歷史。

成本面板讀什麼?

Python SDK 取最終累計值;REST 取各請求最終值之和。標明統計方式並保留 segment ID,避免同一用量算兩次。

先用小規模受控請求證明能續、能停、能算賬,再增加輸出預算。額度更大不是客戶端自動更可靠。