当前位置: 首页 > news >正文

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获取当前状态
http://www.jsqmd.com/news/317909/

相关文章:

  • 售后即战略:宏山激光和邦德哪个售后好
  • 小程序计算机毕设之基于springboot+微信小程序的学生定位考勤系统基于微信小程序的学生定位考勤系统(完整前后端代码+说明文档+LW,调试定制等)
  • 基于springboot的健身爱好者线上互动与打卡社交平台系统-计算机毕业设计源码+LW文档
  • Nginx实现内外网转发
  • 小程序计算机毕设之基于SpringBoot与微信小程序的乡镇医院挂号预约系统基于springboot的医院门诊智能预约平台小程序设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • LangGraph--StateGraph
  • 【毕业设计】基于springboot+微信小程序的学生定位考勤系统(源码+文档+远程调试,全bao定制等)
  • 【毕业设计】基于Android的旧物交易平台的设计与实现(源码+文档+远程调试,全bao定制等)
  • 【计算机毕业设计案例】基于微信小程序+SpringBoot的学生定位考勤系统设计和实现基于springboot+微信小程序的学生定位考勤系统(程序+文档+讲解+定制)
  • 2026年评价高的深睡睡眠仪公司推荐:低频脉冲睡眠仪/紫外线光疗仪/308光疗仪/308准分子光疗仪/308家用光疗仪/选择指南
  • 【毕业设计】基于springboot的医院门诊智能预约平台小程序设计与实现(源码+文档+远程调试,全bao定制等)
  • 硬实力赢得世界口碑 宏山激光斩获国际聚焦奖
  • 实测20+平台!2026青少年线上英语选课参考,按年龄选更省心
  • 2026年1月四川法律顾问、合同审查、欠款催收、合同纠纷、劳动仲裁律师事务所综合分析
  • 2026青少年线上英语课实测优质榜|按年龄/需求精准选,不花冤枉钱!
  • 国标GB28181视频监控平台EasyCVR构建通信基站全场景的智慧安防体系
  • 国标GB28181安防监控平台EasyCVR油田油井智能监管体系构建与应用实践
  • 2026年AI大模型学习路线(非常详细)收藏这一篇就够了!_2626年AI大模型学习路线
  • FreeSWITCH Media Bug 框架详解
  • 2026年高性价比瑙鲁投资入籍授权机构推荐
  • GNSS/IF/RF 前端为什么离不开 SAW 滤波器?三类方案 + 选型清单(FCom富士晶振 FSF 系列)
  • 本地 Android 设备长期在线 + 云服务器对外提供签名接口(可落地方案)
  • 智造升级,企业数字化未来:携手无锡哲讯,共启SAP智慧新篇
  • 2026家长必看!中小学AI数学课程大揭秘
  • ManageEngine卓豪-ESM 企业服务管理
  • 2026牙质不好推荐8款护牙护齿牙膏品牌实测:这几款最好用!全家适配款汇总!
  • 大学毕业女生礼物推荐:罗技两大系列,兼顾颜值与实用的「职场/生活过渡礼」
  • [STM32H7] 【STM32H745I-DISCO 试用】STM32H745平台上的CIFAR数据集AI探索
  • Comake Pi D1,AIoT开发者的理想之选
  • 小程序计算机毕设之基于小程序+springboot商城系统设计与实现基于微信小程序+SpringBoot的线上超市管理系统设计和实现(完整前后端代码+说明文档+LW,调试定制等)