logo

LangGraph:状态机与循环

LangChain 的创始人 Harrison Chase 曾说:“Agent 的本质是一个循环。”

传统的 LangChain 擅长构建 DAG(有向无环图),即 A->B->C 的线性流程。但在构建复杂 Agent 时,我们需要循环(如:写代码 -> 报错 -> 修改 -> 再运行)。

LangGraph 应运而生。它是基于图论的 Agent 编排框架。

[PROMPT_LAB_BANNER]


1. 核心概念:StateGraph

LangGraph 的核心是将 Agent 建模为一个状态机 (State Machine)

stateDiagram-v2
    [*] --> LLM : 输入
    LLM --> Tool : 调用工具
    Tool --> LLM : 返回结果
    
    state LLM {
        [*] --> Thinking
        Thinking --> Deciding
    }
    
    state Tool {
        API_Call --> Parse_Result
    }
    
    LLM --> End : 完成任务
    Tool --> Error : 异常
    Error --> LLM : 重试 (Loop)

State (状态)

一个全局共享的数据对象(通常是 TypedDict)。所有节点都可以读取和修改它。

class AgentState(TypedDict):
    messages: list[BaseMessage]
    current_code: str
    error_logs: str
    iterations: int

Nodes (节点)

执行具体逻辑的函数(如调用 LLM、运行代码)。每个节点接收 State,并返回 State 的更新量。

Edges (边)

控制流程的跳转。

  • 普通边:A -> B(A 跑完直接跑 B)。
  • 条件边 (Conditional Edges):根据 A 的输出决定跑 B 还是 C。这是实现“循环”和“分支”的关键。

2. Hello World: 一个简单的循环 Agent

假设我们要构建一个“Reflexion Coder”:写代码 -> 检查 -> 有错重写 -> 没错结束。

graph LR
    Start((Start)) --> Write[编写代码]
    Write --> Check[运行检查]
    
    Check -->|有错误| Write
    Check -->|通过| End((End))
from langgraph.graph import StateGraph, END

# 1. 定义状态
class State(TypedDict):
    code: str
    error: str

# 2. 定义节点函数
def write_code(state):
    # 调用 LLM 生成代码
    return {"code": "print('hello')"}

def check_code(state):
    # 模拟运行检查
    if "error" in state["code"]:
        return {"error": "Syntax Error"}
    return {"error": ""}

# 3. 定义条件逻辑
def router(state):
    if state["error"]:
        return "write_code" # 有错,循环回去重写
    return "end" # 没错,结束

# 4. 构建图
workflow = StateGraph(State)
workflow.add_node("write_code", write_code)
workflow.add_node("check_code", check_code)

workflow.set_entry_point("write_code")
workflow.add_edge("write_code", "check_code")
workflow.add_conditional_edges(
    "check_code",
    router,
    {"write_code": "write_code", "end": END}
)

app = workflow.compile()

3. Human-in-the-loop (人类介入)

Agent 并不总是可靠的。在关键步骤(如:发送邮件、部署代码),我们需要人类审批。

LangGraph 原生支持断点 (Interrupts)

  • 可以在某个 Node 前暂停。
  • 人类检查 State,甚至修改 State(如帮你改一行代码)。
  • 发送“继续”指令,Agent 从断点处恢复运行。

这对于构建生产级 Agent 至关重要。


4. 为什么选择 LangGraph?

特性LangChain (Legacy)LangGraph
控制流线性 (Chain)图 (Graph) + 循环
状态管理隐式传递显式 State 定义
容错性容易断链易于实现重试和回退
持久化内置 Checkpointer,支持断点续传

小结

LangGraph 并不是一个新的“库”,它是一种设计模式。它强迫开发者显式地定义 Agent 的状态流转。虽然上手门槛比 LangChain 高,但它是构建复杂、可靠 Agent 系统的必经之路。

AI Agent 开发实战手册
AI Engineer

AI Agent 开发实战手册

从 0 到 1 掌握 AI Agent 开发:涵盖自主计划、工具调用、MCP 协议与多智能体编排实战。

AI Agent 开发实战手册LangGraph:状态机与循环

LangGraph:状态机与循环

LangChain 的创始人 Harrison Chase 曾说:“Agent 的本质是一个循环。”

传统的 LangChain 擅长构建 DAG(有向无环图),即 A->B->C 的线性流程。但在构建复杂 Agent 时,我们需要循环(如:写代码 -> 报错 -> 修改 -> 再运行)。

LangGraph 应运而生。它是基于图论的 Agent 编排框架。

Prompt Lab

把这章的知识,直接变成实战能力

进入交互式实验室,用真实任务练 Prompt,10 分钟快速上手。

进入 Prompt Lab →

#1. 核心概念:StateGraph

LangGraph 的核心是将 Agent 建模为一个状态机 (State Machine)

stateDiagram-v2 [*] --> LLM : 输入 LLM --> Tool : 调用工具 Tool --> LLM : 返回结果 state LLM { [*] --> Thinking Thinking --> Deciding } state Tool { API_Call --> Parse_Result } LLM --> End : 完成任务 Tool --> Error : 异常 Error --> LLM : 重试 (Loop)

#State (状态)

一个全局共享的数据对象(通常是 TypedDict)。所有节点都可以读取和修改它。

python
class AgentState(TypedDict): messages: list[BaseMessage] current_code: str error_logs: str iterations: int

#Nodes (节点)

执行具体逻辑的函数(如调用 LLM、运行代码)。每个节点接收 State,并返回 State 的更新量。

#Edges (边)

控制流程的跳转。

  • 普通边:A -> B(A 跑完直接跑 B)。
  • 条件边 (Conditional Edges):根据 A 的输出决定跑 B 还是 C。这是实现“循环”和“分支”的关键。

#2. Hello World: 一个简单的循环 Agent

假设我们要构建一个“Reflexion Coder”:写代码 -> 检查 -> 有错重写 -> 没错结束。

graph LR Start((Start)) --> Write[编写代码] Write --> Check[运行检查] Check -->|有错误| Write Check -->|通过| End((End))
python
from langgraph.graph import StateGraph, END # 1. 定义状态 class State(TypedDict): code: str error: str # 2. 定义节点函数 def write_code(state): # 调用 LLM 生成代码 return {"code": "print('hello')"} def check_code(state): # 模拟运行检查 if "error" in state["code"]: return {"error": "Syntax Error"} return {"error": ""} # 3. 定义条件逻辑 def router(state): if state["error"]: return "write_code" # 有错,循环回去重写 return "end" # 没错,结束 # 4. 构建图 workflow = StateGraph(State) workflow.add_node("write_code", write_code) workflow.add_node("check_code", check_code) workflow.set_entry_point("write_code") workflow.add_edge("write_code", "check_code") workflow.add_conditional_edges( "check_code", router, {"write_code": "write_code", "end": END} ) app = workflow.compile()

#3. Human-in-the-loop (人类介入)

Agent 并不总是可靠的。在关键步骤(如:发送邮件、部署代码),我们需要人类审批。

LangGraph 原生支持断点 (Interrupts)

  • 可以在某个 Node 前暂停。
  • 人类检查 State,甚至修改 State(如帮你改一行代码)。
  • 发送“继续”指令,Agent 从断点处恢复运行。

这对于构建生产级 Agent 至关重要。


#4. 为什么选择 LangGraph?

特性LangChain (Legacy)LangGraph
控制流线性 (Chain)图 (Graph) + 循环
状态管理隐式传递显式 State 定义
容错性容易断链易于实现重试和回退
持久化内置 Checkpointer,支持断点续传

#小结

LangGraph 并不是一个新的“库”,它是一种设计模式。它强迫开发者显式地定义 Agent 的状态流转。虽然上手门槛比 LangChain 高,但它是构建复杂、可靠 Agent 系统的必经之路。

常见问题

开发 AI Agent 需要掌握哪些编程语言?
首选 Python 或 TypeScript。Python 是 AI 生态的基石,而 TypeScript 在开发 MCP Server 和网页端交互时效率极高。借助 Cursor 等 AI 原生编辑器,编程门槛已大幅降低。
MCP 协议目前支持哪些模型?
MCP 是开放协议,目前对 Claude 3.5 系列支持最完美。通过 MCP Proxy,GPT-4o 和 Gemini 也可以间接访问 MCP Server 数据源。
AI Agent 会导致程序员失业吗?
不会,但会改变程序员的工作内容。未来的开发者将从“写代码”转向“管理 Agent 团队”,重点在于系统架构设计、复杂逻辑校验和 Agent 的提示词优化。