【Spring Boot + Vue + DeepSeek】从零打造一个AI驱动的智能健康分析系统

前言:随着大语言模型的爆发式发展,如何将AI能力落地到实际业务场景,是当前最热门的技术话题之一。本文将以一个完整的全栈项目,智能健康分析系统**为例,详细讲解如何用 Spring Boot + Vue + DeepSeek 构建一个集"体检报告AI解析、流式智能问诊、IoT设备接入、健康预警、医患协作"于一体的健康管理平台。


一、项目概述

1.1 项目背景

传统健康管理面临几个痛点:

  • 体检报告数据专业性强,普通人难以解读
  • 健康数据分散,缺乏统一的智能分析手段
  • 医患沟通效率低,专家资源分配不均
  • IoT健康设备数据无法与管理系统打通

AuraHealth 正是为了解决这些问题而设计------将 DeepSeek 大模型深度融入健康管理全流程,实现从数据采集 → AI分析 → 智能预警 → 医患协作 → 健康改进的完整闭环。

1.2 功能全景

核心功能 说明
AI智能健康顾问 SSE流式对话 + 多轮记忆 + 健康档案感知
体检报告AI解析 图片OCR / PDF提取 → DeepSeek结构化分析
健康Dashboard 多维评分 + 指标趋势图 + IoT实时监测
智能预警系统 自动比对参考范围 + 分级预警 + 通知推送
医患协作平台 医生专家反馈 + 患者追问 + 双向消息通知
AI健康计划 基于体检数据生成7天个性化运动/饮食方案
IoT设备管理 华为云IoTDA接入 + AMQP消息消费
Token钱包系统 双币种 + 消费流水审计 + 防滥用机制

二、技术架构

2.1 技术栈总览

后端

技术 用途
Spring Boot 2.5 核心框架
Spring Security + JWT 认证授权
MyBatis + PageHelper ORM与分页
Redis 缓存 + Token存储
DeepSeek API AI对话与报告分析
百度OCR API 图片文字识别
华为云IoTDA SDK IoT设备管理
Apache POI / PDFBox Excel导出 / PDF解析
OkHttp HTTP客户端(调用外部API)

前端

技术 用途
Vue 2 + Element UI 前端框架与组件库
ECharts 图表可视化(健康趋势图)
markdown-it AI回复Markdown渲染
Vuex + Vue Router 状态管理与路由
Axios HTTP请求封装

部署

组件 说明
Docker Compose 容器化编排
Nginx 静态资源 + 反向代理 + WebSocket代理
MySQL 8.3 业务数据库
Redis 缓存层
MinIO 对象存储(报告文件)

2.2 整体架构图

复制代码
                        ┌─────────────┐
                        │   Nginx     │
                        │  (80端口)    │
                        └──────┬──────┘
                         ┌─────┼─────┐
                         │     │     │
                   静态资源  /prod-api  /ws/
                   (Vue)   (反向代理) (WebSocket)
                         │           │
                  ┌──────┴──────┐    │
                  │ Spring Boot │◄───┘
                  │  (8080端口)  │
                  └──────┬──────┘
                  ┌──────┼──────┐
                  │      │      │
               MySQL   Redis  MinIO
              (3306)  (6379)  (9000)

    外部服务:
      ├── DeepSeek API  → AI对话 & 报告分析
      ├── 百度OCR API   → 图片文字识别
      └── 华为云IoTDA   → AMQP设备数据消费

2.3 模块划分

项目采用标准的 Maven 多模块架构:

复制代码
AuraHealth (父POM)
├── aura-health-admin      → 启动入口模块
├── aura-health-framework  → 核心框架模块(安全、AOP、配置)
├── aura-health-system     → 系统管理模块(RBAC权限)
├── aura-health-common     → 通用工具模块
├── aura-health-business   → 核心业务模块(健康管理 + AI)
└── aura-health-ui         → Vue前端工程

三、核心功能详解

3.1 SSE流式AI对话(核心亮点)

这是整个项目最核心的功能------基于 DeepSeek 的流式健康问诊。用户提问后,AI的回答会像 ChatGPT 一样逐字实时输出,体验非常流畅。

技术选型 :Spring Boot 的 SseEmitter + RestTemplate 流式读取

核心实现思路

java 复制代码
@PostMapping("/chat")
public SseEmitter chat(@RequestBody AiChatRequest request) {
    SseEmitter emitter = new SseEmitter(180000L); // 3分钟超时

    executorService.execute(() -> {
        try {
            // 1. 查询用户健康档案,注入到system prompt
            String systemPrompt = buildSystemPrompt(userId);
            
            // 2. 加载历史对话(多轮记忆)
            List<Message> messages = buildMessages(sessionId, systemPrompt);
            
            // 3. 调用DeepSeek流式API
            restTemplate.execute(uri, HttpMethod.POST, 
                requestCallback, response -> {
                    BufferedReader reader = new BufferedReader(
                        new InputStreamReader(response.getBody()));
                    String line;
                    while ((line = reader.readLine()) != null) {
                        if (line.startsWith("data: ")) {
                            String content = parseContent(line);
                            emitter.send(SseEmitter.event()
                                .data(content));
                        }
                    }
                    emitter.complete();
                    return null;
                });
        } catch (Exception e) {
            emitter.completeWithError(e);
        }
    });
    return emitter;
}

关键技术点

  1. 独立线程池 :使用 CachedThreadPool 异步处理,不阻塞 Tomcat 工作线程
  2. 多轮对话记忆 :同一 sessionId 下的历史问答自动注入 messages 数组
  3. 健康档案融合 :自动查询用户的 bus_health_profile(身高/体重/病史/过敏史),注入到 system prompt,让AI能给出个性化的健康建议
  4. 日期感知:在 prompt 中动态注入当前日期,修正AI的时间认知

3.2 体检报告AI智能解析

支持图片PDF两种格式的体检报告上传,通过AI自动提取结构化数据。

处理流水线

复制代码
图片上传 → MinIO存储 → 百度OCR文字提取 → DeepSeek分析 → 结构化JSON
PDF上传  → MinIO存储 → PDFBox文本提取  → DeepSeek分析 → 结构化JSON

AI解析的Prompt设计是关键,我们要求DeepSeek返回严格的JSON结构:

json 复制代码
{
  "items": [
    {
      "itemName": "收缩压",
      "itemValue": "145",
      "unit": "mmHg",
      "referenceRange": "90-140",
      "isNormal": 1
    }
  ],
  "summary": "您的收缩压偏高,建议..."
}

其中 isNormal 字段:0=正常,1=偏高,2=偏低。

解析完成后,系统会自动触发预警检测 ------将每项指标与 bus_health_item 字典中的参考范围比对,异常项自动生成预警记录并推送通知。

3.3 健康评分与Dashboard

Dashboard 是用户的健康数据驾驶舱,核心是健康评分算法

复制代码
综合评分 = 体检指标评分 × 60% + 生活习惯评分 × 40%

Dashboard 提供以下维度的数据可视化:

  • 综合健康评分:0-100分,带历史趋势折线图
  • 体检指标趋势:近5次体检的单项指标变化曲线(ECharts)
  • 生活习惯周报:7天平均睡眠时长、步数统计
  • IoT实时监测:来自华为云设备的实时心率/血氧/血压数据
  • 预警统计:近30天各类预警的数量统计

3.4 IoT物联网设备接入

项目集成了华为云IoTDA平台,通过 AMQP 协议消费设备上报的实时健康数据。

java 复制代码
// AMQP消息消费者核心逻辑
@Component
public class IotAmqpConsumerService {
    
    @PostConstruct
    public void startConsumer() {
        // 建立与华为云IoTDA的AMQP连接
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("iot-amqp.cn-east-3.myhuaweicloud.com");
        factory.setPort(5671);
        factory.useSslProtocol();
        
        // 消费设备上报数据并入库
        consumer.setMessageListener(message -> {
            IotDataDTO data = parseDeviceMessage(message);
            iotDataService.save(data);
        });
    }
}

支持的设备数据类型包括:心率、血氧、血压、体温、步数、睡眠时长、饮水量等。

3.5 智能预警与医患协作

这是项目中业务闭环最完整的一条链路:

复制代码
体检报告AI解析 
  → 自动比对参考范围 
  → 生成预警(低/中/高三级)
  → 推送系统通知
  → 医生查看预警并提交专家反馈
  → 患者收到反馈通知
  → 患者可追问,医生收到回复通知
  → 形成医患双向沟通闭环

预警等级分为三级:

  • 低风险(1级):指标轻微偏离,建议关注
  • 中风险(2级):指标明显异常,建议复查
  • 高风险(3级):指标严重超标,建议立即就医

3.6 Token钱包系统

为了合理管控AI服务的使用成本,项目设计了一套完整的Token经济系统

功能 说明
双币种 Token余额(用于AI对话)+ 账户余额(元)
注册赠送 新用户自动赠送 50万 Tokens
消费场景 AI对话消耗Token + 健康计划生成消耗Token
充值方式 Token直充 / 余额充值 / 余额兑换Token
防滥用 演示模式软上限(50万Token)+ 永久硬上限(500万Token)
流水审计 每笔交易记录完整的 wallet_transaction 流水

四、安全架构设计

4.1 认证授权流程

复制代码
用户登录 → BCrypt密码验证 → JWT Token生成 → Redis存储
           ↓
每次请求 → JwtAuthenticationFilter → Redis验证Token有效性
           ↓
权限校验 → @PreAuthorize("@ss.hasPermi('xxx')") → RBAC鉴权

4.2 三角色RBAC权限模型

角色 权限范围
admin(管理员) 全部功能:系统管理 + 健康管理 + 设备管理 + 诊断管理
common(普通用户) 健康中心 + 体检报告 + AI顾问 + 健康计划 + 设备管理
doctor(医生) 诊断管理 + 健康预警 + 专家反馈

4.3 安全防护措施

  • 无状态认证SessionCreationPolicy.STATELESS + JWT
  • 密码加密:BCryptPasswordEncoder
  • 数据归属校验 :各Controller中强制校验 userId 归属,防止越权访问
  • 防重复提交RepeatSubmitInterceptor 拦截器
  • 操作审计@Log 注解 + AOP切面自动记录操作日志
  • 数据权限DataScopeAspect 实现行级数据权限控制

五、数据库设计

项目共17张核心业务表,以下列举关键表结构:

sql 复制代码
-- AI咨询记录表
CREATE TABLE bus_ai_consultation (
    id BIGINT PRIMARY KEY,
    user_id BIGINT,
    session_id VARCHAR(64),     -- 会话ID(多轮对话)
    question TEXT,               -- 用户问题
    answer TEXT,                 -- AI回答
    tokens_used INT,            -- 本次消耗Token数
    create_time DATETIME
);

-- 用户钱包表
CREATE TABLE bus_user_wallet (
    id BIGINT PRIMARY KEY,
    user_id BIGINT UNIQUE,
    token_balance BIGINT,       -- Token余额
    account_balance DECIMAL(10,2), -- 账户余额(元)
    total_tokens_used BIGINT    -- 累计消耗
);

-- 体检报告主表
CREATE TABLE bus_physical_report (
    id BIGINT PRIMARY KEY,
    user_id BIGINT,
    report_url VARCHAR(500),    -- MinIO文件地址
    ai_status TINYINT,          -- 0待解析/1解析中/2已完成
    ai_summary TEXT,            -- AI分析总结
    create_time DATETIME
);

-- 健康预警表
CREATE TABLE bus_health_alert (
    id BIGINT PRIMARY KEY,
    user_id BIGINT,
    item_code VARCHAR(32),      -- 指标编码
    current_value VARCHAR(32),  -- 当前值
    alert_level TINYINT,        -- 1低/2中/3高
    status TINYINT,             -- 0未读/1已读/2已处理
    create_time DATETIME
);

六、部署方案

项目使用 Docker Compose 一键编排部署:

yaml 复制代码
version: '3.8'
services:
  aura-health:
    image: eclipse-temurin:11-jre-alpine
    ports:
      - "8080:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/health_intelligence
      - SPRING_REDIS_HOST=redis
    depends_on:
      - mysql
      - redis

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./dist:/usr/share/nginx/html
      - ./nginx.conf:/etc/nginx/nginx.conf

  mysql:
    image: mysql:8.3
    ports:
      - "3306:3306"
    environment:
      - MYSQL_DATABASE=health_intelligence

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

Nginx 同时承担前端静态资源服务、后端API反向代理和WebSocket代理三重职责。


七、项目截图

适用场景

  • 健康管理平台 / 互联网医疗系统
  • 体检机构信息化管理
  • 社区健康服务中心
  • 企业员工健康管理
  • 课程设计参考

获取源码

复制代码
T841723389

💡 可提供:完整前后端源码 + SQL脚本 + 部署文档 + 技术答疑


如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔三连支持!

相关推荐
Moshow郑锴1 小时前
Ubuntu用SDKMAN轻松管理多个Java 版本
java·ubuntu·sdkman
阿昌喜欢吃黄桃1 小时前
RocketMq事务消息原理
java·中间件·消息队列·rocketmq·mq
CoderYanger1 小时前
A.每日一题:2095. 删除链表的中间节点
java·数据结构·程序人生·leetcode·链表·面试·职场和发展
摇滚侠1 小时前
MyBatis+Spring+SpringMVC SSM 整合 179-185
java·spring·mybatis
隔壁阿布都1 小时前
ShedLock 分布式定时任务锁框架介绍
spring boot·分布式
我不是FD1 小时前
OpenAI vs Anthropic API 对比:流式返回 + Adapt 适配层完整方案
java·人工智能·python
Peter(阿斯拉)2 小时前
[Android]_[中级]_[如何创建MVVM架构原型]
android·java·架构·mvvm·viewmodel
地瓜伯伯2 小时前
从MESI缓存一致性协议讲透synchronized的底层
java·spring boot·spring·spring cloud·微服务·springcloud
zhenlai20122 小时前
Vue3 + SpringBoot + AI:我做了一个股票分析工具(第1周复盘)
人工智能·spring boot·后端
Devin~Y2 小时前
大厂 Java 面试实录:从音视频内容社区到 AI RAG 的全链路技术设计
java·spring boot·redis·spring cloud·微服务·kafka·音视频