# 献血平台 **Repository Path**: s1xiao/blood ## Basic Information - **Project Name**: 献血平台 - **Description**: 欢迎 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2025-02-25 - **Last Updated**: 2026-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 稀有血型科普平台 ## 项目概述 稀有血型科普平台旨在连接献血者、医护人员和研究专家,通过AI技术提供专业的献血知识服务,实现稀有血型资源的高效管理和科普知识的广泛传播。 ### 项目亮点 - **智能问答系统**:基于通义千问大模型和RAG技术,提供准确的献血知识解答 - **知识库自动同步**:与飞书文档实时集成,保证知识库时效性 - **接口限流防刷**:防止大量不安全请求打入服务端导致宕机 - **高性能接口设计**:通过异步编程和分布式锁解决高并发问题 ### 项目部署 本项目使用Docker容器化技术,通过Docker Compose进行多容器部署,简化部署流程。 #### 环境要求 - Docker 20.10+ - Docker Compose 2.0+ - Git #### 部署步骤 1. **克隆代码仓库** ```bash git clone https://gitee.com/x_xxxxsl/blood.git cd Blood-Donation-Platform ``` 2. **配置环境** ```bash # 复制配置模板 cp docker-compose.yml.example docker-compose.yml # 请打开并编辑配置文件,修改必要配置信息 vim docker-compose.yml ``` 3. **确保SQL初始化脚本** 确保项目目录下`sql`文件夹中包含`blood.sql`数据库表结构初始化脚本。 4. **构建并启动服务** ```bash # 后台启动所有服务 docker-compose up -d # 查看服务状态 docker-compose ps ``` 5. **访问应用** 服务启动后,可以通过浏览器访问: - 应用入口:http://localhost:8080 - RabbitMQ管理界面:http://localhost:15672 - Elasticsearch:http://localhost:9200 6. **查看日志** ```bash # 查看应用日志 docker-compose logs -f app ``` 7. **停止服务** ```bash docker-compose down ``` ## 系统功能概览 ### 1. 智能问答系统 - **AI智能客服**: - 24小时在线解答献血相关问题 - 支持上下文对话,更自然的交互体验 - 基于知识库的精准答案 - **知识库系统**: - 与飞书文档自动同步 - 支持多种格式文档(图片待实现) - 实时更新:文档变更自动同步到问答系统 - 智能检索:使用模型优化搜索,提供更准确的答案 ### 2. 用户角色管理 - **献血者**: - 活动报名 - 查看献血记录 - 参与科普社区 - **兼职护士**: - 发布献血活动 - 管理献血预约 - 发布科普文章 - 专业知识解答 - 知识学习与分享 - **研究所专家**: - 专业知识解答 - 知识库维护 - **管理员**: - 用户管理 - 内容审核 - 系统监控 - 知识库维护 ### 3. 献血活动管理 - 常规/紧急献血活动发布 - 活动报名与预约 - 实时数据统计(未完成) ### 4. 科普社区 - 专业文章发布 - 知识分享激励机制(未完成) - 优质内容转化知识库(未完成) ## 技术实现 ### 技术栈概览 - **核心框架**: Spring Boot 3 - **权限框架**: Sa-Token - **数据存储**: - MySQL 8.0:核心业务数据 - Redis: * Redis:点赞数据缓存、Token黑名单 * PGVector:向量数据库,用于知识库检索 - Caffeine:本地缓存 - **消息通信**: WebSocket(紧急活动实时通知) - **消息队列**: RabbitMQ - **搜索引擎**: Elasticsearch - **文件存储**: 阿里云OSS - **AI服务**: Spring AI + 通义千问 - **第三方集成**: - 飞书API:知识库维护及同步 ### 核心技术难点与解决方案 #### 1. AI知识问答系统实现 - **难点**:如何保证AI回答的准确性和专业性 - **解决方案**: - 基于RAG技术,结合PGVector向量数据库实现高效知识检索 - 设计专业prompt指导模型回答医学问题 - 内嵌小参数模型,优化并提取用户prompt的关键词,并在知识库检索中检索出相关文章 - 接入飞书知识库,能够更便捷更新知识库 - **效果**:提高了召回率和准确率 #### 2. 高并发活动报名处理 - **难点**:高峰期活动报名可能导致重复报名和数据不一致 - **解决方案**: - 使用Redission实现分布式锁,保证并发安全 - 引入乐观锁机制,减少数据冲突 - **效果**:系统支持峰值100人/秒报名,数据一致性保持100% #### 3. 高性能文章列表查询 - **难点**:列表查询速度慢,有不需要同步的逻辑 - **解决方案**: - 使用CompletableFuture实现异步并行查询 - 优化SQL查询结构 - **效果**:接口响应时间从656ms优化至89ms,提升7倍多 #### 4. 知识库实时同步 - **难点**:飞书文档更新后如何保证知识库及时更新 - **解决方案**: - 参考乐观锁的版本号机制实现,对比时间戳保证数据一致性 - **效果**:保证数据安全问题 #### 5. 高性能文章搜索 - **难点**:当数据库总数达到百万级时,如果仍然使用like查询每一条数据,将会是一场灾难 - **解决方案**: - 引入elasticsearch,优化搜索性能 - **效果**:搜索时间从300ms优化至100ms,提升3倍多。此时数据库中数据只有3000条 #### 6. 缓存文章详细、文章列表 - **难点**:如果某篇文章爆火,多次查询数据库开销大 - **解决方案**: - Redis+Caffeine二级缓存文章 - **效果**:接口响应速度从100ms到2ms,提升100倍,支持万级QPS #### 7. 大量并发突然打入服务器 - **难点**:当服务器出现大量并发请求,例如文章点赞,可能会导致服务器宕机 - **解决方案**: - 引入RabbitMQ,异步处理请求,在高峰期时暂时缓存请求,在低谷期处理请求,做到削峰填谷 - 首先检查Redis缓存中的数据,而不是直接访问数据库,减少了数据库的并发访问压力 - **效果**:支持1000个并发用户 #### 8. 令牌续签 - **难点**:当用户使用中,如果Token过期,用户需要重新登录,体验极差。而JWT是无状态的,即不在服务端存储。 通常的解决方案是快过期时新颁发一个token,或者使用两个token,将时间段分为三段,但需要前端人员配合。 此外还可以用Redis存储,ttl控制过期,退出删除key,但这样改为有状态。 - **解决方案**: - 以上方案我都没采用,而是想出一个折中方案,将令牌的过期时间设置在凌晨4点 - **效果**:我相信我们的服务器在凌晨四点没有人用 #### 9. 限流算法 - **难点**:直接使用计数器实现限流算法较为生硬,不能完全控制请求次数,需要结合业务场景进行设计 - **解决方案**: - 采用令牌桶算法,能够平滑地控制请求速率,能更好地处理突发流量(桶容量内),提供更均匀的请求分布 - 通过Lua脚本操作Redis,保证原子性 - **效果**:令牌桶算法可以容忍短时间的突发流量,而计数器不行 #### 10. 接口限权 - **难点**:多角色体系统,如何实现不同角色的权限控制 - **解决方案**: - 引入Sa-Token权限认证框架 - **效果**:实现接口级别的限权,防止越权 ### 模块实现部分详情 #### 1. 用户认证模块 - **技术方案**: - JWT实现用户认证 - MD5密码加密 - Redis存储退出登录Token黑名单 #### 2. 献血活动模块 - **技术方案**: - WebSocket实现实时紧急活动通知 - Redission分布式锁控制并发报名 #### 3. 科普文章模块 - **技术方案**: - 阿里云OSS存储图片 - Redis缓存点赞数据(定时同步到MySQL) - CompletableFuture并行查询优化列表接口 #### 4. 智能问答模块 - **技术方案**: - Spring AI集成通义千问 - Redis Stack存储文档向量 - RAG检索增强生成 - 飞书云文档更改后实时同步到向量数据库 ## 项目进度与后续计划 ### 后续优化计划 #### 功能完善 - 优化向量数据库,例如使用pgvector - 探寻适合的workflow - 添加联网能力 - 引入function calling进行文档审核 - 引入知识图谱进行知识关联 - 引入图片识别多模态模型 - 内容审核AI与传统算法同时审核 - 知识库快照存档 - 知识库更新加入失败重试与Webhook失败告警机制 - 日志监控 - 接入 Prometheus + Grafana 实时监控。 - 日志统一管理,使用 ELK/EFK 或 Sentry 报错追踪。 - 个性化推荐优化 ## 项目配置与资源 ### 相关资源 - **产品原型**:[查看原型](https://rte2pq.axshare.com/?g=4) - **接口文档**:[查看文档](https://apifox.com/apidoc/shared-cee5d047-9a94-4df6-9dc7-e06a0ea220d7) - **测试环境**:http://39.108.131.19:8988 - **正式环境**:https://jobguard.online - **代码仓库**:[查看仓库](https://gitee.com/x_xxxxsl/blood) ### 飞书应用配置 - **文档权限**:已配置自动同步 - **更新频率**:实时同步