01
引言
随着生成式 AI 的快速发展,构建智能应用已不再仅仅是接入大型语言模型(LLM)那么简单。真正的机遇在于设计领域特定智能体—— 这些智能体能够自主推理、决策并执行操作。
本文将介绍一种基于 Spring Boot 和 Spring AI 构建多智能体 AI 系统的模块化方法,借助该方法你可以实现以下目标:
-
构建面向特定任务(如旅行规划、购物推荐等)的自主智能体
-
集成 OpenAI、Azure OpenAI 或 AWS Bedrock 等主流 LLM 服务
-
在云原生系统中实现 AI 功能的规模化部署
无论你是开发工程师、架构师还是 CTO,本指南都将展示如何在企业级 Java 环境中合理应用生成式 AI(GenAI)技术,打造稳定可靠的 AI 应用。
02
架构概览
我们设计的多智能体架构支持即插即用型智能体,每个智能体对应一个业务领域。系统通过一个控制器(Controller)基于 HTTP 协议对所有智能体进行协调管理。
每个智能体具备以下核心特性:
-
拥有专属的领域特定提示词(Domain-Specific Prompt)
-
支持借助外部工具进行推理计算
-
使用 Spring AI 的 ChatClient 组件与 LLM 模型交互
03
技术栈与伪代码
3.1 基础智能体接口(Base Agent Interface)
该接口为所有智能体定义了简单的约定:每个智能体必须实现
handle
方法,用于处理用户输入。
public interface IAgent {
String handle(String input);
}
3.2 旅行智能体示例(Travel Agent Example)
TravelAgent类专门处理旅行规划相关的提示词,并可调用外部工具(如天气查询、酒店推荐工具)辅助决策。
@Component("travelAgent")
public class TravelAgent implements IAgent {
@Autowired private WeatherTool weatherTool;
@Autowired private HotelTool hotelTool;
@Autowired private ChatClient chatClient;
public String handle(String input) {
String prompt = """
你是一名旅行规划师。
输入内容:%s
可使用工具:getWeather(城市)、recommendHotel(城市)
""".formatted(input);
return chatClient.call(new Prompt(prompt)).getResult().getOutput().getContent();
}
}
3.3 工具示例(Tool Example)
此类模拟智能体可调用的外部工具,实际应用中可在此处接入真实 API(如第三方天气服务 API)。
@Component
public class WeatherTool {
public String getWeather(String city) {
// 此处可替换为真实API调用逻辑,或返回模拟数据
}
}
3.4 智能体注册器(Agent Registry)
该组件负责扫描系统中所有智能体实现类,并按名称进行注册管理。
@Component
public class AgentRegistry {
private final Map<String, IAgent> agents;
public AgentRegistry(List<IAgent> agentBeans) {
this.agents = agentBeans.stream()
.collect(Collectors.toMap(
agent -> agent.getClass().getSimpleName().toLowerCase(),
Function.identity()
));
}
// 根据名称获取智能体(返回Optional,避免空指针)
public Optional<IAgent> getAgent(String name) {
return Optional.ofNullable(agents.get(name.toLowerCase()));
}
// 返回所有已注册智能体的名称集合
public Set<String> listAgents() {
return agents.keySet();
}
}
3.5 统一 API 控制器(Unified API Controller)
该控制器提供 REST 接口,供外部系统与智能体进行交互。
@RestController
@RequestMapping("/agents")
public class AgentController {
@Autowired private AgentRegistry registry;
// 调用指定智能体处理输入(POST请求)
@PostMapping("/{agentName}")
public ResponseEntity<String> handle(@PathVariable String agentName, @RequestBody String input) {
return registry.getAgent(agentName)
.map(agent -> ResponseEntity.ok(agent.handle(input)))
.orElse(ResponseEntity.status(HttpStatus.NOT_FOUND).body("未找到指定智能体"));
}
// 列出所有已注册的智能体(GET请求)
@GetMapping
public Set<String> listAgents() {
return registry.listAgents();
}
}
3.6 元智能体(协调层)(Meta Agent (Orchestration Layer))
元智能体是系统的 “调度中枢”,负责判断给定输入应由哪个领域智能体处理。
@Component("metaAgent")
public class MetaAgent implements IAgent {
@Autowired private AgentRegistry registry;
@Autowired private ChatClient chatClient;
public String handle(String input) {
// 系统提示词:明确元智能体的决策职责
String systemPrompt = "判断输入应由哪个智能体(travelAgent、restaurantAgent、shoppingAgent)处理。";
// 调用LLM获取目标智能体名称
String agentName = chatClient.call(new Prompt(systemPrompt + " 输入内容:" + input))
.getResult().getOutput().getContent();
// 调用目标智能体处理输入,若无匹配则返回提示
return registry.getAgent(agentName.trim().toLowerCase())
.map(agent -> agent.handle(input))
.orElse("抱歉,未找到可处理该请求的智能体。");
}
}
3.7 云 LLM 提供商配置(Cloud LLM Provider Configs)
借助 Spring AI,只需通过 YAML 配置即可轻松切换不同的 LLM 服务提供商。
Azure OpenAI 配置:
spring.ai.openai.api-key = ${AZURE_OPENAI_KEY}
spring.ai.openai.endpoint = https://<你的资源名称>.openai.azure.com/
spring.ai.openai.model = gpt-35-turbo
AWS Bedrock 配置:
spring.ai.bedrock.anthropic.api-key = ${AWS_ACCESS_KEY}
spring.ai.bedrock.anthropic.region = us-east-1
spring.ai.bedrock.anthropic.model = anthropic.claude-v2
OpenAI 配置:
spring.ai.openai.api-key = ${OPENAI_API_KEY}
spring.ai.openai.model = gpt-4
04
后续规划(What’s Next?)
-
集成 Redis 或本地内存上下文,为智能体添加会话记忆功能
-
通过 Spring AI 知识库(KnowledgeBases)集成检索增强生成(RAG) 流程
-
对接内部 API 工具(如工单查询、人力资源信息系统(HRIS)等)
-
在 Kubernetes 中部署系统,并通过 OAuth/JWT 实现安全认证
-
基于智能体链式调用(Agent Chaining)构建对话流程
-
为智能体交互添加重试逻辑与可观测性监控(如日志、指标跟踪)
05
总结(Final Thoughts)
通过本文介绍的架构,你可以实现:
-
将领域知识隔离到可复用的智能体中,降低模块间耦合
-
将推理与执行任务委派给专用模块,提升系统专业性与效率
-
通过 Spring AI 无缝集成任意 LLM 提供商,避免厂商锁定
企业级生成式 AI 无需依赖 Python 即可实现规模化 —— 它只需要稳健的 Java 设计。借助 Spring AI,只需极少的配置修改,就能轻松实现 LLM 模型的切换,为系统迭代提供极大灵活性。
