返回首頁

GitHub Repo

LangChain 社群回報重試篩選陷阱,單一例外類別可能讓非預期錯誤反覆執行

LangChain 1.4.0 的社群重現案例顯示,直接將例外類別傳入 retry_on,可能讓模型與工具重試不符合條件的錯誤。官方文件要求使用例外類別元組或判斷函式,目前修補與完整影響範圍仍待確認。

Dirck van Baburen · Public domain · Image source
zh-Hant

LangChain 社群於 10 月 3 日提交一項代理重試機制回報:在 ModelRetryMiddleware 或 ToolRetryMiddleware 設定 retry_on=TimeoutError,原本希望只重試逾時,實際上卻可能連其他例外一起重試。回報者列出的環境包含 LangChain 1.4.0,並表示開發分支也能重現;截至查閱時,議題仍開放,未列出關聯修補 PR。社群回報

最小案例讓工具固定拋出 KeyError,同時設定最多重試兩次。回報結果是工具共執行三次,最後回傳錯誤訊息,而非第一次失敗就拋出例外。作者追查共用判斷函式,發現程式先檢查 callable(retry_on);Python 例外類別也可呼叫,因此被當成判斷函式,產生具有真值的例外物件,讓篩選條件失去原本意義。重現程式與原因分析

這裡有一個重要邊界:官方 API 將 retry_on 定義為「例外類別元組」或「回傳布林值的函式」,未承諾接受單一類別。工程師可依文件改用 retry_on=(TimeoutError,),注意單一元素元組需要逗號;也可傳入明確的 isinstance 判斷函式。文件另指出,不符合條件的例外應立即向外拋出,不進入重試耗盡後的處理。模型重試 API

技術影響在於代理流程如何辨識失敗。工具中介層預設在重試耗盡後回傳 ToolMessage,讓模型繼續處理;若篩選配置偏離預期,原本應停止的程式錯誤便可能變成對話中的錯誤結果。工具重試 API 對有寫入副作用的工具,反覆執行也可能增加重複操作風險,這是部署上的推論,並非本案已證實的事故。

部署者應核對重試參數,測試不匹配例外是否只執行一次,並檢查錯誤是否確實傳回呼叫端。後續值得追蹤的是上游會新增輸入驗證,或正式支援單一例外類別;目前證據來自社群案例,不能據此認定所有正常配置都受影響。

來源

  1. ModelRetryMiddleware / ToolRetryMiddleware: retry_on=SomeError retries every exception
  2. ModelRetryMiddleware API reference
  3. ToolRetryMiddleware API reference