langgraph4j原理源码分析图 II图编译
​​​ 简介langgraph4j是java技术栈ai agent框架深入掌握其源码与原理指导agent的开发重构/改造框架增加特性快速定位和修复bug发布私有版本系列内容 架构包括逻辑架构运行架构集成架构 状态图 状态和序列化 StatGraph分析 推理框架 编译图 执行图 检查点 aync-generator 执行分析 中断/恢复 取消执行 agent和集成 简单agent 多agent 观测 studio本文分析图编译本文基于langgraph4j v1.8.20关键词agentgraph缩写spring ai 缩写saspring ai alibaba 缩写saa参考资料Overview - LangGraph4j langgraph4j官网mp.weixin.qq.com/mp/appmsgalbum?actiongetalbumalbum_id4540202703779627014spring ai Alibaba原理源码分析包括spring ai部分lg4j概览​上图 lg4j的逻辑架构图逻辑架构展示lg4j功能模块描述其职责模块通过精密的协作共同支撑起复杂 Agent 的构建与运行。逻辑架构解构为以下四个核心域图编排、执行与状态、基础设施扩展、集成外部能力生态、开发支持1. 核心编排层图的蓝图与引擎StateGraph (状态图)这是开发者构建 Agent 的核心抽象。它代表了整个工作流的“蓝图”开发者在这里定义有哪些节点Node以及它们之间的流转规则Edge。CompiledGraph (编译图)当 StateGraph 被构建完成后经过 compile() 方法转化而来。编译图重整了状态图的数据结构支持高效的图执行编译图包含了流执行逻辑、状态机引擎和调度策略的“可运行实例”。2.执行与状态层原子动作与数据流转3.基础设施扩展层持久化、异步与可观测4. agentagent有两部分core内agent包是lg4j提供; core外的agent框架spring ai alibaba移植提供完整的agent框架也包括基于core内agent重构的agent builder组件5.外部能力生态层AI核心能力这一层是LangGraph4j 与 AI 生态对接。Spring AI作为底层的能力供给层Spring AI 提供了 Agent 所需的原子能力包括 LLM model大语言模型、RAG检索增强生成、prompt提示词工程、memory长期记忆、mcptoolskills工具调用与技能扩展等。LangGraph4j也集成了langchain4j5.开发工具Studio (可视化开发工具)lg4j的Studio模块提供了一套完整的可视化调试和开发界面让开发者能够直观地看到图的执行路径和状态流转极大地降低了复杂 Agent 的开发门槛。graphlg4j是workflow框架以图的结构节点边构建处理流程节点执行动作实现逻辑边决定下一个节点。agentic是另一种模式整个流程大模型自主编排agentic省心省事但同时agentic容易失控纯粹看大模型心情因此目前比较好的方案主体使用flowable需要的时候使用agentic节点。在lg4j, agent的推理框架映射成graph以图的节点承载执行逻辑边决定下一节点支持检查点保存执行状态实现执行的暂停和恢复编译图上篇分析了状态图状态图是图的结构目的是为了方便构建图而编译图数据结构目的是为了高效执行​上图是编译图类图编译把整个图包括子图的数据结构转换为扁平化的邻接表结构。并行分支使用并行节点节点内处理并行执行器无需处理并行。nodes 图的节点集类型MapString, AsyncNodeActionWithConfigStateedges 图的边集类型MapString, EdgeValueState结构是变种的邻接表与正常邻接表不同编译图有设定的起始节点START节点Id获取EdgeValue计算出后续的连接的节点EdgeValue: 封装了边的信息二选一字符串: 节点的id简单路由指向一个节点EdgeCondition: 条件EdgeCondition: 条件决定走哪条边。动作 (acton): 条件的判断逻辑AsyncCommandAction: 返回命令 (Command)。映射关系 (mappings): 条件和节点的映射关系集例如X:_x_ EdgeCondition返回‘X’边走’_x_’节点下面分析编译的原理和源码扁平化邻接表ProcessedNodesEdgesAndConfig负责扁平化状态图数据结构以示例解释代码逻辑介绍一下连接表A: [B],B: [C],C: []连接点结构左是head节点’A’,’B’,’C’; 右是数组代表head节点连接的节点​对应的图进一步假设B是子图节点其子图 D-E, D-F,E-G,F-GProcessedNodesEdgesAndConfig处理过后A: [B-D],B-D: [B-E, B-F],B-E: [B-G],B-F: [B-G],B-G: [C],C: []​图的数据结构扁平化合并到一个邻接表结构主图与子图节点(B)的连接重定向到子图的节点子图节点名称修改格式%s-%s最后返回子图的Node写入到nodes节点id为keyaction为value的mapCompiledGraph.CompiledGraph()nodes是最终的邻接表head节点集​注意lg4j子图节点有两种一种是StateGraph也就是状态图另一种CompiledGraph编译图只有状态图编译打平编译图是保留独立的执行用在多agent的子agent边和并行处理ProcessedNodesEdgesAndConfig处理后返回边(edges)是list图遍历按节点找边需要遍历list因此边数据需要转为map以sourceNodeId为keyListEdge类型转为MapString, EdgeValue另外图有并行分支编译使用并行节点替代并行执行action完成在并行节点内完成不需要执行器介入下图边处理分多targes和单个target​elements是list类型下面是编译图的数据结构Map类型nodes 图的节点集类型MapString, AsyncNodeActionWithConfigStateedges 图的边集类型MapString, EdgeValueState​上图target1直接put入edges虽然target1可以是只有一个边也可以是多个边当EdgeValue是EdgeConditionAsyncCommandActionS和边mappings支持多个边选一​上图 target1并行分支上图的代码逻辑是从A找到[A1, A2, A3]再找到B分支的聚合点​上图 图的约束规定并行分支只能聚合到同一个节点如上图B否则报错illegalMultipleTargetsOnParallelNode还有一个约束分支的边的值类型不能是条件也就是只能是字符串nodeId​上图 并行分支action合并到并行节点执行并行节点写入nodes​原分支节点前后节点连到新的并行节点到此图结构编译完成总结编译前​其中节点B是子图编译中扁平的邻接点​编译后​上图是示例编译后的图可以理解为是一个”降维”的处理”摆平”多层的主图子图结构”摆平”并行处理降低执行器复杂度提高执行效率

相关新闻

2026-10-12:处理所有元素的成本。用go语言,给定一个整数序列 nums 和一个固定整数 k。你一开始拥有 k 点资源,需要按照从左到右的顺序逐个处理 nums 中的元素。处理某个元素时,会消

2026-10-12:处理所有元素的成本。用go语言,给定一个整数序列 nums 和一个固定整数 k。你一开始拥有 k 点资源,需要按照从左到右的顺序逐个处理 nums 中的元素。处理某个元素时,会消

2026-10-12:处理所有元素的成本。用go语言,给定一个整数序列 nums 和一个固定整数 k。你一开始拥有 k 点资源,需要按照从左到右的顺序逐个处理 nums 中的元素。处理某个元素时,会消耗等于该元素数值的资源。 如果在处理当前元素前…

2026/10/13 3:22:49 阅读更多 →
股债汇金四杀:买得分散,为什么还会一起亏?

股债汇金四杀:买得分散,为什么还会一起亏?

**分散买了股票、债券、美元和黄金,不等于分散了“急着用钱”的风险。**市场平静时,它们讲的是不同故事;资金紧张时,它们可能面对同一个问题:持有人必须把资产变成现金。 最近“股债汇金四杀”的说法很吓人。但对一个…

2026/10/13 3:21:48 阅读更多 →
就业指南|分析了近百份简历后,我决定写一篇就业指南

就业指南|分析了近百份简历后,我决定写一篇就业指南

本篇文章共 10000字,完全阅读全篇约10分钟 州弟学安全,只学有用的知识 前言 大家好,我是州弟。 大家还记得我上一篇文章吗?网安面试|记2026年8月国内某情报安全厂商面试的一次经历 ,当时分享了我主动投递并完整体验…

2026/10/13 3:21:48 阅读更多 →

最新新闻

Flask实战:从零搭建在线教育平台的核心实现与避坑指南

Flask实战:从零搭建在线教育平台的核心实现与避坑指南

去年做模拟项目X的时候,接了一个比较完整的活儿:从零搭一个python网络课程在线学习平台。这类项目听起来好像就是“课程列表视频播放”,但真正动手才发现,一个能被老师真正拿去用、学生愿意天天打开的平台,背后牵扯的模…

2026/10/13 4:06:00 阅读更多 →
工业条码打印机与云标签平台协同:标签模板、权限与数据对接的落地实践

工业条码打印机与云标签平台协同:标签模板、权限与数据对接的落地实践

很多人以为标签打印就是把标签纸塞进打印机,点一下打印就完事。真在企业里跑过一轮就明白,事情远没有这么简单:仓库要资产标签、生产线上要料号标签、电商发货要面单和合格证、行政固定资产要贴标……每套标签格式不一样,模板分散…

2026/10/13 4:06:00 阅读更多 →
热电堆太阳总辐射传感器:原理、选型与安装维护全解析

热电堆太阳总辐射传感器:原理、选型与安装维护全解析

聊到太阳总辐射测量,很多人第一反应是“用一个太阳能电池板读数不就行了”。这个想法听起来合理,但在气象观测、光伏电站评估和建筑节能计算这些正儿八经的场合,真正扛大梁的是一支乳白色圆顶的小传感器——热电堆太阳总辐射传感器。它输出只…

2026/10/13 4:06:00 阅读更多 →
Python实现共享单车管理系统:预约调度与路径规划实战

Python实现共享单车管理系统:预约调度与路径规划实战

共享单车管理系统,听起来就是个普通的企业级CRUD项目,但我做完这个项目之后最大的感受是:真正把“预约、报修、调度、线路规划”四个功能串起来做好,远没有表面上那么简单。它的复杂度不在于某个算法有多深,而在于业务…

2026/10/13 4:06:00 阅读更多 →
Linux下Oracle开机自启配置:systemd方案与避坑指南

Linux下Oracle开机自启配置:systemd方案与避坑指南

1. 开机自启这件事,为什么手动能跑通、重启就失效但凡在生产环境部署过Oracle数据库的人,几乎都经历过这个场景:数据库装好了,监听配好了,sqlplus / as sysdba能正常登录,业务跑得也挺稳。结果机房那边通知…

2026/10/13 4:06:00 阅读更多 →
外部AI服务封装为编码助手Skill:网关调度与配额缓存实战

外部AI服务封装为编码助手Skill:网关调度与配额缓存实战

在进行这类封装之前,我建议你先想清楚一个问题:为什么要费力气把一个外部AI服务变成本地编码工具的Skill?单纯为了好看肯定不值得,真正驱动这件事的痛点,大概率是配额不够用、调用不够顺、或者团队里多人共用一套能力时…

2026/10/13 4:04:59 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/12 18:11:17 阅读更多 →