news 2026/10/24 5:30:36

StateGraph 基础:先定义状态再画图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
StateGraph 基础:先定义状态再画图
个人主页: > for_ever_love__ <(欢迎各位大佬莅临😊)
其他栏目: > 大模型开发从0到1 <
其他栏目: > iOS项目总结大全 <
其他栏目: > 我想学python了 <
其他栏目: > iOS UI <

文章目录

  • StateGraph 基础:先定义状态再画图
    • 一、用 TypedDict 描述状态
    • 二、节点就是普通函数
    • 三、为什么状态要先于一切

StateGraph 基础:先定义状态再画图

用 LangGraph 搭图,第一步永远是先定义状态(State),再往上面挂节点和边。状态是一张图的「中央数据总线」——所有节点都从它读输入、往它写输出,节点之间不直接传参,只通过状态沟通。

一、用 TypedDict 描述状态

最常见的方式是声明一个TypedDict,把这张图要流转的所有字段列出来:

fromtypingimportTypedDict,Listfromlanggraph.graphimportStateGraph,START,ENDclassState(TypedDict):question:str# 用户问题steps:List[str]# 已经走过的步骤记录answer:str# 最终答案

这里的字段就是这张图的「契约」。编译后,每次invoke传入的字典会被校验,缺字段会直接报错,比散装的dict安全得多。

二、节点就是普通函数

每个节点本质上是一个函数,接收当前State,返回一个要更新到状态里的那部分字段:

defplan(state:State)->State:return{"steps":state["steps"]+["已规划"]}defsolve(state:State)->State:return{"answer":"结论:"+state["question"]}graph=StateGraph(State)graph.add_node("plan",plan)graph.add_node("solve",solve)graph.add_edge(START,"plan")graph.add_edge("plan","solve")graph.add_edge("solve",END)app=graph.compile()out=app.invoke({"question":"1+1=?","steps":[],"answer":""})print(out["answer"],out["steps"])

关键点:节点返回的是「增量」。上面plan只返回steps,LangGraph 会把它合并进全局状态;solve只填answer。这正是后面讲「reducer」时要重点说的机制——有些字段(比如消息列表)不是简单覆盖,而是需要「累加」,那时就得用Annotated显式声明更新方式。

三、为什么状态要先于一切

很多 bug 都源于「状态没设计好,后面节点乱读字段」。先把State想清楚,有几个实在的好处:

  1. 可视化自然成立:Studio 能把状态随时间的变化画成时间线,因为状态就是唯一的真相来源;
  2. 持久化和回溯变简单:只要把状态按thread_id存下来,就能随时恢复或回退(见后续「检查点」「时间旅行」两篇);
  3. 多节点协作不打架:大家都按同一份契约读写,不会出现 A 节点改了 B 节点依赖的变量却没人知道的情况。

一个常见误区是「把函数内部变量当状态用」。记住:只有写进State的东西,才会被图记住、被下一个节点看见、被检查点保存。临时变量出了节点函数就消失了。

把状态定义清楚,后面的节点、边、条件分支、人机协同,全都是在状态之上搭积木。这一篇先到这里,下一篇我们专门聊节点和边怎么连。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/24 5:28:54

Django + Vue电商项目第012讲:数组对象|高频API写完才算会JS

90%的前端业务代码都是「处理一组数据」——商品列表过滤、购物车金额汇总、订单排序、评价去重。 本讲把map filter reduce find some every sort这7个核心方法 + 解构展开 + 深浅拷贝一次讲透,全部用电商场景举例。 建议先 点赞 + 收藏 + 关注,处理数组数据时随时回查。 一…

作者头像 李华
网站建设 2026/10/24 5:28:09

iOS广告转化追踪:SKAdNetwork与增强型转化实践

1. iOS设备端转化衡量方案解析最近在优化移动端广告投放时&#xff0c;发现iOS平台的转化追踪存在特殊挑战。不同于Android系统的开放性&#xff0c;iOS的隐私保护机制给传统转化归因方式带来了根本性改变。特别是2021年苹果推出ATT框架后&#xff0c;广告主需要重新理解设备端…

作者头像 李华
网站建设 2026/10/24 5:27:21

文本三剑客-grep-sed-awk---企业场景实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 5:25:55

FPGA版本迭代实践:如何通过影响域分析锁定待验证模块

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 5:24:55

SAM是什么?企业软件成本与合规管理入门

软件资产管理&#xff08;Software Asset Management&#xff0c;SAM&#xff09;是一套围绕软件全生命周期建立数据、流程和责任机制的管理方法。它不只是做台账&#xff0c;而是把采购合同、许可证权益、安装部署、账号订阅、实际使用和整改记录连接起来&#xff0c;支持成本…

作者头像 李华