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密鑰。

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