Skip to main content
呼叫 相容模式 時,無論你用的是 OpenAI、Claude、Gemini、Grok、Qwen、GLM 還是其它模型,響應都遵循同一套 OpenAI schema。絕大多數解析邏輯是通用的——只要按本頁的統一寫法處理,換模型不用改程式碼。 本頁幫你把「響應資料處理」一次做對:先講共性,再用一張表列出少數需要相容、但不影響接入的差異點。
請求側(base_url、鑑權、換模型)見 相容模式呼叫。本頁只講響應側:拿到響應後怎麼解析。

兩種模式,同一端點

同一個 /v1/chat/completions,只由 stream 引數決定返回形態:

非流式響應

結構穩定,取 choices[0].message.content 即可:
非流式下七家主流模型高度一致,choices[0].message.content 可無差別取值。部分模型(如 OpenAI 系)message 裡還會帶 annotationsrefusal 等欄位,按需讀取,不用則忽略即可。

流式響應(SSE)

流式以 Server-Sent Events 逐塊推送,每行形如 data: {...},以 data: [DONE] 收尾:
用官方 SDK 時迭代即可,核心是累加 delta.content

接入要點:少數差異,統一處理

不同模型的流式細節略有出入,但只要遵守下面幾條,就能用同一套程式碼相容全部模型
結束塊的 choices 可能是空陣列。 攜帶 usage 的最後一塊,部分模型是 "choices":[](如 gpt-4.1-mini、grok、qwen、glm),直接取 choices[0] 會越界報錯。解析每塊前先判 choices 是否非空。

健壯解析參考實現

不依賴 SDK、直接處理原始 SSE 時,按下面的寫法可覆蓋上述全部差異:
推理模型(grok、qwen、glm 等)流式時會先推送 delta.reasoning_content(思考鏈),再推送 delta.content(正文)。上面的解析只取了 content,因此思考鏈被自動跳過。需要展示思考過程時的處理見 推理模型輸出

usage 與計費

  • usage 在非流式響應裡隨結果一起返回;流式則在尾部某一塊裡返回(位置見上表,建議「讀到即覆蓋」)。
  • 各家欄位細分不同:OpenAI 繫有 completion_tokens_details,Gemini/Claude 額外帶 input_tokens/output_tokens,推理模型帶 reasoning_tokens。統一以 prompt_tokens / completion_tokens / total_tokens 三個標準欄位為準。
流式 usage 的 total_tokens 不要全信。 實測個別模型(如 gpt-5.4-mini)流式尾塊出現 total ≠ prompt + completion 的異常幀,同模型非流式則正常。計費請以賬單為準,不要用流式那一幀的 total 做結算。

相關連結