Appearance
开启 RuoYi Vue Pro 的 AI 模块:让现有 AI 功能真正运行起来
上一篇我们已经把 RuoYi Vue Pro 的整体结构过了一遍。现在应该已经知道:
text
yudao-server
│
├── yudao-module-system
├── yudao-module-infra
└── yudao-module-ai这些模块并不是只要源码目录存在,就一定会跟着项目一起运行。当前 yudao-module-ai 的源码已经在后端仓库里,但它默认没有真正接进当前工程。
接下来我们就开始实现:
text
AI 模块参与 Maven 构建
↓
yudao-server 引入 AI 模块
↓
AI 所需数据库结构准备完成
↓
后端可以正常启动
↓
AI 管理端页面和接口已经可以访问把 AI 模块接入后端
开启根项目中的 yudao-module-ai
打开 backend/pom.xml,找到:
xml
<!-- 请参考 https://doc.iocoder.cn/ai/build/ 文档,完成 AI 模块的启动!!! -->
<!-- <module>yudao-module-ai</module>-->取消注释:
xml
<module>yudao-module-ai</module>这一步解决的是 AI 模块参与整个 Maven 工程构建的问题。
在 yudao-server 中引入 AI 模块
继续打开 backend/yudao-server/pom.xml,找到已经预留的依赖:
xml
<!-- AI 大模型相关模块。默认注释,保证编译速度 -->
<!--
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-ai</artifactId>
<version>${revision}</version>
</dependency>
-->同样取消注释:
xml
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-ai</artifactId>
<version>${revision}</version>
</dependency>现在两层关系都建立起来了:
text
根 pom.xml
↓
让 Maven 构建 yudao-module-ai
yudao-server/pom.xml
↓
让最终 Spring Boot 应用加载 yudao-module-ai这两个地方作用不同,不要只改其中一个。
重新加载 Maven 依赖
修改两个 pom.xml 以后,重新刷新 Maven 项目。第一次开启 AI 模块时,通常会开始下载 Spring AI、OpenAI、DeepSeek、Anthropic、Ollama、DashScope、向量存储、Tika、MCP 等新的依赖,第一次 Maven Reload 可能明显变慢。
如果遇到依赖下载失败,优先检查 Maven 仓库、网络、镜像配置和依赖是否完整下载,不要急着修改 AI 模块源码。
补齐 AI 模块的数据库结构
上一篇初始化原项目时使用的是 backend/sql/mysql/ruoyi-vue-pro.sql。但在当前固定版本中,backend/sql/mysql/ 只有 quartz.sql 和 ruoyi-vue-pro.sql,并没有单独提供 ai.sql。
AI 模块本身明显需要自己的数据库表,例如源码中的 ai_model、ai_api_key、ai_tool、ai_chat_conversation、ai_write 等数据对象对应的表。如果只取消 Maven 注释就启动,后续查询这些表时自然会出现数据库异常。
如何处理缺失的 AI SQL
如果已经从上游项目的官方渠道获得了与当前版本匹配的 AI SQL,可以按照上游项目的许可和使用说明处理,不要从不明来源下载或分发数据库脚本。
如果只是学习,也可以让 AI 根据当前代码辅助生成 SQL 初稿。但 DO、Mapper 和配置代码不一定包含完整的索引、默认值、初始化数据和数据库约束,因此生成结果必须再与当前版本的代码、官方来源或实际数据库逐项核对,不能直接当作官方 SQL 使用。
把新增 SQL 放进 CostFlow/sql
backend/sql/ 继续属于 RuoYi Vue Pro 上游,不往里面追加 CostFlow 自己维护的内容。AI 模块为当前开发基线补充出来的 SQL,统一放到根目录:
text
CostFlow/sql/例如:
text
sql/
└── 001_ai_module.sql原则保持为:
text
backend/sql/
→ 上游原始 SQL
sql/
→ CostFlow 自己补充和新增的 SQL启动 AI 模块
重新启动 yudao-server
完成 Maven 模块开启、yudao-server 引入以及 AI 数据库结构补齐以后,重新启动 YudaoServerApplication。这一轮 Spring Boot 会真正开始扫描 cn.iocoder.yudao.module.ai 下的 Controller、Service、Mapper 和相关配置。
后端仍然应该运行在:
text
http://localhost:48080处理启动时的依赖问题
第一次加载 AI 模块时遇到问题并不奇怪,但不要看到 OpenAI、Qdrant、Milvus、Ollama、MCP 就误以为必须把所有服务都启动。当前配置中部分向量数据库自动配置已经排除,MCP Client / Server 也默认关闭。
这一篇不要提前搭建 Qdrant、Milvus、Ollama、MCP Server,也不要为了“看起来完整”把所有模型 API Key 都填一遍。当前只关心 AI 模块本身能否随 yudao-server 正常启动;如果启动日志仍然出现可选服务相关异常,再根据实际配置判断是否需要处理。
如果遇到异常,可以按照异常类型判断:
text
表不存在
→ 检查 AI SQL
Bean / Maven 依赖异常
→ 检查模块和依赖
Redis / MySQL 异常
→ 检查基础服务
某个可选 AI 服务异常
→ 先确认这个能力是否真的必须启用确认 AI 模块已经加载
后端启动完成以后,检查日志中是否存在 yudao-module-ai 相关 Bean 创建失败、Mapper 找不到或数据库表不存在异常。
只要能够看到对应 Controller 暴露的接口,就说明 AI 模块已经真正被 Spring Boot 加载。
确认管理端 AI 功能
找到现有 AI 页面
前端不需要额外处理,固定的 Vue3 管理端源码里已经存在:
text
src/views/ai/其中包括 chat、image、knowledge、mindmap、model、music、workflow、write 等页面。
AI 页面源码本来就在前端仓库里,现在真正缺的是后端模块、数据库、菜单和权限这些运行条件。如果对应菜单初始化完成,重新登录管理后台以后,就应该能够看到 AI 相关入口。
确认前后端接口能够访问
进入 AI 管理相关页面,例如模型管理。打开浏览器 Network,确认前端请求能够正常进入:
text
/admin-api/ai/...模型 API Key、真实模型、聊天响应和 Token Usage 还没有真正验证,我们下一篇再做。
交给 Coding Agent
这一篇比较适合直接让本地 Agent 完成,因为最麻烦的部分不是取消两行注释,而是准确识别当前 AI 模块缺哪些数据库结构并实际验证。
下一步
现在项目状态已经从:
text
RuoYi Vue Pro
↓
普通后台系统变成了:
text
RuoYi Vue Pro
↓
AI 模块已经运行
↓
AI 页面和接口已经打通但现在的 AI 模块还只是“能运行”,还没有真正配置一个模型,也没有完成一次真实请求。
我们下一篇就开始做这件事:
接入第一个模型:完成一次真实 AI 对话