news 2026/3/23 12:45:37

【值得收藏】Java+大模型开发实战:LangGraph4j框架教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【值得收藏】Java+大模型开发实战:LangGraph4j框架教程

简介

langgraph4j 是一个专为Java设计的库,它支持开发者构建状态ful、多智能体应用,并能够与语言模型(LLMs)无缝集成。这个项目是对LangChain AI项目中的LangGraph的Java版本移植,旨在为Java开发者提供一种更加直观和易于使用的方式来构建复杂的智能体交互图。

框架特点

  • • 流程管理:LangGraph4j 提供了强大的流程控制能力,允许开发者定义包含循环、条件分支和并行执行等复杂逻辑的工作流。通过这种方式,可以灵活地处理各种业务需求,并确保流程的高效性和准确性。
  • • 状态管理:状态管理是 LangGraph4j 的一大亮点,它支持状态对象(State)贯穿整个图的执行过程,为开发者提供了对流程状态的精细控制。每个节点执行前后都会创建检查点,这些检查点不仅保存了当前的状态信息,还包括版本号和回溯关系等重要数据。这意味着即使在长时间运行或可能中断的应用场景下,也可以轻松恢复到之前的状态,增强了应用的健壮性和用户体验。
  • • 模块化设计:LangGraph4j 鼓励采用模块化设计,即每个节点专注于完成单一职责,这样做的好处是可以简化开发流程,提高代码复用性,并降低维护成本。此外,由于各个模块之间的耦合度较低,因此更容易进行扩展和优化。模块化设计还促进了团队协作,不同成员可以独立负责不同的模块,最后再整合成完整的系统。
  • • 人机协作:LangGraph4j 支持“Human-in-Loop人在环路”模式,这使得在关键决策点上将控制权交还给用户成为可能,这一特性非常适合那些既需要自动化又离不开人类判断力的任务,实现了人与机器的有效协同工作。
  • • 可视化工具:提供了PlantUML和Mermaid支持,使得图形化展示和编辑图结构成为可能。
  • • 集成开发环境:langgraph4j 与Spring Boot、Jetty和Quarkus等流行框架无缝集成,大大简化了开发流程。

LangGraph4j核心概念

(1)状态图(StateGraph)

状态图是一种数据结构,其生命周期存在于整个Langgraph过程中,所有节点的执行过程和结构都可以被记录到状态图中;而且每个节点也都可以随时访问状态图中的数据,来获取其当时的执行过程和结果,状态图是Langgraph实现上述功能的核心。

(2)节点(Node)

节点就比较容易理解了,节点的概念就是一个一个的智能体或功能函数;其主要作用就是用来执行具体的任务,比如说查询天气就调用天气查询接口。

(3)边(Edge)

如果说节点是一个函数,那么边就相当于判断逻辑中的分支,边决定了当前节点执行完毕之后,下一个执行的节点;当然,还有一种边叫做条件边,意思就是可以根据条件判断来动态决定应该执行哪个节点。

(4)检查点(State)

游戏的存档点。程序在状态图中进行流转,每一次进入新节点前,都会存档一次,后续用户再来访问此Agent的时候,就会读取存档。也是用这种能力,实现的人机交互、时光回溯。本质都是往前找检查点的版本号就行。检查点和状态图的区别是:状态图只是一个属性,在运行阶段可以读取的部分数据。而检查点是存储了当前节点的所有信息,包括了状态图,也有检查点版本号,回溯关系之类的信息。

LangGraph4j框架入门

Maven依赖
<properties> <langgraph4j.version>1.6.0-beta6</langgraph4j.version> </properties> <!-- Optional: Add the Bill of Materials (BOM) to manage langgraph4j module versions --> <dependencyManagement> <dependencies> <dependency> <groupId>org.bsc.langgraph4j</groupId> <artifactId>langgraph4j-bom</artifactId> <version>${langgraph4j.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.bsc.langgraph4j</groupId> <artifactId>langgraph4j-core</artifactId> </dependency> <!-- Add other langgraph4j modules if needed, e.g., langgraph4j-langchain4j --> <dependency> <groupId>org.bsc.langgraph4j</groupId> <artifactId>langgraph4j-langchain4j</artifactId> </dependency> </dependencies>
示例1:炒西红柿智能体

这个例子展示了如何使用LangGraph4j来模拟炒西红柿的过程。流程依次为“洗”、“切”、“炒”。每个步骤都是一个节点,节点之间通过边连接,形成一个线性的流程。在这个过程中,状态图记录了每一步骤的结果,而检查点则确保了如果中途停止,可以从最近的检查点恢复操作。

@Test publicvoidtest1()throws GraphStateException { StateGraph<AgentState> workflow = newStateGraph<>(AgentState::new) .addNode("step1", node_async(state -> { log.info("step1:{}", state); return Map.of("step1", "洗"); })) .addNode("step2", node_async(state -> { log.info("step2:{}", state); return Map.of("step2", "切"); })) .addNode("step3", node_async(state -> { log.info("step3:{}", state); return Map.of("step3", "炒"); })) .addEdge(START, "step1") .addEdge("step1", "step2") .addEdge("step2", "step3") .addEdge("step3", END); CompiledGraph<AgentState> app = workflow.compile(); GraphRepresentationgraph= app.getGraph(GraphRepresentation.Type.PLANTUML, "炒西红柿智能体"); System.out.println("炒西红柿智能体 PlantUML Graph:\n"+ graph.content()); Optional<AgentState> result = app.invoke(Map.of("input", "西红柿")); System.out.println(JSON.toJSONString(result.get().data())); }

以上代码执行结果如下:

11:16:54.099 [main] INFO cn.daydayup.dev.manus.server.Test -- step1:{input=西红柿} 11:16:54.109 [main] INFO cn.daydayup.dev.manus.server.Test -- step2:{input=西红柿, step1=洗} 11:16:54.110 [main] INFO cn.daydayup.dev.manus.server.Test -- step3:{input=西红柿, step2=切, step1=洗} {"input":"西红柿","step2":"切","step3":"炒","step1":"洗"}
通过以上执行结果可以发现:Step1获取到的State状态中的数据为{input=西红柿},并返回Map.of("step1", "洗")更新State状态;Step2获取到的State状态数据已经是Step1更新后的{input=西红柿, step1=洗},并返回Map.of("step2", "切")更新State状态;Step3获取到的State状态数据已经是Step2更新后的{input=西红柿, step2=切, step1=洗},并Map.of("step3", "炒")更新State状态;流程执行结束后,State状态为{"input":"西红柿","step2":"切","step3":"炒","step1":"洗"};

使用PlantUML绘制流程图如下:

示例2:项目开发智能体

此示例描述了一个简化版的项目开发流程,包含需求分析、前后端开发及联调阶段。与第一个示例不同的是,这里引入了分支逻辑,即“后端开发”和“前端开发”可以并行进行。这说明了边不仅限于简单的顺序连接,还可以用于表示复杂的业务逻辑关系。检查点在此场景下尤为重要,因为它允许团队从某个关键阶段重新开始工作。

@Test publicvoidtest2()throws GraphStateException { StateGraph<AgentState> workflow = newStateGraph<>(AgentState::new) .addNode("step1", node_async(state -> { log.info("step1:{}", state); return Map.of("step1", "开发需求来了"); })) .addNode("step2", node_async(state -> { log.info("step2:{}", state); return Map.of("step2", "后端开发"); })) .addNode("step3", node_async(state -> { log.info("step3:{}", state); return Map.of("step3", "前端开发"); })) .addNode("step4", node_async(state -> { log.info("step4:{}", state); return Map.of("step4", "前后端联调"); })) .addEdge(START, "step1") .addEdge("step1", "step2") .addEdge("step1", "step3") .addEdge("step2", "step4") .addEdge("step3", "step4") .addEdge("step4", END); CompiledGraph<AgentState> app = workflow.compile(); GraphRepresentationgraph= app.getGraph(GraphRepresentation.Type.PLANTUML, "项目开发智能体"); System.out.println("项目开发智能体 PlantUML Graph:\n"+ graph.content()); Optional<AgentState> result = app.invoke(Map.of("input", "项目A")); System.out.println(JSON.toJSONString(result.get().data())); }

示例3:舆情监测智能体

舆情监测的例子展示了一个更加复杂的交互模型,其中包含了基于大语言模型的决策制定。首先,系统判断输入的情绪倾向(正面或负面),然后根据该情绪将问题分类并分配给相应的部门。这里使用了条件边来决定下一步骤(例如,是否进入最终步骤)。检查点机制使得系统能够记住之前的评估结果,即使用户中断了流程,也可以从中断的地方继续。

@Test publicvoidtest3()throws GraphStateException { StateGraph<AgentState> workflow = newStateGraph<>(AgentState::new) .addNode("step1", node_async(state -> { log.info("step1:{}", state); Stringinput= (String) state.value("input").orElse(""); List<ChatMessage> messages = List.of( SystemMessage.from("你是一个舆情识别专家,你的任务是判断用户输入是正面情绪还是负面情绪,输出“正面”或者“负面”,不要输出其他解析内容。"), UserMessage.from("用户输入:"+input) ); ChatResponsechatResponse= model.chat(messages); return Map.of("type", chatResponse.aiMessage().text()); })) .addNode("step2", node_async(state -> { log.info("step2:{}", state); Stringinput= (String) state.value("input").orElse(""); StringchatResponse= model.chat("你是一个舆情处理专家,你的任务是将用户的问题派发到不同的部门," + "如:医院、学校、银行。仅输出最终的结果,不需要解析内容。\n用户输入:"+input); return Map.of("classify", chatResponse); })) .addEdge(START, "step1") .addConditionalEdges("step1", AsyncEdgeAction.edge_async(this::getType), Map.of( "step2", "step2", "end",END ) ) .addEdge("step2", END); CompiledGraph<AgentState> app = workflow.compile(); GraphRepresentationgraph= app.getGraph(GraphRepresentation.Type.PLANTUML, "舆情识别智能体"); System.out.println("舆情识别智能体 PlantUML Graph:\n"+ graph.content()); Optional<AgentState> result = app.invoke(Map.of("input", "老师安排的作业太多了")); System.out.println(JSON.toJSONString(result.get().data())); }

小结

通过以上三个示例可以看出,LangGraph4j提供了一种灵活的方法来构建复杂的应用程序,特别是那些涉及到多步骤、条件判断和状态管理的情况。检查点在LangGraph4j中扮演着重要角色,它不仅仅是状态图的一部分数据,还包含了当前节点的所有信息。当流程到达新的节点前会创建检查点,这样就可以在任何时候恢复到之前的状态。这对于需要长时间运行或可能因外部因素中断的应用来说非常有用,因为它提供了强大的容错能力和灵活性。

普通人如何抓住AI大模型的风口?

领取方式在文末

为什么要学习大模型?

目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过30%。

随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:

人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!

最后

只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!

在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

【附赠一节免费的直播讲座,技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等,欢迎大家~】

大模型全套学习资料展示

自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。

希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!

01教学内容

  • 从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!

  • 大量真实项目案例:带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

02适学人群

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

vx扫描下方二维码即可
【附赠一节免费的直播讲座,技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等,欢迎大家~】

本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!

03入门到进阶学习路线图

大模型学习路线图,整体分为5个大的阶段:

04视频和书籍PDF合集

从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)

05行业报告+白皮书合集

收集70+报告与白皮书,了解行业最新动态!

0690+份面试题/经验

AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)

07 deepseek部署包+技巧大全

由于篇幅有限

只展示部分资料

并且还在持续更新中…

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

【附赠一节免费的直播讲座,技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等,欢迎大家~】

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

孤岛模式下双台逆变器下垂控制。 电网频率维持在50.15-50.18Hz 电压有效值维持在38...

孤岛模式下双台逆变器下垂控制。 电网频率维持在50.15-50.18Hz 电压有效值维持在380V左右 烈日下的海岛微电网正经历着断电考验&#xff0c;两台柴油发电机突然罢工。此时墙角的两个光伏逆变器默默亮起指示灯——它们要扛起整个社区的电力供应。这种没有主网支撑的孤岛模式里&a…

作者头像 李华
网站建设 2026/3/23 8:25:49

告别复杂配置,CAM++镜像开箱即用做语音身份验证

告别复杂配置&#xff0c;CAM镜像开箱即用做语音身份验证 你是否经历过这样的场景&#xff1a;想快速验证一段语音是否来自特定说话人&#xff0c;却卡在环境搭建、模型下载、依赖编译的繁琐流程里&#xff1f;反复调试CUDA版本、PyTorch兼容性、音频解码库&#xff0c;最后连…

作者头像 李华
网站建设 2026/3/23 0:01:49

3种Windows任务栏美化方案:让你的桌面焕然一新

3种Windows任务栏美化方案&#xff1a;让你的桌面焕然一新 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 副标题&#xff1a;如何通过Tr…

作者头像 李华
网站建设 2026/3/23 7:52:16

技术赋能旧设备:OpenCore Legacy Patcher进阶指南

技术赋能旧设备&#xff1a;OpenCore Legacy Patcher进阶指南 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一款专为老款Intel架构Mac设备设计…

作者头像 李华
网站建设 2026/3/21 9:53:15

faster-whisper:AI语音识别工具的3大突破与音频转文字实践指南

faster-whisper&#xff1a;AI语音识别工具的3大突破与音频转文字实践指南 【免费下载链接】faster-whisper 项目地址: https://gitcode.com/gh_mirrors/fas/faster-whisper 在信息爆炸的数字化时代&#xff0c;高效处理音频内容已成为提升工作效率的关键环节。无论是会…

作者头像 李华