LangGraph實戰

哥不是小萝莉發表於2024-06-30

1.概述

前段時間LangChain釋出了LangGraph,它引起了很多關注。LangGraph 的主要優勢在於它能夠實現迴圈工作流,這對於在 LLM 應用程式中模擬類似代理的行為至關重要。本篇部落格,筆者將從介紹 LangGraph 的功能和用例,強調它與典型的有向無環圖 (DAG)工作流的區別,並討論如何構建更具互動性和迭代性的基於 LLM 的系統。換句話說,就是更好的 AI 代理實現。

2.內容

LangGraph是一個功能強大的庫,用於構建基於大型語言模型(LLM)的有狀態、多參與者應用程式。它旨在建立代理和多代理工作流,以實現複雜的任務和互動。

2.1 LangGraph的核心優勢

LangGraph在設計上具有三個核心優勢,使其成為構建代理應用程式的首選框架之一。

  • 迴圈支援:LangGraph允許使用者定義涉及迴圈的流程,這對於大多數代理架構來說是必不可少的。這種能力使LangGraph有別於基於有向無環圖(DAG)的解決方案,後者不直接支援迴圈。
  • 細粒度控制:作為一個非常低階的框架,LangGraph為使用者提供了對應用程式的流程和狀態的細粒度控制。這對於建立可靠、可預測的代理至關重要,因為代理需要在複雜的環境中做出明智的決策。
  • 內建永續性:LangGraph還包括內建的永續性功能,使代理能夠記住過去的互動並使用這些資訊來指導未來的決策。這種永續性還支援高階的人機迴圈,使代理能夠與人類使用者進行更自然、更有效的互動。

2.2 LangGraph的靈感來源

LangGraph的靈感來自兩個著名的資料處理框架:Pregel和Apache Beam。Pregel是一個用於大規模圖處理的系統,它使用一種稱為“Pregel模型”的程式設計模型,該模型基於圖的遍歷和訊息傳遞。Apache Beam是一個用於構建可擴充套件資料處理管道的統一程式設計模型,它支援多種執行引擎和資料來源。

LangGraph的公共介面還從NetworkX中汲取了靈感,NetworkX是一個用於複雜網路分析的Python庫。NetworkX提供了一組豐富的工具和演算法,用於分析和操作圖資料,LangGraph的公共介面旨在提供類似的靈活性和功能。

2.3 LangGraph與LangChain的關係

LangGraph由LangChain的建立者LangChain Inc構建,但它可以獨立於LangChain使用。LangChain是一個用於構建基於LLM的應用程式的框架,它提供了一組工具和服務,用於簡化與LLM的互動和管理。雖然LangGraph可以與LangChain一起使用以提供額外的功能和整合,但它也可以作為獨立框架使用,以利用其獨特的優勢和功能。

2.4 LangGraph有哪些應用場景?

LangGraph 作為一個使用 LLM 構建有狀態、多參與者應用程式的庫,具有廣泛的應用場景。以下是一些可能的應用領域:

1. 對話代理和聊天機器人

LangGraph 可以用於構建複雜的對話代理和聊天機器人,能夠處理多輪對話、上下文理解和個性化互動。透過使用迴圈和分支,LangGraph 使代理能夠根據使用者的輸入和對話歷史做出明智的決策。

2. 推薦系統

LangGraph 可以用於構建個性化的推薦系統,根據使用者的興趣、歷史行為和上下文資訊提供相關的建議。透過使用永續性,LangGraph 使推薦系統能夠記住使用者的偏好並隨著時間的推移進行改進。

3. 遊戲開發

LangGraph 可以用於構建具有智慧對手和複雜遊戲邏輯的影片遊戲。透過使用迴圈和分支,LangGraph 使遊戲 AI 能夠做出戰略性的決策,並根據遊戲狀態做出實時響應。

4. 自然語言處理

LangGraph 可以用於構建自然語言處理應用程式,如文字分類、實體識別和語義分析。透過使用 LLM 和永續性,LangGraph 使這些應用程式能夠理解和生成自然語言,並隨著時間的推移進行學習和改進。

5. 智慧助理

LangGraph 可以用於構建智慧助理應用程式,如日程安排、任務管理或購物助手。透過使用迴圈和分支,LangGraph 使智慧助理能夠根據使用者的需求和偏好提供個性化的建議和幫助。

6. 人機互動

LangGraph 可以用於構建人機互動應用程式,如虛擬助手或客戶支援聊天機器人。透過使用人在環功能,LangGraph 使這些應用程式能夠與人類使用者進行自然、直觀的互動。

7. 資料分析

LangGraph 可以用於構建資料分析應用程式,如欺詐檢測、異常檢測或模式識別。透過使用流式處理支援,LangGraph 使這些應用程式能夠實時處理和分析資料,並根據需要進行擴充套件。

3.LangGraph 中的核心概念和狀態管理

LangGraph 的關鍵要素之一是其良好的狀態管理系統。在 LangGraph 中,每次執行圖都會啟動一個狀態,圖內的節點會在處理過程中傳遞和修改該狀態。此狀態不僅僅是一組靜態資料,而是由每個節點的輸出動態更新的,然後影響迴圈內的後續操作。

為了簡化實現,LangGraph 提供了預定義類,例如MessageGraph,它是為涉及聊天模型的應用程式量身定製的。此設定允許狀態由聊天訊息列表組成,直接利用 LangChain 聊天模型的輸出來促進自然而連貫的對話。

3.1 思路鏈、錶鏈和 LangGraph

LangGraph 的多功能性使其成為簡單聊天機器人之外的一系列應用程式的理想選擇。它能夠處理非線性、迴圈的工作流程,非常適合需要持續反饋的場景,例如自適應學習系統、複雜的決策工具或動態模擬環境. LangGraph 允許開發人員構建應用程式,其中 LLM 可以根據新資訊重新評估和修改其策略或響應,模仿更像人類的互動模式。

透過閱讀論文《CHAIN-OF-TABLE: EVOLVING TABLES IN THE REASONING CHAIN FOR TABLE UNDERSTANDING》,我們可以知道該論文中介紹了一種使用一系列類似 SQL 的操作(包括選擇、分組、排序等)來最佳化從結構不良的表格中提取資料的技術。透過將提取的資料插入到新列中,該方法顯著增強了表格與 SQL、人工解釋以及 LLM 處理的相容性。

上圖中的對比突出了三種使用複雜表格進行推理的方法:

  • a. 通用推理在複雜表格中進行多步推理時遇到困難,因為騎車人的國籍和姓名組合在一個單元格中,無法提供正確答案。
  • b. 程式輔助推理試圖透過生成和執行類似 SQL 的程式來解決這個問題,但仍然無法準確地解析姓名和國籍。
  • c. 連結串列方法迭代地應用一系列表格操作,將表格轉換為更適合查詢的格式,使 LLM 能夠準確地得出正確答案。

3.2 永續性、人機互動和圖形視覺化

LangGraph 支援不同的功能,例如內建永續性、人機互動、視覺化以及一項稱為“時間旅行”的功能。下表提供了每個功能的高階概述。

示例程式碼如下所示:[ 示例入口 ]

1.永續性

LangGraph 具有內建的永續性機制,可以在圖執行過程中儲存和恢復狀態。這對於長時間執行的應用程式或需要跨多個會話維護狀態的應用程式特別有用。
要啟用永續性,你可以在建立圖時設定一個檢查點(checkpoint)。檢查點是一個儲存圖當前狀態的點,可以在需要時恢復。以下是如何在 LangGraph 中設定檢查點的示例:

import langgraph as lg

# 建立一個圖
G = lg.Graph

# 新增一些節點和邊
# ...

# 設定檢查點
G.set_checkpoint('my_checkpoint')

一旦設定了檢查點,您就可以在圖執行過程中的任何時間點儲存或恢復狀態。例如,要儲存當前狀態,您可以使用以下程式碼:

G.save_checkpoint('my_checkpoint')

要恢復先前儲存的狀態,您可以使用以下程式碼:

G.load_checkpoint('my_checkpoint')

透過這種方式,您可以確保在發生錯誤或需要停止執行時不會丟失狀態。

2.人機互動

LangGraph 還支援人機互動(Human-in-the-loop,HITL),允許您在圖執行過程中進行人工干預。這對於需要人類輸入或批准的應用程式特別有用。
要啟用 HITL,您可以在圖中新增一個特殊的節點,該節點將等待人類輸入。以下是如何在 LangGraph 中新增 HITL 節點的示例:

import langgraph as lg

# 建立一個圖
G = lg.Graph

# 新增一些節點和邊
# ...

# 新增一個 HITL 節點
hitl_node = G.add_node(lg.HitlNode)

# 將 HITL 節點連線到其他節點
# ...

當圖執行到達 HITL 節點時,它將暫停並等待人類輸入。您可以使用以下程式碼提供輸入:

G.provide_input(hitl_node, 'my_input')

一旦提供了輸入,圖將繼續執行。

3.圖形視覺化

LangGraph 提供了一些工具來視覺化圖的結構。這對於除錯或理解複雜圖的邏輯特別有用。
要視覺化圖,您可以使用 LangGraph 的 draw 方法。以下是如何使用 draw 方法視覺化圖的示例:

import langgraph as lg

# 建立一個圖
G = lg.Graph

# 新增一些節點和邊
# ...

# 繪製圖
G.draw('my_graph.png')

這將在名為 my_graph.png 的檔案中生成圖的視覺化表示。您可以使用任何支援的影像格式,如 PNG、JPEG 或 SVG。

4.如何使用LangGraph來開發一個應用程式

1. 安裝 LangGraph

首先,您需要在您的開發環境中安裝 LangGraph。您可以使用 pip 來安裝 LangGraph:

pip install langgraph

2. 定義應用程式的流程

LangGraph 允許您使用圖來表示應用程式的流程。圖中的每個節點表示一個操作或決策點,邊表示節點之間的連線。您可以使用 Python 程式碼來定義圖的結構。
例如,以下是一個簡單的圖定義,其中包含兩個節點(A 和 B)和一個邊(從 A 到 B):

import langgraph as lg

# 建立一個空圖
G = lg.Graph

# 新增節點 A
A = G.add_node('A')

# 新增節點 B
B = G.add_node('B')

# 新增從 A 到 B 的邊
G.add_edge(A, B)

3. 實現節點功能

一旦您定義了圖的結構,您需要實現節點的功能。每個節點可以執行任意的 Python 程式碼,包括與 LLM 或其他外部服務的互動。
例如,以下是一個簡單的節點實現,它使用 Hugging Face 的 transformers 庫來執行文字分類任務:

from transformers import pipeline

# 載入一個預訓練的文字分類器
classifier = pipeline('text-classification')

def classify_text(node, inputs):
    # 對輸入文字進行分類
    result = classifier(inputs['text'])
    
    # 返回分類結果
    return result['label']

# 將節點功能附加到圖中的節點 A
G.nodes['A'].set_function(classify_text)

4. 執行應用程式

最後,您可以執行應用程式以檢視其執行情況。您可以使用 LangGraph 的 run 方法來執行圖中的節點,並根據需要提供輸入資料。
例如,以下是如何執行上述示例應用程式的程式碼:

# 提供輸入資料
inputs = {'text': '我喜歡吃披薩'}

# 執行應用程式
result = G.run(inputs)

# 列印結果
print(result)

5.總結

LangGraph 為開發者提供了構建更智慧化應用的工具,這些應用能夠更好地反映人類思維過程和互動的動態性。隨著我們不斷探索和嘗試 LLM(大型語言模型)的功能,LangGraph 等工具成為從靜態、一次性互動轉向連續、上下文感知對話和流程的理想選擇。

6.結束語

這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!

另外,博主出書了《Kafka並不難學》和《Hadoop大資料探勘從入門到進階實戰》,喜歡的朋友或同學, 可以在公告欄那裡點選購買連結購買博主的書進行學習,在此感謝大家的支援。關注下面公眾號,根據提示,可免費獲取書籍的教學影片。