用 LangChain 還是 LangGraph?官方終於站出來表態了

無論是個人還是企業,當我們想要使用 LLM(大模型)的功能開發出有趣或者有價值的應用時,第一個技術問題通常是 “使用什麼工具?”

在本文中,我們將深入探討用於構建 LLM 應用程序的兩個最流行的框架:LangChain 和 LangGraph。

現在生成式 AI 的開發正處於井噴時期,幾乎每天都會出現各種新框架和新技術,所以各位在閱讀本文時請記住,今天是正確的,明天可能就不正確了!

**LangChain 和 LangGraph 的基礎組件  **

通過理解每個框架的不同基礎元素,你將更深入地理解它們在處理某些核心功能方面的關鍵區別。本節的描述並未窮盡列出每個框架的所有組件,而是爲理解它們的整體方法差異提供了一個堅實的基礎。

LangChain

使用 LangChain 主要有兩種方式:**預定義命令的順序鏈(Chain)**和 LangChain Agent。這兩種方式在工具和編排方式上有所不同。鏈採用預定義的線性工作流,而 Agent 則充當一個協調者,可以進行更具動態性(非線性)的決策。

LangGraph

LangGraph 採用了一種不同的方法來構建 AI 工作流。正如其名稱所示,它以圖(Graph)的方式編排工作流。由於其在 AI Agent、過程式代碼和其他工具之間的靈活處理能力,它更適用於線性鏈、分支鏈或簡單 Agent 系統難以滿足需求的複雜應用場景。LangGraph 設計用於處理更復雜的條件邏輯反饋循環,比 LangChain 更加強大。

相比之下,LangChain 更適合線性和基於工具的調用,而 LangGraph 更適合複雜的、多路徑和具有反饋機制的 AI 工作流

**各框架在覈心功能處理方式上的區別  **

LangGraph 和 LangChain 在某些能力上有所重疊,但它們處理問題的方式有所不同。LangChain 主要關注線性工作流(通過鏈)不同的 AI Agent 模式,而 LangGraph 則專注於創建更靈活、細粒度的、基於流程的工作流,其中可以包含 AI Agent、工具調用、過程式代碼等。

總體而言,LangChain 的學習曲線相對較低,因爲它提供了更多的抽象封裝預定義配置,這使得 LangChain 更容易應用於簡單的使用場景。而 LangGraph 則允許對工作流設計進行更細粒度的定製,這意味着它的抽象程度較低,開發者需要學習更多內容纔能有效使用

工具調用(Tool Calling)

LangChain

在 LangChain 中,工具的調用方式取決於是在鏈中按順序執行一系列步驟,還是僅使用 Agent 能力(不在中明確定義)

鏈方式的流程示例

Agent 方式的流程示例:

LangGraph

在 LangGraph 中,工具通常被表示爲上的一個節點****。如果圖中包含一個 **Agent**,那麼 **Agent 負責決定調用哪個工具**,這一決策基於其推理能力。當 Agent 選擇了某個工具後,工作流會跳轉到對應的 “工具節點”(Tool Node),以執行該工具的操作。在 Agent 和工具節點之間的邊可以包含條件邏輯(Conditional Logic),從而**增加額外的判斷邏輯,以決定是否執行某個工具**。這樣,開發者可以擁有更精細的控制能力。如果圖中沒有 Agent,那麼工具的調用方式類似於 LangChain 的鏈,即**根據預定義的條件邏輯在工作流中執行工具**。

包含 Agent 的圖流程示例:

沒有 Agent 的圖的流程示例:

**對話歷史和記憶  **

LangChain

LangChain 提供內置的抽象層來處理對話歷史和記憶。它支持不同粒度級別(granularity)的記憶管理,從而控制傳遞給 LLM 的 token 數量,主要包括以下幾種方式:

此外,開發者還可以自定義長期記憶系統,將對話歷史存儲在外部數據庫中,並在需要時檢索相關記憶。

LangGraph

在 LangGraph 中,State(狀態)負責管理記憶,它通過記錄每個時刻定義的變量來跟蹤狀態信息。State 可以包括:

State 可以在節點之間傳遞,這樣每個節點都能獲取當前系統的狀態。然而,LangGraph 本身不提供跨會話的長期記憶功能,如果開發者需要持久化存儲記憶,可以引入特定的節點,用於將記憶和變量存入外部數據庫,以便後續檢索。

**開箱即用的 RAG 能力  **

LangChain

LangChain 原生支持複雜的 RAG 工作流,並提供了一套成熟的工具,方便開發者將 RAG 集成到應用程序中。例如,它提供了:

開發者可以直接使用 LangChain 提供的 API(如 langchain.document_loaderslangchain.embeddings 和 langchain.vectorstores)來實現 RAG 工作流。

LangGraph

在 LangGraph 中,RAG 需要開發者自行設計,並作爲圖結構的一部分實現。例如,開發者可以創建單獨的節點,分別用於:

這些節點之間可以通過普通邊(Normal Edges)或條件邊(Conditional Edges)進行連接,而各個節點的狀態可以用於****傳遞信息,以便在 RAG 流水線的不同步驟之間共享數據。

**並行處理(Parallelism)  **

LangChain

LangChain 允許並行執行多個鏈或 Agent,可以使用 RunnableParallel 類來實現基本的並行處理。

但如果需要更高級的並行計算異步工具調用,開發者需要**使用 Python 庫(**如 asyncio)自行實現

LangGraph

LangGraph 天然支持並行執行節點,只要這些節點之間沒有依賴關係(例如,一個 LLM 的輸出不能作爲下一個節點的輸入)。這意味着多個 Agent 可以同時運行,前提是它們不是相互依賴的節點

此外,LangGraph 也支持:

**重試邏輯和錯誤處理  **

LangChain

LangChain 的錯誤處理需要由開發者顯式定義,可以通過:

LangGraph

LangGraph 可以直接在工作流中嵌入錯誤處理邏輯,方法是將錯誤處理作爲一個獨立的節點

如果你的任務涉及多個步驟和工具調用,這種錯誤處理機制可能會非常重要

**總之  **

你可以:
✅ 僅使用 LangChain
✅ 僅使用 LangGraph
✅ 同時使用 LangChain 和 LangGraph

此外,你也可以將 LangGraph 的圖結構編排能力與其他 Agent 框架(如微軟的 AutoGen)結合,例如:將 AutoGen 的 Agent 作爲 LangGraph 的節點

LangChain 和 LangGraph 各有優勢,選擇合適的工具可能會讓人感到困惑。

那麼,應該在什麼情況下使用?

僅使用 LangChain:

✅ 你需要快速構建 AI 工作流,例如:

僅使用 LangGraph:

✅ 你的應用場景需要非線性(Non-linear)工作流,例如:

同時使用 LangChain 和 LangGraph:

✅ 你希望:

兩者結合,可以充分發揮各自的優勢,打造更加靈活和強大的 AI 工作流。

https://towardsdatascience.com/ai-agent-workflows-a-complete-guide-on-whether-to-build-with-langgraph-or-langchain-117025509fa0/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/cB5LJitb1M5jmnDhcNmOQA