GitHub Repo
langchain-openai 1.6.6 修補串流錯誤漏報,失敗事件改拋例外
新版讓 Responses API 串流中的明確失敗事件傳遞到應用層,同步與非同步介面均加入測試。沒有終止事件的截斷情境仍須另驗證,既有例外處理與重試策略也須核對。

LangChain 於 9 月 24 日發布 langchain-openai 1.6.6,修正 Responses API 串流收到失敗事件時未拋出例外的問題。GitHub 發布紀錄與 PyPI 日期一致,修補已隨正式套件提供;使用串流答案驅動後續工作的代理,因而能更明確地辨識生成失敗。[發布紀錄](https://github.com/langchain-ai/langchain/releases/tag/langchain-openai==1.6.6)、[PyPI 套件](https://pypi.org/project/langchain-openai/1.6.6/)
問題源自事件轉換層。七月的使用者回報以模擬 HTTP 傳輸重現:伺服器先送出部分文字,再發送失敗事件,舊版仍可能正常結束迭代,沒有例外,也沒有保留錯誤資訊。若應用程式把「迴圈結束」視為成功,截斷答案便可能被儲存或送入下一個步驟。[原始回報](https://github.com/langchain-ai/langchain/issues/39039)
新程式在收到 `response.failed` 時讀取回應內的錯誤資料,收到 `error` 時組合錯誤代碼與訊息,兩者均拋出 `ValueError`。失敗回應沒有錯誤內容時,則以回應識別碼建立訊息。這讓應用層可以捕捉失敗,但若既有處理器只捕捉供應商 SDK 的專用例外,仍須調整。[修補差異](https://github.com/langchain-ai/langchain/pull/40791/files)
已經送到畫面或寫入暫存區的文字,也需要應用自行處理。依此次程式變更推論,拋出例外不會自動撤回先前輸出的片段;若下游會將內容解析成工具參數,應先確認回應完成,再決定是否提交操作。錯誤訊息可供診斷,但是否重試及退避多久仍是另一層策略。
修補同時加入同步 `stream()` 與非同步 `astream()` 測試,涵蓋伺服器錯誤、缺少錯誤內容及速率限制事件。這些測試使用模擬串流,能驗證事件傳遞,尚不能代表真實網路、代理伺服器及服務中斷的完整行為。[測試程式](https://github.com/langchain-ai/langchain/pull/40791/files)
修補範圍也有界線:新增分支處理的是明確失敗事件,`response.incomplete` 仍走原有路徑。原回報另提到完全沒有終止事件的串流;從此次差異看,不能據此認定這種截斷也已獲得處理。[問題與重現案例](https://github.com/langchain-ai/langchain/issues/39039)
工程上,升級後宜以「已輸出文字後失敗」驗證介面狀態、追蹤紀錄與重試策略,並保留完成狀態檢查。這是依修補行為提出的部署建議:例外讓失敗可見,應用仍須決定如何標示部分答案,以及重試前如何避免重複執行已完成的工作。