标签

Java携手Spring AI构建高效多智能体系统

发布时间:2026-04-29 13:24来源:微信阅读:4

2026年4月最新版:基于 Spring AI 2.0.0-M4 + Spring Boot 4.0.0,代码可直接运行。

老实说,去年我还在用单轮对话的方式调用大模型,写出来的东西就像玩具一样。用户多问几句就暴露问题,上下文根本跟不上。

今年年初接手了一个智能客服项目,需求方要求系统能够处理复杂的投诉。例如,用户说“手机充不进电,App还总是闪退,你们这是什么质量”,系统需要同时处理硬件和软件问题,并最终给出一个像人工撰写的回复。单个Agent根本无法胜任,那时我才真正认识到Multi-Agent的价值。

Spring AI 2.0的几个关键特性:

这篇文章我将详细介绍整个项目,从依赖配置到源代码,从运行方法到上线注意事项。代码都经过实际测试,版本号请务必准确。

先来看效果。用户输入:

“我买的手机充不进电,而且你们的App总是闪退,你们这是什么质量?”

系统内部的处理流程:

这是典型的Orchestrator-Workers 模式——调度Agent负责任务分解,多个专业Agent并行处理,最后由总结Agent进行汇总输出。整个过程在1-2秒内完成,用户几乎感觉不到背后有如此多的Agent在协作。

版本号是这个项目至关重要的部分,使用旧版API会遇到很多问题。

版本说明:

注意:Spring AI 2.0的BOM管理方式已更改。如果您还在使用1.x的spring-ai-core直接引入依赖,升级到2.0会遇到大量类找不到的错误。建议直接使用BOM进行管理。

temperature: 0.3这个参数是我经过长时间调整才确定的。Agent不是用来写诗的,不需要太多的随机性,稳定输出最为关键。如果设置得太高,同一个问题每次的回复都会不同,导致测试结果难以复现。

首先定义Agent之间的数据交换格式,使用Java 17的record非常便捷:

将所有Agent的公共逻辑提取出来,避免每个Agent重复编写ChatClient配置:

MessageWindowChatMemory默认是内存存储,适合测试。生产环境需要更换为Redis。

技术支持Agent:

产品Agent:

销售Agent:

这是整个系统最核心的部分。起初我考虑过使用流程引擎或规则引擎来分发任务,但后来发现使用LLM自行调度反而更灵活——用户的输入多种多样,固定的规则难以覆盖所有情况。

这里有一个细节:每个Worker Agent的conversationId都添加了后缀(-tech、-prod),以确保各Agent的记忆空间相互隔离。如果使用相同的conversationId,不同Agent的对话会混淆,导致结果混乱。

降级处理非常重要。LLM输出JSON时偶尔会出现格式错误,如果直接抛出异常,用户体验会很差。降级方案至少能为用户提供一个可读的结果,并标记需要转人工。

在Windows下使用PowerShell时,export应改为$env:OPENAI_API_KEY=“sk-xxx”。

预期输出:

运行时可以看到类似这样的并行执行日志:

MCP让大模型能够像使用U盘一样调用外部工具:

您甚至不需要编写@Tool方法,只需启动一个MCP Server(支持文件系统、Git、数据库、Slack等),Spring AI就能自动调用。我在另一个项目中集成了一个MCP文件系统工具,Agent可以直接读写项目文档,大大减少了胶水代码的编写。

Advisor是Spring AI 2.0最值得称赞的设计。它将AOP的思想引入AI领域,添加功能就像贴膏药一样简单:

用法:

Java 21的虚拟线程在这种场景下是降维打击。成百上千个Agent同时运行时,内存占用仅几MB。使用传统的线程池,每个请求都会占用一个OS线程,并发量高时很容易崩溃。

上述代码可以运行,但部署到生产环境还需要完善一些工作。

MessageWindowChatMemory存储在内存中,服务重启后数据会丢失。用户对话到一半时掉线,回来后发现上下文丢失,用户体验极差。

生产环境建议接入Redis:

实现思路:将MessageWindowChatMemory的底层存储从ConcurrentHashMap替换为Redis,key格式使用chat:memory:{conversationId},并设置7天的过期时间。

在客服场景下,用户不愿等待完整的回复。Spring AI 2.0支持流式输出,只需一行代码即可实现:

前端使用EventSource接收,用户体验与ChatGPT类似。

项目规模增大后,Agent之间需要传递结构化数据。建议构建一个Agent Message Bus:

可以使用Redis Pub/Sub或RabbitMQ实现,支持跨服务的Agent协作。我们目前的架构是将Orchestrator和Summary Agent部署在主服务,Worker Agent拆分到独立的微服务中,通过Message Bus进行通信。

核心依赖版本(2026年4月有效):

坦白说,半年前我还认为Java在AI时代只能扮演配角。但实际使用Spring AI 2.0 + Java 21的组合后,构建企业级Multi-Agent系统的体验并不比Python差,甚至在并发性能和类型安全方面更具优势。如果您也是Java背景,不必急于更换语言,这套技术栈完全能够满足生产需求。

完整的源代码已提供,复制粘贴并修改API Key即可运行。在实际落地过程中如果遇到问题,例如Agent循环调用、Tool返回值格式错误、内存泄漏等,都曾是我踩过的坑,后续可以单独撰写文章进行排错。

关注本公众号,持续获取Java + AI的实战干货。

最后,我想宣传一下我的AI Agent一体化平台项目实战教程,提供Go和Java两个版本,长期更新项目内容,不断加入最新的AI技术。通过这个项目,已有近百人成功转型AI Agent开发领域,薪资翻倍。有意向的朋友可以加我mszlu521了解详情。