news 2026/9/30 9:10:47

上篇手写多Agent写了500行?Spring AI Alibaba官方就有,几行搞定

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
上篇手写多Agent写了500行?Spring AI Alibaba官方就有,几行搞定


上一篇我们手写了一套多Agent协作框架:定义AgentRole、写任务分发器、自己起线程池做并行、手写executeWithFeedback做反馈循环,前前后后500多行。发出去之后,评论区有个同学说得很直接:

“这不就是自己造了个迷你版Spring AI Alibaba吗?官方不是有多Agent支持吗?”

被他说中了。我们手写那套,就是为了让你看懂多Agent是怎么跑起来的——真到项目里,没必要自己造轮子。Spring AI Alibaba 1.0 GA 已经把这套协作原语内置了:定义角色用ReactAgent,串流水线用SequentialAgent,并行用ParallelAgent,主管调度用Supervisor模式。今天就把上篇那套,用SAA重写一遍,你看看从500行能瘦到多少。


一、先对账:我们手写了什么,框架替你做了什么

上篇手写(500行)Spring AI Alibaba
AgentRole+ 四个静态角色定义ReactAgent.builder().name().instruction()一个Builder
executePipeline顺序流水线SequentialAgent.builder().agents(a,b,c)
自己写CompletableFuture+线程池并行ParallelAgent.builder(),内置合并策略
手写executeWithFeedback反馈循环Supervisor主管模式,路由+回退
手动把上一步output塞进下一步contextoutputKey自动在状态里传递
自己打日志、记耗时框架内置日志和状态追踪

一句话:你之前写的调度、并行、上下文传递,框架全干了。你真正该自己写的,只剩每个角色的Prompt和业务工具。


二、用SAA重写"需求→开发→测试"流水线

上篇我们手写了一个软件开发流水线:需求分析师→代码生成→测试。用SAA重写,整个配置类长这样:

@Configuration public class MultiAgentConfig { // 1. 需求分析Agent:一个ReactAgent就是一个角色 @Bean public ReactAgent requirementAnalyst(ChatModel chatModel) { return ReactAgent.builder() .name("requirement_analyst") .model(chatModel) .description("需求分析师,把业务需求拆成功能点") .instruction(""" 你是资深需求分析师。把下面需求拆成3-5个功能点,每个点一句话说清输入输出。 只做需求分析,不写代码。需求:{input} """) .outputKey("requirement_doc") // 输出存进状态,下一个Agent直接取 .build(); } // 2. 代码生成Agent:自动能读到上一步的 requirement_doc @Bean public ReactAgent codeGenerator(ChatModel chatModel) { return ReactAgent.builder() .name("code_generator") .model(chatModel) .description("Java开发,根据需求写代码") .instruction(""" 根据下面需求文档生成生产级Java代码,含异常处理。 只写代码。需求文档:{requirement_doc} """) .outputKey("code") .build(); } // 3. 测试Agent:同时能读到需求和代码 @Bean public ReactAgent testEngineer(ChatModel chatModel) { return ReactAgent.builder() .name("test_engineer") .model(chatModel) .description("测试工程师,写JUnit用例") .instruction(""" 根据需求和代码写3个JUnit用例,覆盖正常和异常。 需求:{requirement_doc} 代码:{code} """) .outputKey("test_cases") .build(); } // 4. 流水线:三个Agent串起来,替代上篇手写的 executePipeline @Bean public SequentialAgent devPipeline(ReactAgent requirementAnalyst, ReactAgent codeGenerator, ReactAgent testEngineer) { return SequentialAgent.builder() .name("dev_pipeline") .agents(requirementAnalyst, codeGenerator, testEngineer) .build(); } }

对外暴露就一行:

@PostMapping("/pipeline") public Map<String,Object> pipeline(@RequestBody Map<String,String> body) { Object result = devPipeline.invoke(Map.of("input", body.get("requirement"))); return Map.of("status","success","result", result); }

注意那个outputKey——这是框架替你做的最关键的事:需求Agent的输出自动存到requirement_doc,开发Agent的Prompt里写{requirement_doc}就能直接取到,你不用再像上篇那样手动拼context字符串、手动把上一步结果传进下一步。这就是"状态在节点间自动流转"。


三、并行和反馈循环,也有现成的

上篇我们手写了并行执行(executeParallel起线程池)和反馈循环(executeWithFeedback审查不通过回退重写)。SAA里:

  • 并行:把SequentialAgent换成ParallelAgent.builder().agents(a,b,c),几个Agent同时跑同一个输入,结果自动合并——你不用再写CompletableFuture.allOf().join();
  • 主管模式:复杂流程不是固定流水线时,用Supervisor Agent做"调度者",由大模型判断下一步该派哪个角色,相当于上篇那个"分发器"升级成了由模型自主决策,比硬编码if-else灵活。

四、说句公道话:框架不是万能的

不能光吹,有三个边界你得清楚,不然上生产要踩坑:

  1. 你还是得自己写Prompt——instruction那部分,角色靠不靠谱全看你Prompt写得行不行,框架只是把架子搭好;
  2. 业务工具还是你自己接——查数据库、调内部接口这些,还是得做成@Tool函数挂给Agent,框架不替你写业务;
  3. 版本和成本要盯——多Agent一次跑下来是好几倍Token消耗(三个角色各调一次模型),上线前算清楚钱;框架版本也跟着官方更新,别锁死在老里程碑版。

所以正确姿势是:用SAA当骨架,把上篇手写那500行调度代码省掉,把精力放在Prompt和工具上。上篇手写那篇不白写——你真懂了调度原理,用框架时才知道它在背后帮你干了啥,出了问题才查得动。


五、简历可以这么写

基于 Spring AI Alibaba(ReactAgent/SequentialAgent)实现多Agent协作流水线,将需求分析、代码生成、测试用例三个专职Agent串联,通过outputKey自动传递上下文;
替代手写线程池调度约300行代码,支持ParallelAgent并行扩展与Supervisor主管路由。


💡领取完整Demo
关注图片上水印即Java-AI工程师,打出【agents】即可得到:三个ReactAgent + 一条Sequential流水线 + 一个接口,配好Key直接跑。

📢下期预告
多Agent讲完,下一篇回到生产避坑:Agent上线后Token账单爆炸?这5个地方在偷偷烧钱,省下来就是纯利润。

本文属于「Java AI Agent实战」合集


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 9:09:05

LeetCode 101 对称二叉树:递归与迭代的完整解题指南

对称二叉树这道题&#xff0c;我在LeetCode上刷了不下三遍&#xff0c;每次以为彻底搞懂了&#xff0c;过一阵子再看代码&#xff0c;又会发现一个新的理解角度。101这个题号在二叉树专题里属于那种"看起来人畜无害&#xff0c;实际上很考验递归思维"的题目&#xff…

作者头像 李华
网站建设 2026/9/30 9:08:34

Node.js + React 构建 AI Agent 开源框架 paperclip 实战指南

1. 从“paperclip”这个名字说起&#xff1a;它到底想解决什么问题 第一次看到 paperclip 这个项目名&#xff0c;我脑子里蹦出来的不是回形针&#xff0c;而是那个经典的“回形针最大化”思想实验——一个足够聪明的智能体&#xff0c;为了完成“多造回形针”这个目标&#…

作者头像 李华
网站建设 2026/9/30 9:08:20

改进YOLOv8的生活垃圾分类检测:注意力机制与BiFPN实践

1. 为什么要折腾一个"改进版YOLOv8"去识别生活垃圾1.1 垃圾分类图像识别到底难在哪先聊点实际的。我今年做生活垃圾图像识别这个课题时&#xff0c;第一反应也是"直接拿YOLOv8官方权重跑一下不就行了"。说实话&#xff0c;用COCO预训练模型在公开垃圾分类数…

作者头像 李华
网站建设 2026/9/30 9:08:03

从.o文件到可执行程序,搞懂ELF和静态链接

前面已经能够自己制作 .a 和 .so 了。 但是还有一个问题一直比较绕&#xff1a; hello.c code.c分别编译以后得到&#xff1a; hello.o code.o这两个 .o 文件到底是怎么变成最后那个可以直接执行的程序的&#xff1f; 这部分其实就是编译和链接。 再往下研究&#xff0c;还会碰…

作者头像 李华
网站建设 2026/9/30 9:07:00

SpringBoot+Vue医院后台管理系统设计与全栈实现

前阵子帮人从头搭了一版医院后台管理系统&#xff0c;从数据库建模、后端接口、前端页面到最终部署&#xff0c;全程走了一遍。做这类系统的最大感受是&#xff1a;它看起来就是个“信息管理系统”&#xff0c;但真把挂号、门诊、收费、药房、床位这些环节串起来之后&#xff0…

作者头像 李华