news 2026/6/9 23:33:00

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/6/7 7:19:11

Java基于Spring Boot+Vue的电商系统的设计与实现

这里写目录标题 项目介绍系统实现截图技术栈介绍Spring Boot与Vue结合使用的优势Spring Boot的优点Vue的优点 Spring Boot 框架结构解析Vue介绍系统执行流程Java语言介绍系统测试目的可行性分析核心代码详细视频演示源码获取 所需该项目可以在最下面查看联系方式,为…

作者头像 李华
网站建设 2026/6/7 6:13:44

Comake Pi D2,轻量化端侧AI视觉开发神器

随着人工智能物联网(AIoT)的蓬勃发展,市场对低功耗、低成本、便携式的端侧AI解决方案要求愈发严格:既要强大算力支撑复杂任务,又要极致低功耗保障续航;既要小巧尺寸适配多元场景,又要低成本快速…

作者头像 李华
网站建设 2026/6/7 7:09:22

使用EasyExcel对某列做特定样式,样式失效

⭐简单说两句⭐ ✨ 少壮不努力,老大加班加到让你怀疑人生!!! 作者:银氨溶液 CSDN个人主页:银氨溶液 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 场景浅尝 最近&…

作者头像 李华
网站建设 2026/6/7 6:54:48

基于51单片机的简易电子琴设计

基于51单片机的简易电子琴设计 一、设计背景与意义 电子琴作为普及性乐器,凭借音色丰富、操作便捷等优势,广泛应用于音乐教学与日常娱乐场景。传统电子琴多为独立设备,体积较大且成本较高,而基于单片机的简易电子琴具有体积小巧、…

作者头像 李华
网站建设 2026/6/7 6:25:09

C++精灵库二叉树四种遍历算法可视化遍历程序

C精灵库二叉树四种遍历算法可视化程序本程序实现了二叉树的四种遍历实现: 前序遍历:根→左→右 中序遍历:左→根→右 后序遍历:左→右→根 层序遍历(BFS):按层级从左到右访问 这个程序非常生动…

作者头像 李华