AI News HubLIVE
站內改寫2 分鐘閱讀

使用LangGraph在Python中構建智慧體工作流

本文詳細介紹瞭如何使用LangGraph在Python中構建完整的智慧體工作流,從單次模型呼叫到具有持久對話記憶的工具使用智慧體。涵蓋了狀態、節點、邊的定義,訊息歷史管理,模型呼叫,工具註冊與路由,以及推理迴圈追蹤。

來源Machine Learning Mastery作者: Bala Priya C

本文詳細介紹瞭如何使用LangGraph在Python中構建完整的智慧體工作流,從單次模型呼叫到具有持久對話記憶的工具使用智慧體。

引言

大多數AI智慧體設定能良好處理單輪問答:接收問題,呼叫模型,返回答案。但更困難的問題很快出現:智慧體可能需要查詢資料庫、記住之前訊息的上下文,或讓使用者清楚瞭解模型的決定過程。如果不為每個用例構建自定義管道,解決這些挑戰往往會讓實現變得複雜。

LangGraph為處理這些問題提供了清晰的結構。智慧體被表示為圖,節點是工作單元,邊定義下一步執行什麼,共享狀態物件在每個步驟中攜帶完整訊息歷史。模型在節點內執行,因此每個推理步驟、工具呼叫和響應都成為圖狀態的一部分。這使得整個執行流程可見、可檢查,並可供後續任何節點使用。

理解狀態、節點和邊

每個LangGraph圖由三個元件構建:

  • 狀態(State):一個TypedDict,作為整個圖的共享記憶體。每個節點從中讀取並寫入更新。欄位如果不更新則保持不變。
  • 節點(Nodes):普通的Python函式。節點接收當前狀態作為引數,並返回要更新的欄位字典。使用add_node註冊。
  • 邊(Edges):定義執行順序。add_edge(A, B)表示A完成後執行B。add_conditional_edges允許基於路由函式分支。

透過歸約器(reducer)可以處理欄位的累積。例如,使用operator.add可以使列表欄位追加而非替換。LangGraph的MessagesState使用add_messages歸約器,支援訊息去重和排序。

管理對話歷史

MessagesState是一個內建狀態型別,包含一個messages欄位,使用add_messages歸約器。每次節點返回新訊息時,它們會被追加到現有列表。我們可以擴充套件該狀態以新增其他欄位(如客戶ID)。

在節點中呼叫模型

核心節點函式將當前訊息列表傳遞給模型並附加其響應。使用ChatOpenAI(或任何LangChain聊天模型)並返回AIMessage。系統訊息可以在每次呼叫時設定而不儲存在狀態中。

註冊工具並路由工具呼叫

使用@tool裝飾器定義工具,然後用bind_tools繫結到模型。ToolNode負責執行工具呼叫,tools_condition作為條件邊,根據模型輸出是否有tool_calls路由到工具節點或結束。從工具節點返回模型節點的邊形成閉環,使模型能根據工具結果生成最終答案。

追蹤推理迴圈

當模型使用工具時,實際過程比最終輸出更復雜:模型先產生帶有tool_callsAIMessage,工具節點執行並返回ToolMessage,模型再次呼叫後生成最終回答。這是標準的ReAct模式,每次工具使用需要兩次模型呼叫。

設定與安裝

安裝所需包:pip install langgraph langchain-openai python-dotenv,建立.env檔案存放OpenAI API金鑰。

本文從零開始構建圖,涵蓋所有步驟,為構建更復雜的智慧體工作流奠定基礎。