不用 LangChain 的 RAG:無需 Python 框架建構生產級檢索管線
LangChain 成為了 RAG 的預設起點。但越來越多的生產團隊正在離開它——原因包括抽象開銷、除錯困難和供應商鎖定。以下是替代方案。
每當有人在 Reddit、Stack Overflow 或任何 AI Discord 上問「我該怎麼建構 RAG」時,LangChain 已經成為了預設推薦。這是有道理的:在 2023-2024 年間,它讓人們從零到一個可運作的原型比其他任何工具都快。你可以用五十行 Python 程式 碼連接一個向量資料庫、一個嵌入模型和一個聊天補全端點。
但越來越多的生產團隊正在悄悄地將其移除。不是因為 LangChain 不好——它確實幫助引導了 RAG 生態系統。他們移除它是因為那些讓 LangChain 在原型階段表現出色的特性在生產規模下變成了負擔。
如果你正在評估如何在不使用 LangChain 的情況下建構 RAG 管線,或者在考慮是否應該遷移,這是一篇誠實的分析:到底有什麼問題、有哪些替代方案,以及什麼時候 LangChain 仍然是正確的選擇。
抽象稅
每個框架都有代價。你用控制權換取便利性。當抽象是穩定的、文件齊全的,並且能清晰地映射到你對底層系統的心智模型時,這種權衡是值得的。
LangChain 的抽象在生產環境中的這三個方面都表現不佳。
版本變動。 LangChain 的 API 介面在各版本之間變化劇烈。基於 langchain==0.0.x 建構的團隊發現他們的程式碼被 0.1.x 破壞,然後又被 langchain-core / langchain-community 的拆分再次破壞。在原型環境中,你固 定一個版本就繼續前進。在有 CI/CD 管線、相依性稽核和安全審查的生產系統中,每次破壞性變更都要消耗工程時間。
除錯黑盒。 當 RAG 管線回傳一個不好的答案時,你需要檢查每個階段:查詢轉換、嵌入、檢索步驟、重排序和提示詞組裝。LangChain 將每一個都包裹在層層抽象中——鏈、可執行物件、回呼——這使得很難看到每個步驟實際發生了什麼。團隊報告說花在除錯框架上的時間比除錯管線邏輯的時間還多。
簡單管線的過度工程化。 大多數生產 RAG 系統遵循一個簡單直接的模式:嵌入查詢、搜尋向量儲存、將上下文組裝到提示詞中、呼叫模型。這大概是 100 行直接程式碼。LangChain 為本質上是線性資料流的東西引入了鏈、代理、輸出解析器、檢索器和記憶物件等概念。認知開銷是真實的,特別是在讓新工程師熟悉程式碼庫時。
供應商耦合。 LangChain 透過其整合層支援數十個 LLM 供應商、向量儲存和嵌入模型。但這個整合層意味著你依賴 LangChain 來維護每個供應商的包裝器。當供應商更新他們的 SDK 時,你要等 LangChain 跟上。當你想使用供應商特定的功能時,你要與抽象作鬥爭才能存取它。
這些都不意味著 LangChain 是一個糟糕的專案。它意味著這個框架是為廣度和入門速度最佳化的,而不是為生產中重要的營運關注點最佳化的:可除錯性、穩定性和透明性。