Java携手Spring AI构建高效多智能体系统
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了解详情。