如何從 v0.0 鏈遷移
LangChain 自初始發布以來已發展,許多原始的「Chain」類別已被棄用,轉而支持更靈活和強大的 LCEL 和 LangGraph 框架。
本指南將幫助您將現有的 v0.0 鏈遷移到新的抽象概念。
已棄用實作的工作原理
即使許多這些實作已被棄用,它們在程式碼庫中仍然受到支援。但是,不建議將它們用於新的開發,我們建議使用以下指南重新實作它們!
要查看每個已棄用實作的計劃移除版本,請查看其 API 參考。
先決條件
這些指南假設您對以下概念有一定的熟悉度
LangChain 維護了許多舊版抽象概念。其中許多可以透過 LCEL 和 LangGraph 原語的簡短組合重新實作。
LCEL
LCEL 旨在簡化使用 LLM 建構實用應用程式以及組合相關組件的過程。它透過提供以下功能來實現這一點
- 統一介面:每個 LCEL 物件都實作
Runnable
介面,該介面定義了一組通用的調用方法(invoke
、batch
、stream
、ainvoke
等)。這使得自動且一致地支援有用的操作(例如中間步驟的串流和批次處理)成為可能,因為由 LCEL 物件組成的每個鏈本身也是一個 LCEL 物件。 - 組合原語:LCEL 提供了許多原語,可以輕鬆組合鏈、平行化組件、新增後備方案、動態配置鏈內部結構等等。
LangGraph
LangGraph 建立在 LCEL 之上,允許高效能地編排應用程式組件,同時保持簡潔易讀的程式碼。它包括內建持久性、對循環的支援,並優先考慮可控制性。如果 LCEL 對於更大或更複雜的鏈變得笨拙,它們可能會受益於 LangGraph 實作。
優點
對於現有的 v0.0 鏈,使用這些框架具有一些優勢
- 產生的鏈通常實作完整的
Runnable
介面,包括在適當情況下的串流和非同步支援; - 鏈可能更容易擴展或修改;
- 鏈的參數通常會浮出水面,以便更輕鬆地自訂(例如,提示),而以前的版本傾向於子類別,並且具有不透明的參數和內部結構。
- 如果使用 LangGraph,則鏈支援內建持久性,允許透過聊天歷史記錄的「記憶」來實現對話體驗。
- 如果使用 LangGraph,則可以串流鏈的步驟,從而實現更大的控制和自訂性。
以下頁面協助從各種特定鏈遷移到 LCEL 和 LangGraph
- LLMChain
- ConversationChain
- RetrievalQA
- ConversationalRetrievalChain
- StuffDocumentsChain
- MapReduceDocumentsChain
- MapRerankDocumentsChain
- RefineDocumentsChain
- LLMRouterChain
- MultiPromptChain
- LLMMathChain
- ConstitutionalChain
查看 LCEL 概念文件 和 LangGraph 文件 以獲得更多背景資訊。