LangGraph 是一种将任务流程模块化的编程框架,通过状态图(StateGraph)构建灵活且高效的智能对话系统。本篇文章将通过 3 个迷你程序逐步深入 LangGraph 的图编程核心思想,帮助您快速上手并了解其实际应用潜力,初步了解 Agent 工作流控制的方法。
1. LangGraph 简介
LangGraph 是一种基于图的编程框架,用于组织和管理复杂任务的工作流。它的核心思想是将任务分解为“节点”(Node),并通过“边”(Edge)定义这些节点之间的逻辑关系。
相比于传统的线性流程控制,LangGraph 的图结构更适合处理动态任务分支、多任务协作等复杂场景。
主要优势包括:
- 模块化设计:任务逻辑清晰且易于扩展。
- 灵活的状态管理:通过图的结构实现动态任务切换和条件处理。
- 多工具集成:支持接入外部工具和大模型(如 OpenAI 和 Google Gemini)。
2. 为什么选择 LangGraph?
在传统的对话系统中,开发者常常面临以下挑战:
- 任务分支逻辑复杂,难以维护;
- 多工具协作的集成成本高;
- 大规模上下文处理缺乏高效解决方案。
LangGraph 则通过状态图和内存管理等特性,解决了这些痛点。例如,LangGraph 支持通过条件逻辑选择合适的工具或模型,同时保留会话上下文,显著提升开发效率。
3. LangGraph 编程的 6 个基本步骤
- 定义任务的状态结构(State)。
- 创建各任务逻辑的节点函数(Node)。
- 初始化任务的状态图(StateGraph)。
- 定义节点之间的连接关系(Edge)。
- 添加内存管理或条件处理(可选)。
- 编译图并运行任务流。
4. 通过 3 个迷你程序掌握 LangGraph
以下我们设计了 3 个渐进式的迷你程序,涵盖基础对话、上下文记忆和工具调用等核心功能。
4.1 程序一:基础对话系统
目标:实现一个简单的聊天机器人,处理用户输入并返回回复。
from typing import Annotated, TypedDict
from langgraph.graph import StateGraph, START
from langgraph.graph.message import add_messages
from llm_utils import get_llm
# 定义状态类型
class State(TypedDict):
messages: Annotated[list, add_messages]
def chatbot(state: State):
"""简单聊天机器人"""
llm = get_llm()
return {
"messages": [llm.invoke(state["messages"])]}
# 创建并编译图
graph = (
StateGraph(State)
.add_node("chatbot", chatbot)
.add_edge(START, "chatbot")
.compile()
)
def chat():
"""运行聊天界面"""
while True:
user_input = input("User: ")
if user_input.lower() in ["quit", "exit", "q"]:
print