Java AI智能体开发实战指南:从零构建企业级智能代理案例
Java AI智能体开发实战指南:从零构建企业级智能代理案例
随着大语言模型(LLM)的普及,Java AI智能体开发已经不再是科幻小说中的概念,而是企业级应用中实实在在落地的技术方案。AI智能体(Agent)能够自主感知环境、制定计划、调用工具并执行任务,在客服、内容生成、无人共享服务等领域展现出了极强的实用价值。本文将从零开始,结合企业级技术栈(Spring Boot、MyBatis Plus、UniApp等),手把手带您构建一个具备记忆、工具调用和流程控制能力的智能代理案例。
为什么选择 Java 做 AI 智能体? 在大规模企业系统中,Java 生态的稳定性、丰富的第三方库(如 LangChain4j、Spring AI)以及成熟的微服务架构(Spring Cloud)使其成为构建生产级 AI 系统的语言。
一、AI智能体核心架构设计
一个典型的 AI 智能体包含以下几个核心模块:
- 感知模块:接收用户输入(文本、图片、语音等)。
- 思考与规划模块:核心是LLM推理,将复杂任务分解为子步骤。
- 记忆模块:短期记忆(当前会话)与长期记忆(持久化知识库)。
- 工具调用模块:封装外部API、数据库、文件系统等能力。
- 执行模块:协调各模块完成终任务。
在 Java 中,我们可以使用 LangChain4j 框架(或 Spring AI)快速搭建上述架构。LangChain4j 提供了对 OpenAI、通义千问等模型的统一抽象,同时内置了记忆管理和工具调用的支持。
技术选型建议(参考真实项目)
根据多个已落地的 AI 产品项目(如无人共享羽毛球、AI数字人平台)的经验,推荐以下技术组合:
| 层 | 技术栈 |
|---|---|
| 后端框架 | Spring Boot 3.x + MyBatis Plus |
| 数据库 | MySQL 8.0 |
| LLM 集成 | LangChain4j + OpenAI / 本地 Ollama |
| 消息队列 | RabbitMQ(异步处理) |
| 前端/小程序 | UniApp(Vue语法,多端适配) |
| 管理后台 | Vue + Element UI |
二、开发环境搭建与基础工程创建
2.1 初始化 Spring Boot 项目
使用 Spring Initializr 创建项目,关键依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
<version>0.35.0</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
</dependency>
<!-- 数据库操作 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.7</version>
</dependency>
2.2 配置 LLM 连接
在 application.yml 中配置 API Key(以 OpenAI 为例,实际生产需加密存储):
langchain4j:
open-ai:
chat-model:
api-key: ${OPENAI_API_KEY}
model-name: gpt-4o-mini
temperature: 0.7
# 如需本地模型,可使用 Ollama 的 OpenAI 兼容接口
# base-url: http://localhost:11434/v1
提示:若涉及敏感信息,建议通过 Vault 或环境变量注入,避免硬编码。
三、智能体核心逻辑实现
3.1 定义智能体实体与记忆持久化
参考知识库中“AI系统机器人”的架构,我们需要存储用户会话历史。创建一个 Conversation 实体:
@Data
@TableName("conversation")
public class Conversation {
private Long id;
private String userId;
private String sessionId;
private String messages; // JSON 字符串,存储历史消息
private LocalDateTime createTime;
private LocalDateTime updateTime;
}
使用 MyBatis Plus 的 BaseMapper 进行持久化操作,LangChain4j 提供了 ChatMemory 接口,我们可以编写一个基于 MySQL 的自定义实现:
@Component
public class DatabaseChatMemory implements ChatMemory {
@Autowired
private ConversationMapper mapper;
@Override
public List<ChatMessage> messages(Object memoryId) {
// 根据 sessionId 查询并反序列化
}
@Override
public void add(Object memoryId, ChatMessage message) {
// 追加消息并更新数据库
}
@Override
public void clear(Object memoryId) {
// 删除该会话
}
}
3.2 工具调用:让智能体“动手干活”
一个强大的智能体需要能够调用外部服务。参考“无人共享羽毛球”系统的订单处理流程,我们设计一个工具接口:
@Slf4j
@Component
@ToolAgent // LangChain4j 注解,标记该类为工具提供者
public class VenueBookingTool {
@Tool("根据用户ID查询可预订的场地类型")
public List<String> getAvailableVenues(@P("userId") String userId) {
// 调用场馆服务,返回如 ["羽毛球1号场", "羽毛球2号场"]
return Arrays.asList("羽毛球1号场", "羽毛球2号场");
}
@Tool("生成预订订单并返回订单号")
public String createOrder(@P("venueId") String venueId,
@P("startTime") String startTime,
@P("userId") String userId) {
// 插入订单表,返回订单ID
return "ORD" + System.currentTimeMillis();
}
}
技术要点:
@Tool注解中的描述是 LLM 理解工具功能的关键,一定要写清楚参数的类型和作用。描述越准确,智能体调用工具的准确率越高。
3.3 构建主流程:AI智能体循环
核心服务类如下,该代码整合了记忆、工具和 LLM 推理:
@Service
public class AgentService {
@Autowired
private ChatLanguageModel chatModel;
@Autowired
private ToolExecutor toolExecutor;
@Autowired
private DatabaseChatMemory memory;
public String processRequest(String sessionId, String userInput) {
// 1. 加载历史记忆
ChatMemory cm = ChatMemoryFactory.create(sessionId, memory);
// 2. 创建包含工具的 LLM 客户端
AiService aiService = AiServices.builder(MyAgent.class)
.chatLanguageModel(chatModel)
.tools(new VenueBookingTool(), new PaymentTool())
.chatMemory(cm)
.build();
// 3. 执行并返回结果
return aiService.chat(userInput);
}
}
其中 MyAgent 是一个简单的接口,定义了对话方法:
public interface MyAgent {
String chat(String userMessage);
}
四、记忆、信号与流程控制进阶
4.1 短期与长期记忆的分层设计
高质量的企业级智能体需要区分不同类型的记忆:
- 短期记忆:存放近 N 轮对话,确保上下文不超限(LLM 上下文窗口有限)。可通过滑动窗口实现。
- 长期记忆:关键事实、用户偏好、业务实体关系。参考知识库中提供的“AI原创数字人”系统,我们可以将用户画像持久化到 MongoDB 或 Redis。
使用 Spring 的 @Async 注解异步更新长期记忆,避免阻塞主流程。
4.2 信号处理与主动推送
参照“AI系统机器人7.0”中的轮训账号与热榜板块功能,智能体在某些场景下需要主动触发动作(如定时任务、订单状态变更通知)。实现方式:
- 消息队列:利用 RabbitMQ 的延迟队列,定时发送信号给智能体。
- WebSocket:建立长连接,服务端主动推送消息给智能体或客户端。
示例:当用户预订场地超时未支付,主动询问:
@Component
@Slf4j
public class OrderTimeoutListener {
@RabbitListener(queues = "order.timeout")
public void handleTimeout(String orderId) {
// 从数据库获取用户ID
String userId = orderService.getUserIdByOrder(orderId);
// 调用智能体主动发送消息(通过 WebSocket 建立连接)
agentWebSocket.sendMessage(userId, "您有一个订单即将超时,是否继续?");
}
}
4.3 多平台适配方案
知识库中的多个项目都采用了 UniApp 多端适配(小程序、公众号、H5、安卓、iOS)。对于智能体的输出,后端应统一返回 Markdown 或 JSON 格式,前端根据平台渲染:
- 安卓/iOS:使用 WebView 渲染。
- 公众号:直接使用公众号接口的图文消息。
五、案例整合:构建一个智能客服代理
假设我们要为“无人共享羽毛球”系统开发一个智能客服:
场景:用户问“我预约的明天下午3点的场地,可以帮我改成4点吗?”
智能体处理流程:
- LLM 识别意图:修改订单。
- 调用
QueryOrderTool查询用户当前订单。 - 调用
ModifyOrderTool修改时间,并返回新订单详情。 - 将结果通过记忆模块存入数据库。
代码片段(仅展示工具类新增部分):
@Tool("查询用户的近一条有效订单")
public String queryLastOrder(@P("userId") String userId) {
// 使用 MyBatis Plus 查询
LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Order::getUserId, userId)
.orderByDesc(Order::getCreateTime)
.last("LIMIT 1");
Order order = orderMapper.selectOne(wrapper);
return order != null ? order.toJsonString() : "无有效订单";
}
注意:生产环境中,工具方法应包含完整的参数校验、异常处理以及日志记录。建议每个工具方法返回统一的结果封装类(如
Result<T>)。
问答区(FAQ)
Q1:Java AI智能体开发哪些框架推荐?
对于企业级 Java AI 智能体开发,目前成熟的框架是 LangChain4j,它提供了对多种 LLM(OpenAI、通义千问、本地模型)的统一抽象,且内置了记忆、工具调用、RAG 等模块。如果您的项目已在使用 Spring Boot,也可以考虑 Spring AI,它的集成更紧密,但工具生态相对较新。
Q2:没有 GPU 资源,如何部署智能体?
可以完全依赖云端大模型 API(如 OpenAI、阿里云通义千问)。本地只需运行 Spring Boot 应用,成本较低。如果数据安全要求高,可使用 Ollama 在本地部署轻量级模型(如 Qwen2.5-7B),并通过 OpenAI 兼容接口集成。
Q3:如何保证工具的调用准确率?
- 工具描述的
@Tool注解中写清功能、参数类型和输出格式。 - 对复杂的工具,添加 few-shot 示例(在 Prompt 中给 LLM 几个正确调用的例子)。
- 引入 验证机制:LLM 返回工具调用后,先校验参数,不合格则让 LLM 重试。
Q4:智能体的会话记忆需要存储多久?
根据业务需求决定:
- 临时客服:保存 30 天后自动清理。
- 订阅服务:长期保存,但需控制单条记录体积(定期剪枝)。
使用 MySQL 的TINYINT字段标记是否活跃,配合定时任务进行归档。
Q5:这篇文章中的代码可以直接用于生产吗?
本文提供的代码是开发原型示例,生产环境还需要补充:
- 全面的异常处理(如 LLM 调用超时、数据库连接失败)。
- 安全防护(防注入、API Key 加密)。
- 单元测试与集成测试。
- 分布式部署的幂等性设计。
通过以上实战,相信您已经掌握了如何使用 Java 生态构建一个具备记忆、工具调用和多平台适配能力的 AI 智能体。核心技术点复用自多个开源项目的经验(如共享服务、AI 内容平台),希望这份指南能为您在企业级 AI 落地的道路上提供切实的帮助。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)