功能开启
进度说明:
- 管理后台,请使用 https://gitee.com/yudaocode/yudao-ui-admin-vue3 (opens new window) 仓库的
master分支 - 后端项目,请使用 https://gitee.com/zhijiantianya/yudao-cloud (opens new window) 仓库的
master-jdk17分支
注意!仅支持 JDK 17/21 使用,因为基于 Spring AI (opens new window) 实现,它基于 Spring Boot 3.X 构建,所以最低要求 JDK 17!!!
AI 系统,后端由 yudao-module-ai 模块实现,前端由 yudao-ui-admin-vue3 的 ai 目录实现。
只需要启动 yudao-module-ai 服务,就可以使用 CRM 的功能。步骤如下:
- 第一步,导入 AI 系统的 SQL 数据库脚本
- 第二步,重启后端项目,确认功能是否生效
# 1. 第一步,导入 SQL
点击 ai-2024-07-07.sql.zip (opens new window) 下载附件,解压出 SQL 文件,然后导入到数据库中。
所以表名字,都使用 ai_ 作为前缀。
# 2. 第二步,重启项目
① 运行该服务的 AiServerApplication 启动类,看到 "Started AiServerApplication in 5.963 seconds (JVM running for 6.253)" 说明开启成功。
② 然后,访问前端的 AI 大模型菜单,确认功能是否生效。如下图所示:

至此,我们就成功开启了 AI 的功能 🙂
可以访问 [AI 大模型 -> AI 对话] 菜单,点击左上角的【新建对话】按钮后,确认右上角的模型是“deepseek”后,就可以和 AI 大模型聊起来了!
友情提示:如果你碰到 Spring AI 相关的包,无法从 Maven 仓库下载下来,可以参考如下的链接解决:
友情提示:
如果聊天报错,可能是 API 密钥配置不正确,或者 API 密钥欠费了,可以参考下面的「666. 使用必读」小节,配置你自己申请的密钥。
# 3. 使用必读!!!
目前 AI 系统下的功能,是基于 LLM 大模型 (opens new window),从而实现对话、绘图等一系列功能。
使用时,需要进行 API 密钥、模型的配置。下面,我们来了解下。
# 3.1 API 秘钥表
ai_api_key:API 秘钥表,顾名思义,就是存储 AI 大模型的 API 密钥的表。
# 3.1.1 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
CREATE TABLE `ai_api_key` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称',
`platform` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '平台',
`api_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密钥',
`url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '自定义 API 地址',
`status` int NOT NULL COMMENT '状态',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='AI API 密钥表';
① platform 字段:表示平台,对应 AiPlatformEnum 枚举,目前支持多个 AI 大模型:
- 国内:【阿里】通义千问、【深度求索】DeepSeek、【字节】豆包、【腾讯】混元、【百度】文心一言、【SiliconFlow】硅基流动、【讯飞】星火、【智谱】GLM
- 国外:【OpenAI】GPT、【Meta】Llama、【Google】Gemini、【Stability】Stable Diffusion
通过 platform 字段,可以区分不同的平台,从而创建对应的 Spring AI Model 对象,调用对应的平台,具体可见 AiModelFactoryImpl 类下的一系列方法。
② api_key 字段:表示 API 密钥,对应不同的平台的密钥,例如说 OpenAI 的 API KEY。但是要注意,有些平台是多个值,例如说文心一言是 appKey + secretKey 组合,那它在 api_key 就是 ${appKey}|${secretKey}。
url 字段:表示自定义 API 地址。一般情况下不需要配置,除非你有自定义的需求,例如说 OpenAI 使用 API 中转。
具体它们怎么配置,或者怎么部署,可见对应的文档:
- 国内模型:《通义千问》、《DeepSeek》、《豆包》、《混元》、《文心一言》、《硅基流动》、《讯飞星火》、《智谱 GLM》、《月之暗灭》、《MiniMax》、《百川智能》
- 国外模型:《OpenAI(ChatGPT)》、《Anthropic(Claude)》、《LLAMA》、《微软 OpenAI(ChatGPT)》、《谷歌 Gemini》
友情提示:
一般情况下,建议先使用 《DeepSeek》 模型,因为免费送了一些 tokens,可以先体验一下。
# 3.1.2 管理后台
前端对应 [AI 大模型 -> 控制台 -> API 密钥] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/ai/model/apiKey 目录。

它的后端 HTTP 接口,由 yudao-module-ai 模块的 model 包的 AiApiKeyController 实现。
# 3.2 模型表
ai_model:模型表,配置每个平台下有哪些可用的模型。
# 3.2.1 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
CREATE TABLE `ai_model` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模型名字',
`sort` int NOT NULL COMMENT '排序',
`status` tinyint NOT NULL COMMENT '状态',
`key_id` bigint NOT NULL COMMENT 'API 秘钥编号',
`platform` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模型平台',
`model` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模型标识',
`temperature` double DEFAULT NULL COMMENT '温度参数',
`max_tokens` int DEFAULT NULL COMMENT '单条回复的最大 Token 数量',
`max_contexts` int DEFAULT NULL COMMENT '上下文的最大 Message 数量',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='AI 模型表';
① key_id 字段:表示 API 秘钥编号,对应 ai_api_key 表的 id 字段。
platform 字段:表示模型平台,冗余 ai_api_key 表的 platform 字段。
② model 字段:表示模型标识,对应不同的平台的模型标识,例如说 OpenAI 的 gpt-3.5-turbo、gpt-4-turbo,通义千问的 qwen-plus、qwen-max 等等。
③ type 字段:模型类型,对应 AiModelTypeEnum 枚举,对应有 CHAT、IMAGE、VOICE、VIDEO、EMBEDDING、RERANK 等。
例如说,CHAT 可用于文本生成,IMAGE 可用于图片生成,VOICE 可用于语音生成,VIDEO 可用于视频生成。
④ temperature 字段:表示温度参数,对应不同的平台的温度参数,例如说 OpenAI 的 temperature。
max_tokens 字段:表示单条回复的最大 Token 数量,对应不同的平台的最大 Token 数量,例如说 OpenAI 的 gpt-3.5-turbo 为 4096,gpt-4 为 8192。
max_contexts 字段:表示上下文的最大 Message 数量。因为模型的上下文是有上限的,所以和模型对话时,不会把历史的所有消息都发送过去,而是选择最近的 max_contexts 组消息。会有一些难理解,具体可以看看 AiChatMessageServiceImpl 的 #filterContextMessages(...) 方法。
疑问:为什么 ai_api_key 和 ai_chat_model 表是分开的?
一个平台有多个模型,它们会共用一个 API 密钥,所以是分开的,方便管理。
# 3.2.2 管理后台
前端对应 [AI 大模型 -> 控制台 -> 模型配置] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/ai/model/model 目录。

它的后端 HTTP 接口,由 yudao-module-ai 模块的 model 包的 AiModelController 实现。
注意:新建模型时,需要正确选择 type 模型类型,否则会导致调用不到对应的模型!!!