Skip to main content
大模型本身沒有記憶——它不會記得你上一句說了什麼。所謂”多輪對話”,本質是每次請求都把完整的對話歷史一起發給模型。本指南講清在 API易 平臺上,四種呼叫格式各自怎麼維護歷史、有哪些坑。
本文示例端點統一為 https://api.apiyi.com,金鑰用你的 API易 令牌。涉及模型:gpt-5.4-minideepseek-v4-progemini-3.5-flashclaude-sonnet-4-6

核心原理:自己維護歷史

記住一句話就夠了:模型無狀態,對話歷史由你(客戶端)維護,每輪把全部歷史重新發一遍。
每多一輪,就把上一輪的”使用者提問”和”模型回覆”追加到歷史陣列末尾,再整體發出。四種格式的差異只是歷史陣列叫什麼名字、角色怎麼寫而已。
在 API易 平臺,請一律採用”自己維護歷史”的方式。 不要依賴任何服務端會話狀態(如 OpenAI Responses 的 previous_response_id)——經閘道轉發後該機制不保證生效,詳見下文 OpenAI 原生一節。

OpenAI 相容模式(多模型通用)

最通用的方式,端點 /v1/chat/completions。歷史放在 messages 數組裡,每條帶 rolesystem / user / assistant)。換個 model 名就能用同一套程式碼調不同模型(gpt、deepseek、claude、gemini…)。
一套程式碼多模型:把上面的 model 換成 deepseek-v4-proclaude-sonnet-4-6gemini-3.5-flash 等任意模型,多輪邏輯完全不變。模型清單見 模型與價格總覽

推理模型的歷史處理

deepseek-v4-pro 這樣的推理模型,響應裡會多一個 reasoning_content(思考過程)欄位。
歷史裡只放 content,不要回傳 reasoning_content 思考過程只是本輪的中間產物,回傳它既浪費 token,也不符合上游規範(DeepSeek 官方直連甚至會因此報 400)。正確做法是追加歷史時只取 content
推理模型在響應解析上的更多細節,見 推理模型輸出

OpenAI 原生格式(Responses API)

端點 /v1/responses。多輪時把完整歷史作為 input 陣列傳入(每條帶 role / content),用法與相容模式同理:
不要依賴 previous_response_id / conversation / store 等服務端狀態。 經 API易 閘道實測:傳 previous_response_id 不報錯(返回 200),但下一輪並不會記得上一輪內容,GET /v1/responses/{id} 也不可用。因此在 API易 平臺,Responses API 也請按上面的自管理歷史input 陣列)方式使用。

Gemini 原生格式

端點 /v1beta/models/{model}:generateContent。歷史放在 contents 數組裡,注意 role 取值是 user / model(不是 assistant),每條的內容在 parts 裡。
更省事的寫法:官方 google-genai SDK 的 client.chats.create(...) 會自動維護 contents 歷史,你只管 send_message,無需手動拼接。
Gemini 3 系列響應的 part 上會帶 thoughtSignature(思維簽名)。普通文本多輪只回傳 text 即可記住上下文(更省 token);只有在函式呼叫等需要嚴格推理連續性的場景才需把 thoughtSignature 原樣回傳——官方 SDK 會自動處理。詳見 Gemini 原生呼叫函式呼叫

Anthropic 原生格式

端點 /v1/messages。歷史放在 messages 數組裡,role 取值 user / assistantcontent 用字串簡寫即可。注意 max_tokens 必填
也可以用官方 anthropic SDK,把 base_url 指向 https://api.apiyi.com 即可。響應是 content 塊陣列,解析細節見 Claude 流式與非流式響應

四種格式對比

選型建議:要用同一套程式碼調多家模型 → 首選 OpenAI 相容模式;要用某家原生獨有能力(Gemini 思維簽名 / 程式碼執行、Claude 思考塊與快取、OpenAI 內建工具)→ 用對應原生格式

常見問題

是。每輪都要把完整歷史重新發送,所以輸入 token 隨輪數增長,費用也隨之上升。省錢主要靠上下文快取:相同的歷史字首會自動命中快取價(遠低於原價)。各家快取見 OpenAI 快取Claude 快取Gemini 快取
沒有硬性要求,但歷史越長越貴、也可能超出模型上下文視窗。常見策略:① 滑動視窗——只保留最近 N 輪;② 摘要壓縮——把早期對話總結成一段話放進 system;③ 始終保留 system 指令 + 最近若干輪。按業務對”記憶深度”的需要權衡。
OpenAI 相容與 Anthropic:放在 messages 最前面(相容模式用 role:"system";Anthropic 用頂層 system 欄位或首條訊息)。Gemini:用 config.system_instruction。系統指令只需設定一次,不必每輪重複追加。
不要。 思考過程是本輪中間產物,歷史裡只回傳最終 content(Gemini 只回傳 text)。回傳思考既費 token,部分上游還會報錯。函式呼叫場景下 Gemini 的 thoughtSignature 是例外——官方 SDK 會自動處理。
在 API易 平臺不建議依賴服務端會話狀態。OpenAI Responses 的 previous_response_id 經閘道轉發後不保證生效(實測不記憶)。請統一採用客戶端自維護歷史的方式,行為最穩定、跨模型一致。

相關連結