当前位置: 首页 > news >正文

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

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

既生瑜?何生亮?
Dify VS LangGraph4j (有了dify,还有必要学习langgraph之类的编排框架吗?)
听听deepseek 怎么说?
deepseek

 

官网
https://github.com/langgraph4j

 
基本概念
langgraph4j

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


文档
https://deepwiki.com/langgraph4j/langgraph4j
 
 
顺序工作流
 lg4j_01

 

定义节点

import org.bsc.langgraph4j.action.NodeAction;
import org.bsc.langgraph4j.state.AgentState;import java.util.Map;/*** @author junmingyang*/
public class Node1Action implements NodeAction<AgentState> {@Overridepublic 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");}
}

  

import org.bsc.langgraph4j.action.NodeAction;
import org.bsc.langgraph4j.state.AgentState;import java.util.Map;/*** @author junmingyang*/
public class Node2Action implements NodeAction<AgentState> {@Overridepublic 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,调用其它接口来更新状态)

 
完整示例
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-valuesequenceGraph.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);}}

  

运行结果
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
http://www.jsqmd.com/news/387734/

相关文章:

  • 提升AI原生应用领域知识抽取的准确性
  • 提升Python编程效率的五大特性
  • 【低PAPR、低延迟、高谱效率】一种新型调制方案,结合了滤波器组多载波(FBMC)偏移正交幅度调制(OQAM)和单载波频分多址(SC-FDMA)的优势
  • 【低压配电网】【对单相接地低压电网监测方案性能】在径向低压测试馈线上使用WLS状态估计器的性能
  • 前端营销(AIGC II)
  • 永磁同步电机改进型三矢量模型预测电流控制,参考张晓光老师的论文Model Predictive...
  • duckdb polyglot 插件的使用
  • 完整教程:给 MHTML 添加滚动条.mhtml
  • 生产环境deepseek文档导出最佳实践与性能优化
  • GA-TCN-Transformer组合模型回归+SHAP分析+新材料预测+多输出!深度学习可解释分析MATLAB代码
  • CentOS 下 Keepalived 高可用配置
  • 在中国区EKS集群使用 kgateway 代理 Lambda 函数的实践过程
  • Photoshop - Photoshop 工具栏(62)切片选择工具
  • 永辉超市购物卡回收,省心又划算的处理之道 - 京顺回收
  • Eureka 在大数据计算中的应用实践
  • C++初学的常见问题 之五——C++ 数组、指针与静态成员深度剖析:从常见错误到核心原理
  • C++初学的常见问题 之四
  • 2025 年终总结——解构,重构与锚点
  • Spring3整合MyBatis构建增删改查操作
  • 开启超人类推理之旅![特殊字符]✨
  • C++初学的常见问题 之三
  • 2月16号
  • 神经网络驱动的商业智能:需求与价格预测全流程解析
  • AI销冠系统是什么?数字员工在企业创新与效率提升中的价值何在?
  • ios 快捷指令 github跳转deepwiki
  • openclaw怎么调用记忆的
  • 前端营销I(From AIGC)
  • 10kV线路微机继电保护装置源代码,配套pcb图纸和bom。 适合自己学习的素材,也可作为基础...
  • ctfshowweb361--一道题从0入门SSTI模板注入
  • 深入解析:【Linux】零基础学习命名管道-共享内存