面试官:“你连个Agent项目都没有也好意思投简历?”我反驳:“LangGraph4J、Function Calling不算?”面试官:“我错了。”
老王发量很多,且阳光自信,一看就是刚入职没两年的热血青年,但确实有面试官的威严。
这是我的第一场面试,说不紧张那是不可能的。
但提前已经和同频道的宿友互面了两周,面对老王的压力,自认为能扛得住。😄
“我看你简历上连个Agent项目都没有,你难道不知道现在是AI时代吗?”老王第一次张嘴就开始给压力。
我倒是一点都没怂:“LangGraph4J+SpringAI做的这个工作流编排就是啊,王哥,你仔细看。”
“你小子,挺能被压力嘛,我就是测试一下你的心态。”老王一下子和蔼了起来,我们之间的感情好像升温了一般,空气也变得微妙了起来~
“王哥,你继续,我对 PaiAgent这个项目还是自信的,一手Vibe Coding完成的,在GitHub上也有快200 star 了。”

content
01、LangGraph4j 中的 State 是干什么用的?
“先聊聊 State,你们项目里 LangGraph4j 的 State 是怎么用的?”
我说:“王哥,State 在 LangGraph4j 里是整个工作流的‘记忆中枢’。”
你可以把它理解成一个贯穿所有节点的数据背包——每个节点执行完,都把结果往这个背包里塞一份,下一个节点从背包里拿上一个节点的输出来用。
在 PaiAgent 里,我们设计了一个 WorkflowState 类,里面有几个核心字段:
@Data
public class WorkflowState {
private String currentNodeId;
private Map globalContext = new HashMap<>();
private Map nodeOutputs = new HashMap<>();
private String status = "RUNNING";
private String errorMessage;
private Long startTime;
private String inputData;
}
currentNodeId 记录当前执行到哪个节点了,nodeOutputs 存每个节点的执行结果,globalContext 用来放跨节点的共享数据。
不过实际实现中,我们并没有直接把 WorkflowState 塞进 LangGraph4j 的 StateGraph。
LangGraph4j 要求用 AgentState,底层其实是一个 Map。所以我们在 StateManager 里做了一层转换——初始化的时候把 inputData、currentInput、nodeOutputs、status 这些字段放到一个 Map 里,传给 LangGraph4j:
public Map initializeState(String inputData) {
Map state = new HashMap<>();
state.put("inputData", inputData);
Map currentInput = new HashMap<>();
currentInput.put("input", inputData);
state.put("currentInput", currentInput);
state.put("nodeOutputs", ... 企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
热门评论
5 条评论
回复