LangGraph--Graph API

1. 核心概念

LangGraph 的设计理念是 “Nodes 做工作,Edges 决定流程”。

1.1 Graph

  • 图是整个工作流的抽象。执行图意味着节点间消息的传递和状态更新。

  • 图采用 message passing 的方式,每个节点处理完状态后,将更新沿边发送到下一个节点。

  • 图的执行分为 super-step(超步):

    • 同一超步中的节点可并行执行。
    • 不同超步顺序执行。
    • 节点在收到消息前是inactive,收到消息后变为active
    • 图执行结束条件:所有节点inactive且无消息在传输。

1.2 State(状态)

  • 状态是图的共享数据结构,记录当前工作流的快照。

  • 由 schema 和 reducer 组成:

    • schema:定义状态字段,可以使用TypedDictdataclassPydantic BaseModel
    • reducer:定义状态更新逻辑。默认覆盖,可自定义函数(如operator.add叠加列表)。
1.2.1 多 schema 支持
  • 图的内部状态可以有多个 schema:

    • OverallState:完整状态
    • InputState/OutputState:输入输出子集
    • PrivateState:内部节点通信状态
  • 节点可以读写整个OverallState,也可以写入子状态PrivateState

1.2.2 Reducers 示例
fromtypingimportAnnotatedfromtyping_extensionsimportTypedDictfromoperatorimportaddclassState(TypedDict):foo:intbar:Annotated[list[str],add]# 使用 reducer 叠加
  • 默认 reducer 是 覆盖(overwrite)
  • 可用Overwrite强制覆盖,不使用 reducer。
  • add_messages是处理消息列表状态的专用 reducer(处理更新和追加)。

1.3 Nodes(节点)

  • 节点是执行逻辑的函数,接收stateconfigruntime三个参数。

  • 可以是同步或异步函数。

  • 节点内部可调用 LLM 或普通函数逻辑。

  • 节点函数可以返回:

    • 更新状态字典{key: value}
    • Command对象(同时更新状态和控制流)
  • 内置节点:

    • START:图的入口节点
    • END:图的终止节点
节点示例
fromlanggraph.graphimportStateGraph,START,ENDdefnode_a(state):return{"foo":"bar"}graph=StateGraph(dict)graph.add_node("node_a",node_a)graph.add_edge(START,"node_a")graph.add_edge("node_a",END)
节点高级特性
  • 缓存(Caching):基于输入缓存节点结果。
  • runtime context:传递非状态信息(如数据库连接或模型配置)。
  • 递归控制:通过config["metadata"]["langgraph_step"]获取当前超步计数,可主动或被动处理递归限制。

1.4 Edges(边)

  • 边控制图的流向和条件。

  • 边类型:

    • Normal Edge:固定连接节点
    • Conditional Edge:根据routing_function(state)动态选择下一节点
    • Entry Point:用户输入进入的第一个节点
    • Conditional Entry Point:动态选择入口节点
Conditional Edge 示例
defroute(state):return"node_b"ifstate["foo"]=="bar"else"node_c"graph.add_conditional_edges("node_a",route)
Command 对象
  • 将状态更新与控制流合并。
fromlanggraph.typesimportCommanddefmy_node(state):returnCommand(update={"foo":"bar"},goto="node_b")
  • 可用于:

    • 子图跳转
    • 人工干预(Human-in-the-loop)
    • 动态状态更新与路由

1.5 Send

  • 用于动态生成节点和状态,支持 Map-Reduce 模式。
fromlanggraph.typesimportSenddefcontinue_to_jokes(state):return[Send("generate_joke",{"subject":s})forsinstate["subjects"]]

2. 消息(Messages)

  • 常用于聊天应用,将消息列表存入状态。
  • 推荐使用add_messagesreducer 处理消息列表。
  • MessagesState提供了预定义状态结构{"messages": list[AnyMessage]}
消息更新示例
fromlanggraph.graphimportMessagesStatefromlanggraph.graph.messageimportadd_messagesclassState(MessagesState):documents:list[str]

3. 运行时(Runtime)

  • Runtime对象在节点中传递上下文信息。

  • 可传递:

    • 用户信息
    • 模型选择
    • 数据库连接等
示例
@dataclassclassContext:user_id:strdefnode_with_runtime(state,runtime:Runtime[Context]):print(runtime.context.user_id)

4. 图的构建与执行

4.1 StateGraph

  • 核心类,负责图的管理。

  • 支持:

    • 添加节点add_node
    • 添加边add_edge,add_conditional_edges
    • 设置入口set_entry_point
    • 设置终止节点set_finish_point
    • 编译.compile()
    • 执行.invoke(inputs)

4.2 Graph Compilation

  • 必须在执行前调用.compile()

  • 编译会:

    • 检查节点完整性(无孤立节点)
    • 设置缓存、断点
    • 准备状态通道和 reducer

4.3 Recursion / 超步限制

  • 默认递归限制为 25 步
  • 可通过invoke(config={"recursion_limit": N})修改
  • 可以通过config["metadata"]["langgraph_step"]访问当前步数,支持 主动处理 递归限制。

5. 图迁移(Graph Migrations)

  • 支持修改节点、边和状态字段

  • 对于中断的线程:

    • 允许添加新节点和边
    • 不允许删除或重命名节点(可能引发错误)
  • 状态兼容:

    • 新增或删除键向前向后兼容
    • 修改类型不兼容可能导致旧线程出错

6. 可视化(Visualization)

  • 支持图可视化,便于理解复杂工作流
  • 官方文档提供内置方法和指南

7. 总结

LangGraph Graph API 提供了:

模块功能
State管理图的共享数据,支持多 schema 和 reducer
Node执行逻辑,支持状态更新、Command、缓存、runtime context
Edge控制流,可固定、条件、动态或入口
Messages用于存储聊天记录和其他序列化消息
Send / Command支持 Map-Reduce 或动态控制流
Runtime提供节点执行上下文,不属于状态
Recursion / Metadata超步控制与调试信息
Graph Compilation检查图结构,准备执行,支持缓存
Migration / Visualization动态修改图结构与状态,图形化展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1204327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年靠谱的旋转转子泵/卸油扫仓转子泵用户好评厂家排行

在工业流体输送领域,旋转转子泵和卸油扫仓转子泵因其高效、稳定、低维护的特点,已成为石油化工、仓储物流等行业的设备。本文基于2026年行业用户实际反馈、技术储备、生产规模及售后服务能力等维度,筛选出5家值得信…

机器学习里面什么是过拟合?如何解决?

过拟合(Overfitting)是机器学习中的一个重要概念,指的是模型在训练数据上表现得很好,但在未见过的新数据(例如测试数据)上表现较差的现象。过拟合表明模型学习到了训练数据中的噪声和细节,而不是…

打造企业智慧知识库:我对RAG与智能体协同的大模型应用架构思考

当企业知识沉睡于数据孤岛,大模型却在幻觉中徘徊。RAG不只是技术,更是打通知识与智能的关键桥梁。 本文分享企业级RAG系统实践经验,从三个方面展开:实践流程架构及特点、理论依据、实践总结与展望。通过从Naive RAG到Agentic RAG…

告别价格混乱!进销存软件帮你管好供应商报价

在企业进销存管理的全链路中,采购成本的管控直接决定了企业的利润空间与市场竞争力。尤其是在原材料价格波动频繁、供应商资源多元的市场环境下,如何精准记录、智能对比不同供应商的价格信息,实现采购决策的科学高效,成为众多企业…

Qwen3-0.6B实时翻译系统:低延迟部署优化实战

Qwen3-0.6B实时翻译系统:低延迟部署优化实战 你是否遇到过这样的场景:在跨国会议中,发言刚落,翻译却还在加载;在跨境电商客服后台,用户消息进来三秒后才弹出响应;或者在嵌入式设备上跑翻译模型…

充电桩漏电流检测的重要性

充电桩作为电动汽车的核心配套设施,其安全性直接关系到用户生命财产和电网稳定。漏电流检测是充电桩安全保护的关键环节,能够有效预防因绝缘故障、设备老化或环境潮湿导致的漏电事故。国际标准如IEC 61851、GB/T 18487.1均明确要求充电桩必须配备漏电流保…

科哥镜像理论上支持多语种,中英文效果最佳

科哥镜像理论上支持多语种,中英文效果最佳 1. 镜像核心能力解析:不只是语音识别,而是情感理解 Emotion2Vec Large语音情感识别系统由科哥二次开发构建,它不是简单的语音转文字工具,而是一个真正理解人类情绪表达的智…

【信创】华为昇腾大模型训练

一、总体目标 在 纯国产信创环境(昇腾910B2 2 鲲鹏CPU openEuler) 上,完成 Qwen3-32B 模型的 INT4量化 LoRA微调 训练,并实现训练到部署的全链路适配。 二、硬件配置与算力分析组件规格说明AI加速卡华为 Ascend 910B2 2单卡 …

verl知识蒸馏应用:大模型向小模型迁移实战

verl知识蒸馏应用:大模型向小模型迁移实战 1. verl 是什么?不只是一个RL框架 你可能已经听说过用强化学习(RL)来优化大语言模型的回答质量,比如让模型更遵从指令、更少胡说八道、更擅长推理。但真正把 RL 落地到生产…

Z-Image-Turbo_UI界面生成效果超预期,细节令人惊喜

Z-Image-Turbo_UI界面生成效果超预期,细节令人惊喜 1. 初识Z-Image-Turbo:不只是快,更是精准与细腻的结合 你有没有遇到过这样的情况:输入一段精心设计的提示词,满怀期待地点击“生成”,结果出来的图要么…

为什么你的“炒股经验”正在让你亏钱?一个残酷的真相

如果你还想像过去那样,靠着所谓的“经验”和感觉去做短线交易,那么用今天市场的话来说,无异于“找死”。 你是否也常常感到困惑:为什么现在炒股赚钱,似乎比以前难多了?明明还是那些熟悉的K线图&#xff0c…

直接上干货。最近用西门子S7-1200 PLC的485信号板做Modbus RTU主站,控制支持485通讯的步进电机,实测能跑起来。分享几个关键点给需要的人

西门子博途梯形图写的Modbus RTU 程序,实测可用,硬件为1200PLC加485信号板做主站控制支持485通讯的步进电机,的是梯形图源程序硬件配置注意信号板的安装位置,建议装在CPU右侧第一个扩展位。博途里记得给信号板分配硬件标识符&…

2026年比较好的南京应急租发电机/静音发电机厂家实力及用户口碑排行榜

开篇在南京地区选择应急租发电机或静音发电机厂家时,应重点考察企业的设备储备规模、技术团队专业性、服务响应速度以及用户实际反馈。经过对南京市场20余家发电机租赁企业的实地调研和用户访谈,我们基于设备质量、服…

FSMN VAD后端逻辑解析:run.sh脚本执行流程

FSMN VAD后端逻辑解析:run.sh脚本执行流程 1. FSMN VAD模型与系统背景 FSMN VAD是阿里达摩院FunASR项目中开源的语音活动检测(Voice Activity Detection)模型,专为中文语音场景优化设计。它基于前馈序列记忆网络(Fee…

CAN总线协议模糊测试工具链构建与实践指南

模糊测试在车载网络安全中的关键作用 随着车联网技术普及,CAN总线作为车辆电子控制单元(ECU)通信的核心协议,其安全性面临严峻挑战。模糊测试通过注入畸形数据主动探测漏洞,成为保障车载网络韧性的首选方法。针对软件…

verl与vLLM集成实战:推理-训练无缝切换部署案例

verl与vLLM集成实战:推理-训练无缝切换部署案例 1. verl 介绍 verl 是一个灵活、高效且可用于生产环境的强化学习(RL)训练框架,专为大型语言模型(LLMs)的后训练设计。它由字节跳动火山引擎团队开源&#…

保姆级教程:如何用YOLOv12官版镜像跑通第一个demo

保姆级教程:如何用YOLOv12官版镜像跑通第一个demo 1. 引言:从零开始体验YOLOv12的强大能力 你是不是也经常被目标检测模型的复杂部署流程劝退?下载依赖、配置环境、版本冲突……光是准备阶段就能耗掉一整天。今天,我们不走弯路—…

行业数字化转型和战略规划设计方案(PPT+WORD)

一、综合型企业数字化转型综合规划大型央企国企信创与数字化转型实施蓝图.pptx集团企业数字化转型全局规划与建设方案.docx企业数字化转型IT信息化战略规划与实施路径.pptx企业数字化转型架构设计、实施步骤及典型应用场景.pptx数字化转型企业架构设计实践与案例分析.pptx数字化…

Python库

#Gooey库 GUIPython的Gooey库让GUI开发变得轻松有趣,仅需一行代码即可生成专业界面。通过FileChooser、DateChooser等丰富组件,快速构建文件管理、日期选择功能,配合pyinstaller打包成独立应用程序,开发效率提升肉…

嘉峪关市英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜

经教育部教育考试院备案、全国雅思教学质量评估中心指导,参照《2025-2026中国大陆雅思备考趋势白皮书》核心指标,结合嘉峪关市雄关区、长城区、镜铁区8200份考生调研问卷、86家教育机构实测及跨区域备考跟踪数据,开…