GitHub Repo
LangChain 社群重現訊息合併缺陷,developer 角色可能變成無效字串
10 月 31 日的 LangChain 社群回報指出,連續 developer 訊息經合併後,角色名稱可能被串接,導致送出的請求格式失效。另有參與者回報重現,作者已公開修補分支,但尚未見維護者確認或正式合併。

LangChain 在 10 月 31 日收到一項涉及對話歷史處理的缺陷回報:兩則相鄰的 developer 訊息經 merge_message_runs 合併後,角色欄位會變成 developerdeveloper。回報者表示已在 langchain-core 1.7.3 與指定主分支提交重現,另外兩名參與者也貼出相同結果。截至查核時,議題仍開啟。來源:社群回報與重現討論
官方文件說明,這個函式會合併連續且型別相同的訊息,字串內容預設以換行銜接;具有獨立工具呼叫識別碼的 ToolMessage 則不合併。這類整理可用於模型呼叫前的對話處理,因此合併後仍須保留原有的角色資訊。來源:LangChain API 文件
依回報分析,developer 角色透過 SystemMessage 的 additional_kwargs["__openai_role__"] 保存。底層字典合併會串接字串,卻未將這個欄位視為應保留單一值的標籤。結果是內容正常接合,角色卻遭重複拼接;後續轉回 API 訊息時,又直接使用該值。討論還指出,普通 system 訊息與 developer 訊息也可能被合成同一則,改變輸出的角色。來源:根因討論
作者公開的修補分支同時處理兩種情況:相同 developer 標籤只保留一次,system 與 developer 訊息則維持分開。作者聲稱新增測試在原版失敗、修補後通過,但這仍是貢獻者的驗證結果,不能視為正式版本已修復。來源:修補進度
對會串接固定規則與每次請求指令的代理系統,這項回報提示工程師應檢查合併後實際送出的角色欄位。它尚不能證明所有 LangChain 呼叫皆受影響;下一步應關注維護者是否接受修補,以及回歸測試是否涵蓋不同角色的排列順序。