簡短回答
這不是介面故障,是思考預算把輸出額度用光了。 推理模型(如gpt-6.1-sol)會先生成一段思考過程(reasoning tokens)再寫正文,這兩部分共用 max_tokens 額度。當思考還沒結束額度就用完,正文還沒來得及寫就被截斷,於是你收到的是一個空結果。
把 max_tokens 調大(建議 1000 以上),或降低推理強度,問題就會消失。
問題現象
通常有兩種表現: 一種是直接收到錯誤,HTTP 狀態碼 429 或 500:completion_tokens 是 300、reasoning_tokens 也是 300、text_tokens 是 0——模型跑了 300 個 token,全部花在思考上,一個字正文都沒寫。
後臺日誌會顯示這次呼叫”成功”並已扣費,這和你看到的報錯並不矛盾:模型確實生成了內容(思考過程),只是沒有輸出你可見的正文。
為什麼會這樣
推理模型的輸出分兩段:max_tokens(或 max_completion_tokens、max_output_tokens)限制的是兩段之和,不是正文長度。
所以當 max_tokens 設成 200~500 這種偏小的值,而任務又需要較多推理時,額度會在思考階段就耗盡,finish_reason 變成 length,正文為空。
三步確認
1
第一步:看 finish_reason
如果是
length,說明輸出被截斷了,不是模型拒絕回答。如果是 stop 卻仍然為空,再看第二步和第三步。2
第二步:看 usage 裡的 reasoning_tokens
找到
usage.completion_tokens_details.reasoning_tokens,和 completion_tokens 比較。兩者接近或相等,說明額度基本都被思考吃掉了。3
第三步:看請求裡的 max_tokens
如果你顯式設定了
max_tokens 且數值較小(例如 300),基本可以確定原因。沒有設定時,檢查是否被客戶端 SDK 或框架預設填了一個小值。解決方法
調大 max_tokens
最直接。普通對話 1000~2000,複雜推理或長文 4000 以上。推理模型的思考開銷可能比你預期的大得多。
降低推理強度
如果模型支援
reasoning_effort,從 high 降到 medium 或 low,思考消耗會明顯減少。改用流式輸出
把
stream 設為 true。思考過程會以獨立事件即時返回,你能直接看到模型在做什麼,也不會出現「整段正文憑空消失」。不同模型的引數對照
常見問題
為什麼後臺日誌顯示成功,我卻收到了報錯?
為什麼後臺日誌顯示成功,我卻收到了報錯?
日誌記錄的是”上游完成了生成並結算”,它不判斷正文是否為空。這兩件事是分開的:生成成功不代表正文有內容。
原樣重試有用嗎?
原樣重試有用嗎?
基本沒用。同樣的提示詞、同樣的
max_tokens,模型大機率仍然把額度花在思考上。調整引數比重試有效。這種空響應會扣費嗎?
這種空響應會扣費嗎?
會。思考 token 也是真實消耗,通常按輸出 token 計費。可以用 呼叫日誌 核對具體扣費金額。
所有模型都會這樣嗎?
所有模型都會這樣嗎?
不是。只有支援思考過程的推理模型才有這個問題。普通的非推理模型(如
gpt-4o、deepseek-chat)把 max_tokens 全部用於正文,不會出現空內容。設成很大的 max_tokens 會不會多花錢?
設成很大的 max_tokens 會不會多花錢?
不會。
max_tokens 是上限,不是實際消耗。模型寫完了就停,按實際生成的 token 計費。相關文件
max_tokens 是什麼?不設定會怎樣?
引數含義、命名演變和各模型的預設值
流式與非流式怎麼選?
長響應和推理模型優先用流式
模型呼叫報錯怎麼排查?
400、401、429、503 等錯誤的通用排查路徑
怎麼看懂日誌裡的計費金額?
確認請求是否計費、扣了多少