news 2026/3/2 20:26:57

LangGraph--CompiledStateGraph

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangGraph--CompiledStateGraph

一、类的定位与特点

CompiledStateGraph是一个可运行的智能体工作流,支持:

功能描述
有状态(State)所有节点共享一个 state schema
自动调度框架决定下一个要执行哪个节点
工具调用支持自动判断何时调用 ToolNode
条件分支根据 state 或 judge 函数决定路线
Streaming 输出支持部分生成(如大模型 token 流)
异步执行适合 Web API、服务端执行
Checkpoint错误恢复、回放、持久化
人类参与支持 Human-in-the-loop

二、完整方法(系统结构化总结)

我按照使用频率和逻辑把所有方法分成五类。

方法分类总览

① 执行类(核心运行)

方法说明
invoke同步执行,输入 → 输出
ainvoke异步执行(Web API 场景推荐)
stream同步流式执行
astream异步流式执行(最常用)

② 回放 / 检查点 / 状态类

方法说明
get_state获取执行中的状态(含 memory / checkpoint)
get_subgraphs获取子图(如工具子图)

③ Streaming 事件类

方法说明
astream_events异步事件流(比 astream 更底层)
astream_log记录执行日志(包含 token / 工具调用)
astream_final仅监听最终输出

④ 调度、边控制类

方法说明
_execute_graph内部方法,执行图(你一般不用手动调用)
_get_iterator内部迭代器,为流式输出服务

⑤ 工具相关方法

方法说明
get_tools获取工具节点信息
list_tools返回可调用工具

三、核心方法详解

下面我会依次解释最关键的几个方法,并附带对应 demo。

1. invoke(input) → 同步一次性执行

适用于:

  • 简单流程
  • 不需要流式输出
  • 不需要异步

示例

result=app.invoke({"query":"你好"})print(result)

特点

  • 等所有节点执行完才返回
  • 返回最新的完整 state

2. ainvoke(input) → 异步执行

适合:

  • Web API(Flask / FastAPI)
  • LangServe
  • 高并发场景

示例

result=awaitapp.ainvoke({"query":"你好"})

3. stream(input) → 同步流式执行(逐步输出)

适用于:

  • 终端应用
  • 模型回答长文本时想边生成边显示

示例

forstepinapp.stream({"query":"写一首诗"}):print(step)

4. astream(input) → 异步流式执行

适用于:

  • WebSocket / SSE
  • 前端实时输出
  • 前后端分离部署

示例

asyncforeventinapp.astream({"query":"写一个优美的句子"}):print(event)

输出结构

每个 event 是:

{"node":"某个节点名","state":{...当前 state...},"event":"node_end / tool_start / tool_end / token"等等}

高级方法:astream_events

比 astream 更底层,会输出更详细的事件,包括:

  • token 级别输出
  • 工具调用开始/结束
  • 节点切换
  • 状态更新

示例

asyncforeventinapp.astream_events({"query":"天气如何"}):print(event['event'],event.get('data'))

四、完整 demo

这是一个综合案例,包含:

  • state schema
  • step1 → 条件判断 → OK/FAIL
  • 工具调用节点 ToolNode
  • Streaming 输出

① 构建图结构

fromlanggraph.graphimportStateGraph,MessagesStatefromlanggraph.prebuiltimportToolNode,tools_condition# ======== 定义 State ========classMyState(MessagesState):x:int=0result:str=""# ======== 定义节点逻辑 ========defstep1(state:MyState):new_x=state["x"]+3return{"x":new_x}defok(state:MyState):msg={"role":"assistant","content":"检测通过,执行工具"}return{"result":"通过检查","messages":state["messages"]+[msg]}deffail(state:MyState):msg={"role":"assistant","content":"检测失败,执行工具"}return{"result":"未通过检查","messages":state["messages"]+[msg]}# 工具(模拟)defadd_tool(value:int):""" 加 10 的工具函数。 参数: value (int): 输入数值。 返回: int: 输入值加 10。 """returnvalue+10tools=[add_tool]tool_node=ToolNode(tools)# judge 函数defjudge(state):return"OK"ifstate["x"]>5else"FAIL"

② 构建流图并编译

graph=StateGraph(MyState)graph.add_node("step1",step1)graph.add_node("OK",ok)graph.add_node("FAIL",fail)graph.add_node("tool",tool_node)graph.set_entry_point("step1")# 条件分支graph.add_conditional_edges("step1",judge,{"OK":"OK","FAIL":"FAIL"})# 最后统一走工具节点graph.add_edge("OK","tool")graph.add_edge("FAIL","tool")# 编译图app=graph.compile()

③ astream 流式运行

asyncforchunkinapp.astream({"messages":[],"x":2}):print(chunk)

输出示例(结构化)

{'step1': {'x': 5}} {'FAIL': {'result': '未通过检查', 'messages': [{'role': 'assistant', 'content': '检测失败,执行工具'}]}} {'tool': {'messages': []}}

五、场景级示例

① Web API 示例:Flask + astream

fromflaskimportFlask,request,Responseimportjsonimportasyncio app_server=Flask(__name__)@app_server.route("/run",methods=["POST"])defrun_graph():data=request.jsonasyncdefgenerate():asyncforeventinapp.astream(data):yieldjson.dumps(event,ensure_ascii=False)+"\n"returnResponse(generate(),mimetype='text/event-stream')

② Token 级事件监听(LLM streaming)

asyncforeinapp.astream_events({"query":"给我讲一个故事"}):ife["event"]=="token":print(e["data"],end="")

③ 获取执行状态

state=app.get_state()print(state.values)

六、总结

类别方法用途
执行invoke / ainvoke完整执行一次
流式stream / astream边执行边输出
事件astream_events更细粒度事件
工具list_tools查看工具
状态get_state获取当前状态
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/16 7:28:14

Comake Pi D1,AIoT开发者的理想之选

随着人工智能物联网的蓬勃发展,市场对低功耗、低成本、轻量化的端侧AI解决方案需求激增。 Comake社区重磅推出了Comake PI D1开发板,针对智慧视觉、智慧音频、智能机器人、小屏显示、工业HML PLC等应用,结合Comake开发者社区的高效在线服务及…

作者头像 李华
网站建设 2026/2/27 20:10:59

Flutter艺术探索-Flutter插件开发:自定义Plugin实战指南

自己动手,开发一个Flutter插件:从原理到上线的完整指南 写在前面:我们为什么需要自己开发插件? 用Flutter做跨平台开发,“写一次代码,两端都能用”的效率确实很吸引人。但当我们想调用摄像头、读取传感器…

作者头像 李华
网站建设 2026/2/16 7:21:56

计算机毕业设计之基于springboot的体育用品商城系统

当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统体育用品商城采取了人工的管理方法,…

作者头像 李华
网站建设 2026/2/28 11:35:12

Cisco ISE RADIUS抑制DoS漏洞解析与应对指南

🔒 CVE-2025-20343: Cisco ISE RADIUS抑制拒绝服务漏洞 ⚠️ 概述 🚨 本文档详细分析了存在于 Cisco Identity Services Engine (ISE) 软件中的一个高危拒绝服务 (DoS) 漏洞。此漏洞允许未经身份验证的远程攻击者通过发送特制的RADIUS数据包&#xff0…

作者头像 李华