兩種 Recovery 順序,解決的是同一個問題
AI 編碼過程中,模型可能會輸出無效代碼、幻覺錯誤或偏離上下文。 Recovery workflow 是定義當產生結果不可用時,系統如何自動恢復-是重試、回滾,還是切換到備用模型。
核心矛盾在於:恢復順序決定了代價與成功率的平衡。 Default order(預設順序)通常遵循「先輕後重」原則:先重試目前請求,再檢查上下文完整性,然後嘗試簡化提示,最後回滾到上一個穩定狀態。而 Responses API recovery order 則是 OpenAI Responses API 建議的恢復路徑:先驗證回應結構,再使用 API 內建的 fallback 機制(如 fallback 參數),最後才觸發外部回滾。
你的團隊到底適合哪一種?
Default order 適合以下場景:
- 團隊使用本地或自建 AI 編碼工具(如 Continue.dev、CodeGPT 等),可以自訂 recovery 邏輯
- 編碼工作流程包含多步驟 agent 呼叫(如程式碼產生→檢查→偵錯),每一步都可能失敗
- 你更關心靈活性和可自訂性,願意花時間調試 recovery 順序
Responses API recovery order 適合以下場景:
- 團隊已經存取或計劃存取 OpenAI Responses API(相容於 Chat Completions)
- 需要減少 recovery 邏輯的維護成本,利用 API 內建功能
- 工作流程相對簡單:單次產生→檢查→接受/拒絕,不需要複雜的回溯狀態
真實場景:一個失敗的 recovery 案例
小張的團隊使用 Default order 建立了一個程式碼來審查 agent。當模型產生的程式碼有語法錯誤時,預設 recovery 流程是:先重試 3 次,如果失敗就回滾到上一次通過審查的程式碼。
有一天,模型連續 5 次產生了一個包含不存在的 API 調用,但語法正確。預設順序的「重試」和「回滾」都沒觸發(因為語法偵測通過),導致有 bug 的程式碼合併到主分支。直到 CI 失敗,團隊才發現問題。
這個案例揭露了 Default order 的一個盲點:**重試和回滾只針對顯性錯誤(如語法錯誤、超時),對語意錯誤無效。 ** 後來他們改進了 recovery 邏輯:在重試之前加入「語意一致性檢查」——用另一個模型快速驗證產生程式碼是否在業務上下文中合理。

對比維度:從 4 個角度決策
1. 恢復粒度
- Default order:可以精細控制每個步驟的恢復動作。例如,當程式碼審查失敗時,可以只重新產生被標記的程式碼區塊,而不是整個函數。代價是邏輯複雜,需要維護狀態機。
- Responses API:恢復粒度較粗。 API 的
fallback參數允許指定一個備用模型或 prompt,但無法針對子步驟復原。如果你的工作流程是多步驟 agent,Responses API 可能不夠彈性。
2. 與現有工具鏈的集成
- Default order:可以與任何 AI 編碼工具配合,但需要自行實作 recovery 邏輯。許多開源框架(如 LangChain、AutoGPT)提供了 recovery hooks,但預設順序需要你手動設定。
- Responses API:與 OpenAI 生態深度綁定。如果你的工具鏈已經使用 OpenAI 模型,整合成本很低。但如果你想切換模型(如 Anthropic、Google),recovery 邏輯需要重寫。
3. 失敗處理的可觀測性
- Default order:可以記錄每次 recovery 動作的日誌(重試次數、回滾原因等),方便調試。
- Responses API:API 傳回的結構化回應中包含
finish_reason和錯誤訊息,但 recovery 內部過程(如 fallback 切換)不透明。如果需要審計,這會是一個痛點。
4. 性能與成本
- Default order:重試和回滾會增加延遲和 token 消耗。但你可以針對性最佳化,例如只在錯誤機率高的步驟啟用 recovery。
- Responses API:內建 fallback 的延遲較低,但如果你經常觸發 fallback,成本可能更高(因為調用不同模型可能導致 token 浪費)。

最容易踩的坑:沒有定義「恢復成功」的標準
無論選擇哪種順序,最容易犯的錯誤是 沒有明確什麼算「恢復成功」。
範例:你的 recovery 流程嘗試了 5 次重試,每次 prompt 都稍微不同。但第 5 次的結果仍然有錯,卻被標記為“成功”,因為程式碼通過了語法檢查。結果就是 silently bad code。
正確的做法是:在 recovery 流程的每個出口(包括回溯、fallback 成功、重試成功)都設定一個驗證步驟,確保恢復的結果符合業務品質標準。對於程式碼產生來說,至少需要:語法檢查、類型檢查、lint 規則、與現有程式碼的兼容性檢查。
當兩個都失敗時的備用方案
如果你嘗試了 Default order 和 Responses API recovery order,但仍然頻繁遇到 recovery 失敗,那麼問題可能不在 recovery 順序上,而在最初的 prompt 設計上。
備用方案:
- 簡化 prompt:減少單次產生的任務複雜度,將大需求拆成多個小步驟。
- 增加 human-in-the-loop:當 recovery 連續失敗 3 次以上,自動暫停並通知開發者人工介入。
- 切換模型:如果目前模型在特定類型錯誤上表現不佳,請考慮更換模型或使用不同模型的 ensemble。
下一步
你的選擇取決於團隊的技術堆疊、工作流程複雜度和維運能力。如果追求靈活性和可控性,Default order 更合適;如果想快速存取並減少輪子,Responses API recovery order 是更穩健的起點。
不過,無論選擇哪條路,都需要持續監控 recovery 效果,並根據失敗模式調整順序。沒有一勞永逸的配置。

暫無評論,快來發表你的看法吧