首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LangGraph4j 学习系列(1)-顺序工作流

LangGraph4j 学习系列(1)-顺序工作流

作者头像
菩提树下的杨过
发布2026-02-17 07:53:57
发布2026-02-17 07:53:57
2010
举报

一句话秒懂

LangGraph是一个状态管理和工作流编排框架,专注于构建复杂的多步骤应用,LangGraph4j是LangGraph开源生态中的java实现。

既生瑜?何生亮?

Dify VS LangGraph4j (有了dify,还有必要学习langgraph之类的编排框架吗?)

听听deepseek 怎么说?

deepseek
deepseek

官网

https://github.com/langgraph4j

基本概念

langgraph4j
langgraph4j

温馨提示:初学者只需了解 节点(NodeAction)、边(EdgeAction)、状态(AgentState) 即可快速上手。

文档

https://deepwiki.com/langgraph4j/langgraph4j

顺序工作流

lg4j_01
lg4j_01

定义节点

代码语言:javascript
复制
import org.bsc.langgraph4j.action.NodeAction;
import org.bsc.langgraph4j.state.AgentState;

import java.util.Map;

/**
 * @author junmingyang
 */
public class Node1Action implements NodeAction<AgentState> {
    @Override
    public Map<String, Object> apply(AgentState state) throws Exception {
        System.out.println("current Node: node-1");
        return Map.of("myData", "node1-my-value",
                "node1Key", "node1-value");
    }
}
代码语言:javascript
复制
import org.bsc.langgraph4j.action.NodeAction;
import org.bsc.langgraph4j.state.AgentState;

import java.util.Map;

/**
 * @author junmingyang
 */
public class Node2Action implements NodeAction<AgentState> {
    @Override
    public Map<String, Object> apply(AgentState state) throws Exception {
        System.out.println("current Node: node-2");
        return Map.of("myData", "node2-my-value",
                "node2Key", "node2-value");
    }
}

注:节点上可以携带数据(即:节点的状态),当工作流运行至本节点时,apply()方法将会调用,业务处理逻辑在此处理(如何:包括调用LLM,调用其它接口来更新状态)

完整示例

代码语言:javascript
复制
import org.bsc.langgraph4j.GraphDefinition;
import org.bsc.langgraph4j.GraphRepresentation;
import org.bsc.langgraph4j.GraphStateException;
import org.bsc.langgraph4j.StateGraph;
import org.bsc.langgraph4j.state.AgentState;

import java.util.Map;

import static org.bsc.langgraph4j.action.AsyncNodeAction.node_async;

/**
 * SequenceGraphApplication 类演示了如何使用 LangGraph4j 构建和执行一个简单的序列图。
 * 该应用程序创建了一个包含两个节点的序列图,节点按顺序执行:
 * START -> node-1 -> node-2 -> END
 * 
 * @author 菩提树下的杨过(yjmyzz.cnblogs.com)
 * @since 1.0
 */
public class SequenceGraphApplication {

    public static void main(String[] args) throws GraphStateException {
        StateGraph<AgentState> sequenceGraph = getSequenceGraph();

        //打印图的mermaid代码
        System.out.println(sequenceGraph.getGraph(GraphRepresentation.Type.MERMAID, "Sequence Graph", true).content());

        //编译图并运行(初始数据值为 test->test-init-value
        sequenceGraph
                .compile() //编译
                .invoke(Map.of("test", "test-init-value")) //运行(并赋初始值)
                .ifPresent(c -> {
                    //运行结束后,会执行本段逻辑
                    System.out.println(c.data());
                });

    }

    public static StateGraph<AgentState> getSequenceGraph() throws GraphStateException {
        return new StateGraph<>(AgentState::new)
                //向图中添加2个节点
                .addNode("node-1", node_async(new Node1Action()))
                .addNode("node-2", node_async(new Node2Action()))
                //加一条边(开始->node1)
                .addEdge(GraphDefinition.START, "node-1")
                //加1条边(node1->node2)
                .addEdge("node-1", "node-2")
                //加1条边(node2->结束)
                .addEdge("node-2", GraphDefinition.END);
    }


}

运行结果

代码语言:javascript
复制
current Node: node-1
current Node: node-2
{node1Key=node1-value, test=test-init-value, node2Key=node2-value, myData=node2-my-value}

解释

第3行是运行到END节点时,图的最终状态数据,可以看到myData被node2中的值覆盖成node2-my-value。而其它key的值,每经过1个节点,都会被merge进AgentState的data map中。

文中源码

https://github.com/yjmyzz/langgraph4j-study/tree/main/src/main/java/org/bsc/langgraph4j/agent/_05_sequence

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档