LangGraph4j 入门

大模型开发之Langchain4j(看这一篇就够了) 本文介绍了SpringBoot与Langchain4j结合开发AI应用的技术方案。首先阐述了大模型的定义、特点及其在NLP、CV等领域的分类,包括通用(L0)、行业(L1)和垂直(L2)三个层级,并列举了大语言模型的主要应用场景。随后对比了Java生态的三大AI开发工具:LangChain4J(功能全面,支持15+主流模型)、Spring AI(深度集成Spring生态)和Spring AI Alibaba(对接阿里云大模型)。重点分析了LangChain4j作为Java专用LLM集成库的核心功能,包括多模 阅读详情

LangGraph4j 是一个 Java实现的开源 AI 工作流框架,它受到了 Python 版本 LangGraph的启发,能够与 LangChain4j 和 Spring AI无缝集成,而且这个框架还是开源的。

核心特性

1、StateGraph 工作流图

在LangGraph4j 中,StateGraph 是主要使用的核心类,用于定义应用程序的结构。
它将复杂的AI工作流抽象为一个有向图 的概念。每个 节点 代表一个具体的操作单元,比如调用 LLM 生成文本、搜索外部数据、处理用户输入等。节点之间通过 边 来连接,多个节点之间通过 状态 来共享数据,形成了一个完整的处理流程。
和传统的有向无环图不同,LangGraph4j 支持循环,比如一个智能体可能需要根据结果回到之前的步骤进行重试,或者需要在某个条件满足之前持续循环执行某个逻辑。
注意,使用图之前必须编译编译过程不仅会进行基础的结构检查,还会定义运行时参数,创建一个不可变的、可运行的图。

2、AgentState 状态

AgentState 是整个工作流的状态载体,它本质上是一个Map,在不同节点之间传递。每个节点都可以从这个状态中读取数据,并返回对状态的更新。
注意:实际应用中,如果不需要利用 LangChain4j 的持久化机制,就不建议大家用内置的 Schema 和 Reducer 来维护状态了。不如自己定义一个Context 上下文类来管理状态,想怎么操作状态就怎么操作,不用理解 LangGraph4j 自己的一套语法。

3、Nodes工作节点

节点是图的构建块,负责执行具体的操作。
工作流程:首先接收当前的AgentState 状态作为输入,然后执行某些计算(比如调用 LLM、执行工具、运行自定义业务逻辑),最后返回一个 Map<String,Object>,表示对状态的更新。这些更新会根据 Schema中定义的 Reducer应用到 AgentState 中。
节点可以是同步的,也可以是异步的,甚至可以多个节点同时执行。
LangGraph4j 还定义了两个特殊的节点:START 和 END。START 节点表示图的入口点,END节点表示执行路径的结束点。

import static org.bsc.langgraph4j.StateGraph.START;
import static org.bsc.langgraph4j.StateGraph.END;

graph.addEdge(START, "nodeA");
graph.addEdge("nodeA", END);

4、Edges 边

边定义了节点之间的控制流,决定了工作流的执行路径。正如官方文档所说:“节点负责干活,边负责决定下一步”。
LangGraph4j 支持几种不同类型的边:
● 普通边:最简单的边类型,提供一个节点到另外一个节点的无条件转换。可以通过addEdge(sourceNodeName,destinationNodeName)来定义普通边。
● 条件边:下一个节点是根据当前AgentState动态确定的,更加灵活。当源节点完成后,会执行一个判断函数,这个函数接收当前状态并返回下一个要执行的节点名称。相当于实现了if else 分支逻辑。比如智能体决定使用工具,就跳转到“执行工具”节点,否则跳转到“回复用户”节点。
● 入口点:可以定义当用户输入到达首先调用哪个节点,同样支持条件入口点

5、Checkpoints 检查点

检查点允许你保存图在任何步骤的状态,也就是状态的持久化,有利于调试和恢复复杂的工作流。
检查点的核心作用主要体现在两个方面:
● 支持人类检查、中断喝批准工作步骤。在某些场景下,人类必须能够在任何时间点查看土地状态,并且图必须能够在人类对状态进行任何更新后恢复执行。这种“人在环路”的设计在许多实际应用中都是必须的。
● 允许通过线程隔离不同用户的交互,并且相同用户可以恢复之前的记忆。这对于构建多用户的AI 应用来说特别重要,每个用户都可以由自己的执行历史。根我们之前学习的 Chat Memory对话记忆类似,给工作流传入不同的 thread_id 配置即可:

var config = RunnableConfig.builder()
                  .threadId("a")
                  .build();
graph.invoke(inputs, config);
LangGraph4j 默认提供了基于内存的检查点器:
var saver = new MemorySaver();

Demo

了解核心特性后,我们来运行一个demo:
1、引入pom

<!-- LangGraph4j -->
<dependency>
    <groupId>org.bsc.langgraph4j</groupId>
    <artifactId>langgraph4j-core</artifactId>
    <version>1.6.0-rc2</version>
</dependency>

2、引入代码

package com.yuliang.aicodemother.langgraph4j.demo;

import org.bsc.langgraph4j.action.NodeAction;
import java.util.Collections;
import java.util.List;
import java.util.Map;

// Node that adds a greeting
class GreeterNode implements NodeAction<SimpleState> {
    @Override
    public Map<String, Object> apply(SimpleState state) {
        System.out.println("GreeterNode executing. Current messages: " + state.messages());
        return Map.of(SimpleState.MESSAGES_KEY, "Hello from GreeterNode!");
    }
}

// Node that adds a response
class ResponderNode implements NodeAction<SimpleState> {
    @Override
    public Map<String, Object> apply(SimpleState state) {
        System.out.println("ResponderNode executing. Current messages: " + state.messages());
        List<String> currentMessages = state.messages();
        if (currentMessages.contains("Hello from GreeterNode!")) {
            return Map.of(SimpleState.MESSAGES_KEY, "Acknowledged greeting!");
        }
        return Map.of(SimpleState.MESSAGES_KEY, "No greeting found.");
    }
}


package com.yuliang.aicodemother.langgraph4j.demo;

import org.bsc.langgraph4j.state.AgentState;
import org.bsc.langgraph4j.state.Channels;
import org.bsc.langgraph4j.state.Channel;

import java.util.*;

// Define the state for our graph
class SimpleState extends AgentState {
    public static final String MESSAGES_KEY = "messages";

    // Define the schema for the state.
    // MESSAGES_KEY will hold a list of strings, and new messages will be appended.
    public static final Map<String, Channel<?>> SCHEMA = Map.of(
            MESSAGES_KEY, Channels.appender(ArrayList::new)
    );

    public SimpleState(Map<String, Object> initData) {
        super(initData);
    }

    public List<String> messages() {
        return this.<List<String>>value("messages")
                .orElse( List.of() );
    }
}
package com.yuliang.aicodemother.langgraph4j.demo;

import org.bsc.langgraph4j.GraphRepresentation;
import org.bsc.langgraph4j.StateGraph;
import org.bsc.langgraph4j.GraphStateException;
import static org.bsc.langgraph4j.action.AsyncNodeAction.node_async;
import static org.bsc.langgraph4j.StateGraph.START;
import static org.bsc.langgraph4j.StateGraph.END;

import java.util.List;
import java.util.Map;

public class SimpleGraphApp {

    public static void main(String[] args) throws GraphStateException {
        // Initialize nodes
        GreeterNode greeterNode = new GreeterNode();
        ResponderNode responderNode = new ResponderNode();

        // Define the graph structure
       var stateGraph = new StateGraph<>(SimpleState.SCHEMA, initData -> new SimpleState(initData))
            .addNode("greeter", node_async(greeterNode))
            .addNode("responder", node_async(responderNode))
            // Define edges
            .addEdge(START, "greeter") // Start with the greeter node
            .addEdge("greeter", "responder")
            .addEdge("responder", END)   // End after the responder node
             ;
        // Compile the graph
        var compiledGraph = stateGraph.compile();

        GraphRepresentation demo = stateGraph.getGraph(GraphRepresentation.Type.MERMAID, "demo");
        System.out.println(demo.toString());

        // Run the graph
        // The `stream` method returns an AsyncGenerator.
        // For simplicity, we'll collect results. In a real app, you might process them as they arrive.
        // Here, the final state after execution is the item of interest.

        for (var item : compiledGraph.stream( Map.of( SimpleState.MESSAGES_KEY, "Let's, begin!" ) ) ) {

            System.out.println( item );
        }
    }
}

运行结果,得到的图
在这里插入图片描述

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

相关推荐

将LangGraph4j开发的Agent智能体封装成MCP服务(附源码)

所谓“将智能体封装为 MCP 服务”,是指将一个已经具备自主决策、任务规划、记忆管理、工具调用等功能的智能体系统,通过标准化接口包装为符合 MCP 协议的服务模块。这样,该智能体即可作为 MCP 网络中的一个独立节点,对外提供能力调用、资源访问、上下文交互等功能。

weixin_44455388的博客 1273

AI大模型综合(二)LangGraph4j(完整示例)

LangGraph4j 是一个专为 Java设计的开源库,用于构建状态ful、多智能体应用,并与语言模型(LLMs)无缝集成‌,支持复杂任务协作与流程管理。‌LangGraph4j 基于状态图(StateGraph)模型,通过节点(Node)、边(Edge)和检查点(State)实现智能体协作。

我的E家 4590

LangGraph4j 超详细入门与实战教程

摘要:LangGraph4j是一个为Java开发者设计的AI智能体开发框架,支持构建复杂有状态的工作流。该框架基于有向图模型,核心组件包括StateGraph(状态图)、AgentState(智能体状态)、Node(节点)和Edge(边),支持条件分支、循环和并行执行。通过检查点机制实现故障恢复和人机交互功能。教程包含从环境搭建到实战案例的完整指南,涵盖简单的问候机器人、舆情分类智能体以及多智能体协作等场景。LangGraph4j与LangChain4j等Java LLM框架深度集成,支持可视化调试和Pla

分享AI、区块链技术及应用,未来已来 318

【免费下载】 langgraph4j:构建状态丰富多智能体应用的利器

在当今技术快速发展的时代,构建高效且灵活的状态ful多智能体应用已成为开发者追求的目标。langgraph4j 正是这样一款开源库,为Java开发者提供了一种构建与LLMs协同工作的多智能体应用的新方法。下面,让我们一起来探索langgraph4j的核心功能、技术分析、应用场景和项目特点。 ## 项目介绍 langgraph4j 是一个专为Java设计的库,它支持开发者构建状态ful、多智能体...

gitblog_01043的博客 3906

ROS TF坐标转换实战:从零搭建机器人坐标系(附常见问题排查)

本文提供了一份ROS TF坐标转换的实战指南,详细讲解了如何从零为机器人搭建完整的坐标系,并深入解析了TF的原理。内容涵盖静态与动态坐标变换的发布、URDF模型使用、以及Rviz和rqt_tf_tree等可视化调试工具。文章还附带了常见问题排查表,帮助开发者快速定位并解决TF树断裂、数据错位等典型问题。

weixin_29268385的博客 204

iverilog+GTKwave使用总结

iverilog是一个开源的硬件描述语言(HDL)仿真工具,用于对硬件描述语言(如Verilog)编写的数字电路进行仿真。它可以将Verilog代码编译为仿真模型,并通过仿真运行来验证设计的正确性。iverilog支持IEEE 1364-2005 Verilog语言标准,并提供了丰富的功能,包括对多种Verilog语言特性的支持、模块化设计、测试平台等。它还可以与其他工具(如GTKWave波形查看器)配合使用,以便进行仿真后的波形查看和分析。

争取早日成为硅农 2万+

Java也能做AI Agent了!LangGraph4j 入门指南

langgraph4j 是一个专为Java设计的库,它支持开发者构建状态ful、多智能体应用,并能够与语言模型(LLMs)无缝集成。

2401_85325726的博客 5216

Intel Realsense windows安装与入门

realsense400系列介绍: https://www.intelrealsense.com/stereo-depth/?utm_source=intelcom_website&utm_medium=button&utm_campaign=day-to-day&utm_content=D400_learn-more_button realsense 435i介绍: ...

hanshuning的专栏 1万+

LangGraph4j入门指南:从零开始学图计算

我通过简单的示例代码,展示了如何使用这些算法遍历图中的节点,并打印出遍历顺序。编写测试不仅帮助我发现了一些边界条件的错误,也加深了对图算法行为的理解。通过使用LangGraph4j提供的性能分析工具,我找到了算法的瓶颈所在,并进行了优化。这个过程中,我学会了如何评估图算法的复杂度,以及选择合适的数据结构来提升性能。作为一个刚接触图算法的开发者,我记录下自己的学习过程,希望帮助同样入门的朋友快速上手。通过这个项目,我不仅掌握了LangGraph4j的基本用法,也对图计算有了更深入的理解。

OnyxPanther23的博客 480

摄像头模组CCM简介

摄像头模组,全称Camera Compact Module,简写为CCM。CCM 包含几大件: 镜头(lens)、音圈马达(VCM)、传感器(sensor)、软板(FPC)、图像处理芯片(DSP)。工作原理:物体通过镜头(lens)聚集的光,通过CMOS或CCD集成电路,把光信号转换成电信号,再经过内部图像处理器(ISP)转换成数字图像信号输出到数字信号处理器(DSP)加工处理,转换成标准的GRB、YUV等格式图像信号。摄像头模组主要由以下几个部分组成:镜头(Lens):将光线汇聚到图像传感器上。

m0_73482095的博客 1万+

最近腾讯手机管家a.gray.Bulimia.a病毒提示决解方案

仅供参考(个人问题已解决 未申诉) 用户反馈app提示病毒图如下 然后下载生产包去https://www.virustotal.com/gui/这个网站去检测 果真提示病毒 重新加版本 打了个包 未加固 检测没问有问题 同一个包用360加固之后再检测有问题 ,但是没有a.gray.Bulimia.a报病毒 然后再用应用宝加固检测也没问题,个人以前都是用360加固的,很尴尬啊 最重要的一点的是,更新一个版本号,其余的啥都没改,更新替换手机的原来版本app,腾讯手机.

村头那抠脚大叔的专栏 3万+

LangGraph4j 入门指南

LangGraph4j 入门指南

卓越之识论道,平常之识论事,狭隘之识论人 632

AIGC游戏测试自动化:AI如何提升游戏QA效率

随着游戏产业的蓬勃发展,游戏的复杂度和规模不断增加,传统的游戏测试方式面临着巨大的挑战。本文章的目的在于深入探讨AIGC技术在游戏测试自动化中的应用,分析AI如何提升游戏QA的效率。范围涵盖了从核心概念到实际应用的各个方面,包括算法原理、数学模型、项目实战案例以及未来发展趋势等。本文将按照以下结构进行阐述:首先介绍核心概念与联系,明确AIGC和游戏测试自动化的相关概念和关系;接着讲解核心算法原理和具体操作步骤,通过Python代码进行详细说明;然后介绍数学模型和公式,并举例说明;

AI 原生应用开发的博客 1354

零基础入门:用LANGGRAPH4J构建第一个图应用

我们在边的权重上做了调整:同一线路的站点间权重设为1,换乘则增加额外权重。新建Maven项目时,在pom.xml中添加LANGGRAPH4J依赖,这个库封装了图算法的常见操作,比手动实现邻接表方便很多。创建图对象时,每个站点是顶点,相邻站点之间用带权重的边连接(权重可以表示距离或时间)。为提升体验,添加了自动补全功能——当用户输入站点前缀时,显示匹配的站点列表。这个项目不仅能帮助理解图论的实际应用,还能学到很多实用的Java编程技巧。整个过程下来,不仅理解了图算法的应用场景,还掌握了项目开发的完整流程。

CrystalwaveEagle34的博客 945

HTML5+CSS3+JS小实例:扇形展开折叠菜单

你肯定见过那种圆形浮动按钮(FAB),点一下弹出几个选项。大部分实现就是菜单项从底下往上"弹"出来,排成一列——能用,但没啥记忆点。后来我看到 Path 那个经典的扇形菜单,点一下,五个按钮像花瓣一样从中心散开,每个带不同的延迟和弹性曲线。当时就觉得:这才对嘛,交互就该有点"戏剧性"。今天拆一个纯手写版本,HTML + CSS + JS,不依赖任何库。六菜单项、扇形 144° 展开、弹性过渡、点击关闭、键盘可达——该有的都有。

艾恩小灰灰的博客 164

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

第 14 章 · LangGraph4j 入门:AI Agent 什么时候该上状态图

相比SpringAI聚焦模型与工具调用,LangGraph4j专注流程控制,适用于审批、并行、子图、断点续跑等场景。上图前提:需求涉及多分支、循环或需状态持久化;否则优先稳住SpringAI主链。

javaqilong的专栏 169

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LangGraph4j 入门指南:Java有状态多Agent工作流编排框架

LangGraph4j 是受 Python LangGraph 启发的 Java 有状态多 Agent 工作流编排框架,支持循环、分支与持久化,适用于复杂 LLM 应用。通过 StateGraph 定义节点与边,以 AgentState 共享状态,可与 LangChain4j 或 Spring AI 集成。本文介绍其核心概念、安装配置及首个顺序工作流实战,助力开发者快速构建可调试、可可视化、可续跑的智能工作流。

BADAO_LIUMANG_QIZHI的博客 372

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java AI Agent开发:LangGraph4j状态图入门与选型实践

在现代软件工程中,流程编排是构建复杂业务系统的核心能力,尤其当分支、循环与人工介入交织时。状态图作为一种显式的控制流建模方式,将动作拆分为节点、转移条件定义为边,配合可持久化的共享状态,能显著提升系统的可观测性与可恢复性。在AI Agent领域,这种思想同样适用:模型驱动的工具调用和自主决策天然具备多步不确定性,使用状态图管理Agent生命周期,可避免手写while/if带来的逻辑混乱,并可支持断点续跑与人工审批。对于Java开发者,LangGraph4j将这一理念落地,与Spring AI形成互补——前者

weixin_32612263的博客 317

LangGraph4j开发实战教程(非常详细),Java打造AI智能体从入门到精通,收藏这一篇就够了!

当Python生态中的LangChain、LangGraph如火如荼时,Java开发者是否只能望洋兴叹?答案是否定的!**LangGraph4j** —— 这个专为Java打造的AI智能体编排框架,正在悄然改变Java AI开发的格局。

m0_59163425的博客 3378

LangGraph4j 入门实战:用状态图编排 Spring AI 多步 Agent 流程

AI Agent 开发中,多步流程与状态管理是核心挑战。传统 if-else 编排在条件分支、循环重试、人工介入等场景下极易失控。状态图(StateGraph)通过节点、边和共享状态显式定义执行流程,天然支持条件流转、暂停恢复与多 Agent 协作,配合 Checkpoint 机制可实现流程持久化与可追溯。在客服工单、内容审核、数据分析等需要多步决策的场景中,状态图能显著提升可维护性与可测试性。LangGraph4j 作为 Java 版状态图编排框架,与 Spring AI 配合使用,由 Spring AI

weixin_32247165的博客 235

如何快速掌握langgraph4j:构建Java多智能体应用的终极指南

langgraph4j是专为Java开发者打造的**多智能体应用构建库**,它能轻松创建状态丰富、支持LLM集成的智能体系统。无论是复杂的对话机器人、多智能体协作平台,还是动态工作流引擎,langgraph4j都能提供直观的图形化编程体验,让AI应用开发效率提升300%! ## ???? 为什么选择langgraph4j?核心优势解析 ### ???? 零代码也能设计智能体流程图 通过内置的**可视化...

gitblog_00768的博客 1750

收藏必备!小白程序员轻松入门大模型:用TaoToken统一Key打通Spring AI与LangGraph4j

用TaoToken统一Key打通Spring AI与LangGraph4j,Java程序员半小时跑通大模型对话服务。本文提供可复制Maven依赖、application.yml配置与三步工作流代码,并附401、local proxy failed等常见报错排查,助你快速入门大模型开发。详见 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_42596011的博客 6

java-async-generator 入门指南:Java异步流式生成器的核心用法与LangGraph4j实战

本文介绍Java异步生成器库java-async-generator,其核心功能是实现惰性、可中断的异步流处理,支持链式操作如map、filter、take及多生成器合并。通过AsyncGeneratorQueue实现生产者-消费者模式,适用于批量调用、消息流、分页查询等场景。结合LangGraph4j,可实现图执行的流式输出与优雅取消。需Java 17+,Maven引入后,可通过forEachAsync或同步遍历消费数据,显著提升异步编程可读性与灵活性。

BADAO_LIUMANG_QIZHI的博客 227

【大模型应用】LangGraph 详细介绍和 Java 项目使用方式

摘要: LangGraph是针对LLM/Agent体系中复杂任务(如状态管理、多agent协作、动态控制流)设计的底层框架,强调图化结构、状态维护和可控流程。其核心包括节点(任务单元)、边(控制流)、状态管理(共享/局部数据)和执行引擎(调度、容错、人工干预)。支持与LLM、工具、Memory集成,并提供可视化调试工具。开源实现包括Python版(LangChain官方)和Java版(LangGraph4j),均具备异步执行、检查点持久化和生态集成能力,旨在为开发者提供灵活、可观测的Agent编排方案。

NeoLshu的博客 2722

Java 程序员入门大模型开发,这次用 TaoToken 让 Codex 走通 LangGraph4j 模型调用

LangGraph4j 的 model_call 节点第一次调不通,卡住的通常不是 Java 语法,而是大模型开发里的模型调用链太散。用 TaoToken(https://taotoken.net/?utm_source=taotoken_aicg_blog_end)做统一通道,Codex 只需在 ~/.codex/config.toml 里加一个 taotoken provider,model_call 节点即可通过一份配置完成流式输出,Spring AI 里也不用再为通义千问、DeepSeek、Open

weixin_42587866的博客 15
上一篇: 惊喜!PS浏览器插件免费领一年,修图从未如此简单!
下一篇: jeecg mysql主从复制
智汇风渔AI小白
博客等级 码龄7年 1万+粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智汇风渔AI小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值