本项目是一个基于 RAG 的生猪健康管理智慧医药系统,集成了 AI 兽医诊断、疾病管理、药品管理、文章资讯管理等功能模块,旨在通过数字化手段提升生猪养殖的医疗管理水平。系统基于 Spring Boot 3 + Spring AI + Milvus + MySQL 8 + MyBatis-Plus + Ollama / DeepSeek / 通义千问 / SiliconFlow 等技术构建,提供智能兽医诊断服务,帮助养殖户或兽医快速识别生猪病情并推荐相应的治疗方案。
⚠️ 重要声明:本项目为个人开发作品,主要用于竞赛、课程设计、毕业设计等学习与研究用途,不具备商用资质与能力。项目中的数据、接口、功能仅供学习交流,请在遵循相关法律法规前提下使用。
- 后端框架:SpringBoot 3.3.5、Spring AI、MyBatis Plus
- 前端框架:Vue3、JavaScript、Vite、Pinia
- AI 模型:Ollama、DeepSeek、通义千问(Bailian)、SiliconFlow
- 向量数据库:Milvus 2.6.x
- 关系数据库:MySQL 8.0.33
- 缓存系统:Redis
- 安全框架:Sa-Token
- API 文档:Knife4j 4.4.0
- 对象存储:MinIO 8.5.14
| 依赖项 | 版本 | 描述 |
|---|---|---|
| JDK | 21 | Java开发工具包 |
| SpringBoot | 3.3.5 | 核心框架 |
| Mysql | 8.0.33 | 数据库连接器 |
| Druid | 1.2.24 | 数据库连接池 |
| MyBatis Plus | 3.5.8 | ORM框架 |
| Hutool | 5.7.17 | 工具类库 |
| Lombok | 1.18.36 | 简化代码库 |
| OkHttp | 4.9.3 | HTTP客户端 |
| Minio | 8.5.14 | 对象存储客户端 |
| Spring Security Crypto | 5.3.8.RELEASE | 安全加密库 |
| Sa-Token Redis | 1.40.0 | Sa-Token整合Redis |
| Sa-Token Spring Boot Starter | 1.39.0 | Sa-Token权限认证 |
| Sa-Token Core | 1.39.0 | Sa-Token核心库 |
| Knife4j | 4.4.0 | API文档生成工具 |
| Spring Boot Starter Data Redis | 3.1.0 | Redis支持 |
| Spring Boot Starter Mail | 邮件服务 | |
| Apache HttpClient | 4.5.13 | HTTP客户端 |
| FastJson | 2.0.54 | JSON解析库 |
项目当前的 RAG 链路采用 Milvus + Spring AI Embedding + LLM 生成 方案:
- 文档上传后先保存到 MinIO 与数据库
- 后端对文档内容进行切分(chunk)
- chunk 使用嵌入模型生成向量并写入 Milvus
- 问答时根据用户问题向量检索相关 chunk
- 将检索片段拼接后交给大模型生成最终回答
支持 txt、md、pdf、doc、docx 等格式文档。
- 用户注册、登录(支持账号密码和邮箱验证码两种方式)
- 多角色权限管理(养殖户 / 兽医 / 管理员)
- 个人信息管理
- 基于 Ollama + DeepSeek 的AI兽医问诊功能
- 支持自然语言描述生猪症状,AI自动识别可能疾病并提供治疗建议
- 疾病相关药品信息智能推荐
- 疾病信息查询(症状、治疗方法、相关药品等)
- 疾病分类管理
- 疾病与药品关联管理
- 药品信息的增删改查
- 药品详细信息展示(功效、品牌、相互作用、禁忌、用法用量等)
- 药品价格管理
- 文章分类管理
- 养殖知识和医疗知识文章发布与浏览
- 新闻资讯管理和展示
- 用户反馈收集与管理
- 系统文件统一管理
- 管理后台 "RAG知识库" 模块
- 支持上传 txt、md、pdf、doc、docx 格式文件(前后端双重白名单校验)
- 文件元数据、文档内容与向量索引分离管理
- 文档切分后的 chunk 会自动写入 Milvus 向量库
- 问答时自动基于向量检索相关片段,再交由大模型生成回答
- 支持分页查询、备注编辑、单文件/批量删除
- 支持默认知识库自动初始化与统一 collection 管理
- JDK 21+
- MySQL 8+
- Redis
- Milvus 2.6.x
- MinIO
- Docker(可选,用于部署 AI 大模型)
- Maven 3.8+
- Node.js 16+
在项目的 doc/SQL 目录中找到数据库脚本文件,执行以下SQL创建数据库:
CREATE DATABASE pig_health_smart_medicine;
然后在 application.yml 中配置数据库连接信息:
项目提供了 Docker Compose 配置文件用于快速部署 Milvus 服务。配置文件位于 doc/milvus/docker-compose.yml。
启动 Milvus 服务:
cd doc/milvus
docker-compose up -dMilvus 服务说明:
- etcd: Milvus 元数据存储,端口 2379
- milvus-standalone: Milvus 主服务,端口 19530(gRPC)、9091(HTTP)
- attu: Milvus 可视化管理工具,访问 http://localhost:8000
主要配置项:
- 使用本地存储模式(LOCAL_STORAGE_ENABLED=true),无需额外配置 MinIO/RustFS
- 数据持久化到 Docker volumes(etcd-data、milvus-data)
- 自动健康检查和重启策略
停止 Milvus 服务:
cd doc/milvus
docker-compose down克隆项目并启动后端服务:
git clone https://gitee.com/hsdchb/pig-health-smart-medicine.git
cd pig-health-smart-medicine
mvn clean package
java -jar target/pig-health-smart-medicine.jar
启动管理端前端:
cd frontend/admin
npm install
npm run dev
启动Web用户端前端:
cd frontend/web
npm install
npm run dev
管理员账号:username: admin | password: 123456
普通用户账号:username: linyi | password: 123456
| 表名 | 说明 |
|---|---|
user |
用户表,存储用户信息 |
article_types |
文章分类表 |
articles |
文章表,存储养殖知识文章 |
conversation |
AI兽医问诊记录表 |
conversation_session |
AI问诊会话主表 |
feedback |
用户反馈表 |
files |
文件存储信息表 |
history |
操作日志记录表 |
illness |
疾病表 |
illness_kind |
疾病种类表 |
illness_medicine |
疾病-药品关联表 |
medicine |
药品信息表 |
news_articles |
新闻资讯表 |
pageview |
浏览量统计表 |
knowledge_base |
RAG 知识库表(知识库名称、嵌入模型、Milvus collection) |
knowledge_file |
RAG知识库文件表(文件元数据、MD5、MIME、备注等) |
knowledge_chunk |
RAG 知识库分块表(chunk 内容、文档关联、统计信息) |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| type_id | int | -- | NO | -- | 文章类型ID |
| type_name | varchar(20) | 20 | NO | -- | 文章类型名称 |
| create_time | datetime | -- | YES | CURRENT_TIMESTAMP | 创建时间 |
| update_time | datetime | -- | YES | CURRENT_TIMESTAMP | 更新时间 |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| id | int | -- | NO | -- | 文章ID |
| title | varchar(255) | 255 | NO | -- | 文章标题 |
| content | text | 65535 | NO | -- | 文章内容 |
| author | varchar(100) | 100 | YES | -- | 作者 |
| create_time | datetime | -- | YES | CURRENT_TIMESTAMP | 创建时间 |
| update_time | datetime | -- | YES | CURRENT_TIMESTAMP | 更新时间 |
| type_id | int | -- | YES | -- | 文章类型ID,外键关联article_types表 |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| id | bigint | -- | NO | -- | 主键ID |
| session_id | bigint | -- | NO | -- | 会话ID |
| user_id | int | -- | NO | -- | 用户ID |
| user_input | text | 65535 | NO | -- | 用户输入 |
| ai_response | text | 65535 | NO | -- | AI回复 |
| conversation_time | datetime | -- | NO | CURRENT_TIMESTAMP | 对话时间 |
| model_name | varchar(255) | 255 | YES | -- | AI模型名称 |
| response_time | decimal(10,2) | -- | YES | -- | AI响应时间(秒) |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| id | bigint | -- | NO | -- | 会话ID |
| user_id | int | -- | NO | -- | 用户ID |
| title | varchar(255) | 255 | YES | 新对话 | 会话标题 |
| status | tinyint | -- | NO | 1 | 状态: 1-进行中, 2-已结束 |
| model_name | varchar(255) | 255 | YES | -- | AI模型名称 |
| create_time | datetime | -- | NO | CURRENT_TIMESTAMP | 创建时间 |
| update_time | datetime | -- | NO | CURRENT_TIMESTAMP | 更新时间 |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| id | int | -- | NO | -- | 主键ID |
| name | varchar(11) | 11 | YES | -- | 反馈用户 |
| varchar(255) | 255 | YES | -- | 邮箱地址 | |
| title | varchar(255) | 255 | YES | -- | 反馈标题 |
| content | text | 65535 | YES | -- | 反馈内容 |
| create_time | datetime | -- | YES | CURRENT_TIMESTAMP | 创建时间 |
| update_time | datetime | -- | YES | CURRENT_TIMESTAMP | 更新时间 |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| id | int | -- | NO | -- | 主键id |
| file_name | varchar(255) | 255 | NO | -- | 文件名 |
| file_path | varchar(255) | 255 | NO | -- | 文件在 MinIO 中的路径 |
| file_size | bigint | -- | NO | -- | 文件大小,单位为字节 |
| content_type | varchar(100) | 100 | YES | -- | 文件的 MIME 类型 |
| url | varchar(500) | 500 | NO | -- | 文件的url |
| upload_time | timestamp | -- | YES | CURRENT_TIMESTAMP | 文件上传时间 |
| bucket_name | varchar(100) | 100 | NO | -- | 文件存储的 MinIO 桶名称 |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| id | int | -- | NO | -- | 用户搜索历史主键id |
| user_id | int | -- | YES | -- | 用户ID |
| keyword | varchar(255) | 255 | YES | -- | 搜索关键字 |
| operate_type | int | -- | YES | -- | 类型:1搜索,2科目,3药品 |
| create_time | datetime | -- | YES | CURRENT_TIMESTAMP | 创建时间 |
| update_time | datetime | -- | YES | CURRENT_TIMESTAMP | 更新时间 |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| id | int | -- | NO | -- | 疾病id |
| kind_id | int | -- | YES | -- | 疾病分类ID |
| illness_name | varchar(100) | 100 | YES | -- | 疾病名字 |
| include_reason | mediumtext | 16777215 | YES | -- | 诱发因素 |
| illness_symptom | mediumtext | 16777215 | YES | -- | 疾病症状 |
| special_symptom | mediumtext | 16777215 | YES | -- | 特殊症状 |
| create_time | datetime | -- | YES | CURRENT_TIMESTAMP | 创建时间 |
| update_time | datetime | -- | YES | CURRENT_TIMESTAMP | 更新时间 |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| id | int | -- | NO | -- | 主键ID |
| name | varchar(255) | 255 | YES | -- | 分类名称 |
| info | varchar(255) | 255 | YES | -- | 描述 |
| create_time | datetime | -- | YES | CURRENT_TIMESTAMP | 创建时间 |
| update_time | datetime | -- | YES | CURRENT_TIMESTAMP | 更新时间 |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| id | int | -- | NO | -- | 病和药品关联id |
| illness_id | int | -- | YES | -- | 病id |
| medicine_id | int | -- | YES | -- | 药品id |
| create_time | datetime | -- | YES | CURRENT_TIMESTAMP | 创建时间 |
| update_time | datetime | -- | YES | CURRENT_TIMESTAMP | 更新时间 |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| id | bigint unsigned | -- | NO | -- | ID |
| file_name | varchar(255) | 255 | NO | -- | 原始文件名(含后缀) |
| file_path | varchar(500) | 500 | NO | -- | 相对路径:相对于 resources/knowledge/ |
| file_size | bigint | -- | NO | -- | 单位:字节 |
| file_md5 | char(32) | 32 | NO | -- | 文件内容 MD5 |
| file_type | varchar(100) | 100 | NO | -- | MIME-Type,如 application/pdf |
| create_by | int | -- | YES | -- | 上传人 |
| create_time | datetime | -- | YES | CURRENT_TIMESTAMP | 创建时间 |
| update_time | datetime | -- | YES | CURRENT_TIMESTAMP | 修改时间 |
| remark | varchar(1000) | 1000 | YES | -- | 备注 |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| id | int | -- | NO | -- | 药品主键ID |
| medicine_name | varchar(100) | 100 | YES | -- | 药的名字 |
| keyword | varchar(255) | 255 | YES | -- | 关键字搜索 |
| medicine_effect | mediumtext | 16777215 | YES | -- | 药的功效 |
| medicine_brand | varchar(255) | 255 | YES | -- | 药的品牌 |
| interaction | mediumtext | 16777215 | YES | -- | 药的相互作用 |
| taboo | mediumtext | 16777215 | YES | -- | 禁忌 |
| us_age | mediumtext | 16777215 | YES | -- | 用法用量 |
| medicine_type | int | -- | YES | -- | 药的类型,0西药,1中药,2中成药 |
| img_path | varchar(255) | 255 | YES | -- | 相关图片路径 |
| medicine_price | decimal(10,2) | -- | YES | -- | 药的价格 |
| create_time | datetime | -- | YES | CURRENT_TIMESTAMP | 创建时间 |
| update_time | datetime | -- | YES | CURRENT_TIMESTAMP | 更新时间 |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| id | int | -- | NO | -- | 新闻ID |
| url | varchar(500) | 500 | YES | -- | 转载url |
| title | varchar(255) | 255 | NO | -- | 新闻标题 |
| content | text | 65535 | NO | -- | 新闻内容 |
| author | varchar(100) | 100 | YES | -- | 作者 |
| publish_time | timestamp | -- | YES | CURRENT_TIMESTAMP | 发布时间,默认为当前时间 |
| source | varchar(255) | 255 | YES | -- | 新闻来源 |
| summary | text | 65535 | YES | -- | 新闻摘要 |
| create_time | datetime | -- | YES | CURRENT_TIMESTAMP | 创建时间 |
| update_time | datetime | -- | YES | CURRENT_TIMESTAMP | 更新时间 |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| id | int | -- | NO | -- | 主键id |
| pageviews | int | -- | YES | -- | 浏览量 |
| illness_id | int | -- | YES | -- | 病的id |
| 字段名 | 类型 | 长度 | 是否为空 | 默认值 | 注释 |
|---|---|---|---|---|---|
| id | int | -- | NO | -- | 用户主键id |
| user_account | varchar(255) | 255 | YES | -- | 用户账号 |
| user_name | varchar(255) | 255 | YES | -- | 用户的真实名字 |
| user_pwd | varchar(255) | 255 | YES | -- | 用户密码 |
| user_age | int | -- | YES | -- | 用户年龄 |
| user_sex | varchar(1) | 1 | YES | -- | 用户性别 |
| user_email | varchar(255) | 255 | YES | -- | 用户邮箱 |
| user_tel | varchar(50) | 50 | YES | -- | 手机号 |
| role_status | int | -- | YES | -- | 角色状态,1管理员,0普通用户 |
| img_path | varchar(255) | 255 | YES | -- | 用户头像 |
| create_time | datetime | -- | YES | CURRENT_TIMESTAMP | 创建时间 |
| update_time | datetime | -- | YES | CURRENT_TIMESTAMP | 更新时间 |
启动后访问 http://localhost:19999/doc.html 查看完整 API 文档。(端口以 application-dev.yml 为准)
- 菜单:侧边栏进入 “RAG 知识库”
- 上传:仅支持
.txt .md .pdf .doc .docx;上传后文件会保存到对象存储,并在数据库中创建对应记录 - 向量化:后台会自动对文档内容进行 chunk 切分与向量化,并写入 Milvus
- 查询:按文件名、MIME 类型、知识库筛选
- 删除:单删/批量删会同步删除数据库记录,并删除对应向量索引
- 备注:支持编辑保存
默认知识库说明:
- 系统默认使用名为
默认知识库的知识库记录 - 默认知识库对应的 Milvus collection 已统一为
rag_default_store_v2 - 若历史数据仍指向旧 collection,请在数据库中更新对应知识库记录后重新上传文档
- 提供疾病流行趋势预测功能
- 真人兽医到场问诊
本项目用于学习研究、竞赛、课程设计与毕业设计,不具备商用资质,项目内的示例数据与资源仅作演示用途。
欢迎提交 PR 或 Issue 来优化本项目。
本项目采用 MIT 许可证。
如有问题,可以有些邮箱联系我,也可以进行交流,项目不足之处,还请多多担待。
作者: linyi 邮箱: jingshuihuayue@qq.com
GitHub: PigHealthSmartMedicine

















































