万维网网站注册,一键网站制作,活动推广软文,wordpress redis wp_post摘要#xff1a;为什么现在的 AI Agent#xff08;如 Manus#xff09;能自主写代码、修 Bug#xff1f;秘密在于“循环”。传统的 Chain 架构是一条直线#xff0c;而 Agent 架构是一个圆。本文将深入剖析 Spring AI Alibaba Graph 模块#xff0c;揭示它是如何通过“图…摘要为什么现在的 AI Agent如 Manus能自主写代码、修 Bug秘密在于“循环”。传统的 Chain 架构是一条直线而 Agent 架构是一个圆。本文将深入剖析Spring AI Alibaba Graph模块揭示它是如何通过“图论”思想实现复杂任务编排的并手把手带你构建一个**“会自我反思的代码审计 Agent”**。第一部分什么是 Spring AI Alibaba Graph在 AI 开发中我们经常遇到这样的场景线性逻辑Chain用户提问 - 检索 RAG - 生成答案。这是 ChatClient 擅长的。循环逻辑Loop写代码 - 运行报错 - 读取错误 - 修改代码 - 再运行。这是 Graph 擅长的。Spring AI Alibaba Graph是一个基于状态机State Machine和图论Graph Theory的低代码编排框架。它对标的是 Python 界的LangGraph。核心概念模型State (状态)一个共享的内存对象通常是一个 Map 或 Java Record。所有节点都从这里读数据往这里写数据。这是 Agent 的“短期记忆”。Node (节点)执行具体任务的单元如调用大模型、执行 SQL、搜索网页。Edge (边)连接节点的线。Normal Edge做完 A就去 B。Conditional Edge做完 A根据结果判断是去 B 还是回 C实现循环的关键。Graph (图)将上述元素编译成一个可执行的 Runnable。第二部分源码视角的架构解析打开 spring-ai-alibaba-graph 的源码概念模型你会发现它极其精简。1. StateGraph (画布)这是核心入口。public class StateGraphT { // 注册节点 public void addNode(String name, FunctionT, T action) { ... } // 注册边 public void addEdge(String from, String to) { ... } // 注册条件边 (路由逻辑) public void addConditionalEdges(String source, FunctionT, String router, MapString, String pathMap) { ... } // 编译成可运行的 APP public CompiledGraphT compile() { ... } }2. Checkpoint (存档点) - 高级特性源码中通常包含持久化接口。这意味着 Agent 运行到一半比如等待人类审批可以将当前 State 序列化存入数据库。下次加载时恢复内存继续运行。这对于长程任务Long-running task至关重要。3. Saver Loader为了支持像JManus那样运行 24 小时Graph 模块内部实现了状态的快照保存机制。第三部分实战——构建一个“自我修正的代码审计 Agent”我们将构建一个 Agent它不会写完代码就跑而是会自己检查。如果发现有 Bug它会重写直到通过审查为止。1. 定义状态 (The Memory)首先我们需要定义 Agent 的大脑里存什么东西。// Agent 的共享内存状态 public class AgentState { private String userRequirement; // 用户需求 private String generatedCode; // 生成的代码 private String reviewComment; // 审查意见 private int retryCount; // 重试次数防止死循环 // Getters, Setters, Constructor... }2. 定义节点 (The Nodes)我们需要两个核心节点Coder写手和Reviewer审核员。Configuration public class GraphConfig { Autowired private ChatClient chatClient; // 节点 1: 程序员 Bean public FunctionAgentState, AgentState coderNode() { return state - { String prompt 请根据需求写 Java 代码。需求 state.getUserRequirement(); if (state.getReviewComment() ! null) { prompt \n 上次审核没通过意见是 state.getReviewComment() 。请修复。; } String code chatClient.prompt().user(prompt).call().content(); state.setGeneratedCode(code); state.setRetryCount(state.getRetryCount() 1); System.out.println( Coder 已生成代码 (第 state.getRetryCount() 次)); return state; }; } // 节点 2: 审核员 Bean public FunctionAgentState, AgentState reviewerNode() { return state - { String prompt 请审核以下代码如果通过回复 PASS否则回复具体修改建议。\n代码\n state.getGeneratedCode(); String comment chatClient.prompt().user(prompt).call().content(); state.setReviewComment(comment); System.out.println( Reviewer 意见: comment); return state; }; } }3. 定义路由逻辑 (The Router)这是 Agent 的“判断力”。Bean public FunctionAgentState, String checkResultRouter() { return state - { // 1. 如果审核通过结束 if (state.getReviewComment().contains(PASS)) { return END; } // 2. 如果重试超过 3 次强制结束避免死循环耗干 Token if (state.getRetryCount() 3) { return END; } // 3. 否则打回重写 return RETRY; }; }4. 组装图 (Assemble the Graph)现在把积木搭起来。Service public class CodeAgentService { Autowired private StateGraphAgentState stateGraph; // 假设这是库提供的 builder public String generateHighQualityCode(String requirement) { // 1. 初始化图构建器 var workflow new StateGraph(AgentState.class); // 2. 添加节点 workflow.addNode(coder, coderNode()); workflow.addNode(reviewer, reviewerNode()); // 3. 定义边 (Edge) workflow.setEntryPoint(coder); // 起点 workflow.addEdge(coder, reviewer); // 写完 - 审核 // 4. 定义条件边 (Conditional Edge) // 从 reviewer 出来根据 router 的结果决定去哪 workflow.addConditionalEdges( reviewer, checkResultRouter(), Map.of( RETRY, coder, // 审核不通过 - 回去重写 (形成闭环!) END, end // 审核通过 - 结束 ) ); // 5. 编译并运行 var app workflow.compile(); // 6. 初始状态 AgentState input new AgentState(); input.setUserRequirement(requirement); input.setRetryCount(0); // 7. 执行 AgentState result app.invoke(input); return result.getGeneratedCode(); } }运行效果模拟当你调用 generateHighQualityCode(写一个冒泡排序) 时控制台可能会打印--- 任务开始 --- Coder 已生成代码 (第 1 次) Reviewer 意见: 逻辑大致正确但缺少边界条件检查数组为空会报错。 --- 触发 RETRY 路由回滚至 Coder --- Coder 已生成代码 (第 2 次) - AI 读取了意见添加了 if(arr null) 判断 Reviewer 意见: PASS --- ✅ 触发 END 路由任务完成 ---这就是JManus等项目的核心原理通过图结构让 AI 拥有了“自我反思”和“迭代优化”的时间窗口。总结Spring AI Alibaba Graph的出现填补了 Java 生态在 Agent 编排领域的空白。对比 ChatClientChatClient 是“射箭”开弓没有回头箭Graph 是“自动驾驶”实时感知路况并调整方向。适用场景代码生成与修复如本例、长篇报告写作大纲 - 写草稿 - 润色 - 总结、复杂多步任务如制定旅游计划 - 订票 - 失败则修改计划 - 再订票。目前Spring AI Alibaba Graph的定位似乎有了新的变化目前官方也做了重新规划新的消息待确认后在Spring AI Alibaba系列和大家同步。欢迎关注、一起学习、一起进步