31 KiB
31 KiB
智慧医院 AI 影像诊断与电子病历辅助决策系统
项目详细文档
| 项目 | 说明 |
|---|---|
| 项目名称 | 智慧医院 AI 影像诊断与电子病历辅助决策系统(Smart Hospital) |
| 项目类型 | 高校/实训教学演示级 Web 应用 |
| 文档版本 | 1.0 |
| 文档日期 | 2026-07-27 |
| 代码根目录 | smart-hospital/ |
目录
一、项目主题
1.1 主题定位
本项目以 「智慧医院」 为主题,围绕医院日常诊疗中的两条核心链路展开:
- 医学影像检查 → AI 辅助读片 → 结构化诊断报告
- 电子病历录入 → AI 辅助决策(治疗 / 用药 / 护理 / 随访)→ 知识库引用
在传统 HIS(医院信息系统)业务能力之上,引入 计算机视觉(YOLO) 与 大语言模型 / RAG 知识检索,形成「业务系统 + AI 微服务」的混合架构,用于实训教学、课程答辩与功能演示。
1.2 建设目标
| 目标 | 说明 |
|---|---|
| 业务闭环 | 覆盖登录鉴权、患者档案、影像检查、病历、预约挂号、用户管理等完整业务面 |
| AI 可演示 | 影像侧可真实跑 YOLO 权重检测;报告与决策侧可接 DeepSeek 等 OpenAI 兼容大模型,也可模板降级 |
| 前后端分离 | Vue 3 SPA + Spring Boot REST + FastAPI AI 服务,职责清晰、便于分模块讲解 |
| 可离线实训 | 默认 H2 内存库,无需强制安装 MySQL;AI 服务不可用时业务仍可降级运行 |
| 安全可讲 | JWT 无状态认证、角色权限(ADMIN / DOCTOR / RADIOLOGIST)、BCrypt 密码、前后端双重路由守卫 |
1.3 应用场景(教学/演示)
- 影像科:上传胸片等影像 → 一键 AI 诊断 → 查看 YOLO 标注框、置信度与分段报告
- 临床医生:书写病历(如含「高血压 / 肺炎 / 糖尿病 / 结节」等关键词)→ 获取治疗、护理、随访建议与知识库来源
- 管理员:配置 LLM 接口、管理知识库文档、切换/上传 YOLO 权重、管理系统用户
- 挂号窗口:预约登记与状态流转(预约 → 确认 → 完成 / 取消 / 未到诊)
1.4 项目声明
本系统输出内容 仅供教学实训与辅助决策演示,不能替代执业医师的正式诊断与医疗文书。涉及真实患者数据与临床部署时,需另行满足医疗信息化、隐私与合规要求。
二、需求分析
2.1 背景与问题
传统教学型医院管理系统往往只做 CRUD 与简单页面,存在以下不足:
| 问题 | 表现 |
|---|---|
| 业务割裂 | 患者、影像、病历、预约缺少统一档案视图 |
| AI 仅「假数据」 | 随机文案或关键字匹配,无法展示真实检测框与模型链路 |
| 技术栈陈旧 | 早期版本以 Thymeleaf 服务端渲染为主,前后端耦合 |
| 权限薄弱 | 仅 Session 判断登录,缺少角色级接口保护 |
| 不可降级 | 外部依赖一旦失败,整条演示链路中断 |
本项目在原始 Spring Boot + Thymeleaf 原型基础上完成改造,形成当前 前后端分离 + AI 微服务 版本,以解决上述问题。
2.2 用户角色与诉求
| 角色 | 代码枚举 | 核心诉求 |
|---|---|---|
| 系统管理员 | ADMIN |
用户管理、AI 大模型配置、YOLO 权重管理、全局运维 |
| 临床医生 | DOCTOR |
患者与病历、辅助决策、预约、查看影像报告 |
| 影像医师 | RADIOLOGIST |
影像登记、上传、触发 AI 诊断、审阅标注图与报告 |
| 访客/未登录 | — | 仅可访问登录页 |
2.3 功能需求(按优先级)
P0 — 必须具备
| 编号 | 需求 | 验收要点 |
|---|---|---|
| F-01 | 用户登录 / 登出 / 修改密码 | JWT 签发与校验;密码 BCrypt;修改后需重新登录 |
| F-02 | 患者档案 CRUD + 搜索分页 | 姓名等关键字;360° 档案关联影像 / 病历 / 预约 |
| F-03 | 影像检查 CRUD + 文件上传 | 支持 X_RAY / CT / MRI / ULTRASOUND |
| F-04 | AI 影像诊断 | 异步状态机 PENDING → ANALYZING → COMPLETED / ERROR;可查看结果 |
| F-05 | 电子病历 CRUD + AI 辅助决策 | 治疗 / 用药 / 护理 / 随访 / 风险 / 冲突 / RAG 来源 |
| F-06 | 角色权限控制 | 前端路由 meta.roles + 后端 @PreAuthorize |
P1 — 重要增强
| 编号 | 需求 | 验收要点 |
|---|---|---|
| F-07 | 预约挂号全流程 | 状态流转、按日筛选、统计卡片 |
| F-08 | 仪表盘可视化 | KPI、近 7 日趋势、检查类型/诊断状态分布 |
| F-09 | AI 对话助手 | 多轮对话、历史持久化(文件)、Markdown 渲染 |
| F-10 | 知识库管理 | 文档增删改查,供 RAG / 决策引用 |
| F-11 | AI 配置(管理员) | LLM Base URL / API Key / Model 配置,并同步至 FastAPI |
| F-12 | YOLO 权重管理(管理员) | 权重列表、激活、上传统计 |
P2 — 体验与健壮性
| 编号 | 需求 | 验收要点 |
|---|---|---|
| F-13 | AI 服务不可用时业务降级 | Spring 侧本地规则模拟,页面仍可演示 |
| F-14 | 弹窗 / 抽屉不被布局裁切 | append-to-body、限高滚动、表单左右留白协调 |
| F-15 | 报告分段可读 | 影像所见 / 诊断印象 / 建议 / 声明分块展示 |
| F-16 | 页面切换过渡与仪表盘体验 | 路由过渡、半透明卡片叠背景图等 |
2.4 非功能需求
| 类别 | 要求 | 项目落地 |
|---|---|---|
| 性能 | 诊断异步,避免阻塞 HTTP 线程 | @Async + 线程池;前端轮询(有上限,卸载时清理) |
| 可用性 | 无 MySQL 亦可演示 | 默认 H2 内存库 + DataInitializer 种子数据 |
| 安全 | 接口鉴权、密码加密、CORS 白名单 | Spring Security + JWT;cors.allowed-origins |
| 可维护 | 统一响应与异常 | Result<T> + GlobalExceptionHandler |
| 可扩展 | AI 与业务解耦 | FastAPI 独立进程;配置 ai.service.base-url |
| 兼容 | 大模型厂商可切换 | OpenAI 兼容协议(DeepSeek / Qwen 等) |
2.5 约束与假设
- 面向 实训 / 课程设计 / 答辩演示,非生产级 HIS 或 PACS 替代品。
- 医学影像以常见图片格式为主(JPG / PNG 等),DICOM 完整工作流未作为重点。
- YOLO 权重与检测类别为演示级配置,输出置信度与框选结果需医师复核。
- H2 内存模式下进程退出即丢库内业务数据;AI 配置与对话历史另存
./data/ai/文件,可跨重启保留。
三、项目功能
3.1 功能总览
┌─────────────────────────────────────────────────────────────────┐
│ 智慧医院功能全景 │
├──────────────┬──────────────┬──────────────┬────────────────────┤
│ 身份与权限 │ 业务主数据 │ 诊疗业务 │ 智能能力 │
├──────────────┼──────────────┼──────────────┼────────────────────┤
│ 登录 / JWT │ 患者管理 │ 影像检查 │ YOLO 影像检测 │
│ 修改密码 │ 用户管理 │ 电子病历 │ AI 诊断报告 │
│ 角色菜单 │ 知识库文档 │ 预约挂号 │ EMR 辅助决策 + RAG │
│ 头像上传 │ │ 仪表盘统计 │ AI 对话助手 │
│ │ │ │ LLM / YOLO 管理端 │
└──────────────┴──────────────┴──────────────┴────────────────────┘
3.2 功能模块详述
3.2.1 登录与个人中心
- 账号密码登录,返回 JWT 与用户信息,前端
localStorage持久化(约 24h 过期,见jwt.expiration-ms)。 - 右上角用户菜单:修改密码、更换头像。
- 未登录访问业务页自动跳转登录;已登录访问登录页跳转仪表盘。
3.2.2 仪表盘(Dashboard)
- 多项 KPI:患者数、影像数、病历数、预约数及状态分布等。
- 近 7 天业务趋势折线 / 柱状图(ECharts)。
- 检查类型分布、诊断状态分布饼图。
- 快捷入口与待办提示,便于演示导览。
3.2.3 患者管理
- 分页列表、关键字搜索(姓名等)。
- 新增 / 编辑 / 删除:姓名、性别、年龄、身份证、电话、地址、既往病史。
- 患者 360° 档案(抽屉):基本信息 + 关联影像记录、电子病历、预约列表及计数统计。
- 表单弹窗采用顶栏标签与等宽两列布局,避免左右留白不均。
3.2.4 影像诊断
- 检查登记:选择患者、检查类型(X 光 / CT / MRI / 超声)、部位、上传影像或填写路径。
- 列表筛选:关键字、状态、检查类型;状态 KPI 卡片可快速过滤。
- AI 诊断:触发后状态流转;完成后展示:
- 诊断印象与置信度仪表盘
- 原始影像 vs YOLO 标注图对比
- 影像所见(分段段落)
- 建议(编号列表)
- 检测明细表(类别、置信度、bbox)
- 完整报告(报告头 / 所见 / 印象 / 建议 / 声明 分块卡片)
- AI 服务不可用时,业务后端可降级为本地规则结果,保证演示不断链。
3.2.5 电子病历
- 病历录入:患者、就诊日期、主诉、现病史、体格检查、诊断、治疗方案、用药、随访。
- 保存后可自动弹出 AI 辅助决策;列表亦可再次查看。
- 决策内容包括:治疗建议表、用药建议表、护理建议、随访计划、风险评估、药物冲突提示、知识库引用(RAG)。
- 诊断含「高血压 / 糖尿病 / 肺炎 / 结节」等关键词时,模板/RAG 效果更明显;配置 LLM 后由大模型增强。
3.2.6 预约挂号
- 新建 / 编辑 / 删除预约。
- 状态流转:预约 → 确认 → 完成 / 取消 / 未到诊。
- 按日期筛选、统计卡片、详情抽屉。
3.2.7 AI 助手
- 对话式问答界面,支持 Markdown 渲染(
marked+DOMPurify消毒)。 - 对话历史持久化到业务端
./data/ai/chat-history.json(不依赖 H2 是否清空)。
3.2.8 知识库
- 知识文档的新增、编辑、查看、启用/停用。
- 与 AI 服务 RAG 管线配合;AI 服务内置医学相关 Markdown 知识片段(如高血压、肺炎、肺结节、糖尿病等)。
3.2.9 AI 配置(仅管理员)
- 配置 OpenAI 兼容接口:Base URL、API Key、Model 等。
- 设置持久化到
./data/ai/settings.json。 - 启动或保存时通过同步机制推送到 FastAPI(
llm_config),使报告生成与决策走大模型而非纯模板。
3.2.10 YOLO 权重管理(仅管理员)
- 查看当前权重、模式(real / demo)、推理统计。
- 上传 / 激活权重文件,支撑影像检测能力切换。
3.2.11 用户管理(仅管理员)
- 用户 CRUD:账号、密码、姓名、角色、科室、电话、邮箱、启用状态。
- 头像设置;禁止停用当前登录账号等业务保护。
- 前端菜单与路由按角色隐藏/拦截;后端接口权限校验。
3.3 前端页面与路由对照
| 路由 | 页面 | 权限 |
|---|---|---|
/login |
登录 | 公开 |
/dashboard |
仪表盘 | 已登录 |
/patients |
患者管理 | 已登录 |
/imaging |
影像诊断 | 已登录 |
/emrs |
电子病历 | 已登录 |
/appointments |
预约挂号 | 已登录 |
/ai-assistant |
AI 助手 | 已登录 |
/ai-knowledge |
知识库 | 已登录 |
/ai-settings |
AI 配置 | ADMIN |
/ai-yolo |
YOLO 权重 | ADMIN |
/users |
用户管理 | ADMIN |
/403 |
无权访问 | 已登录 |
3.4 与早期版本的能力对比
| 维度 | 早期(PROJECT_REPORT 描述) | 当前实现 |
|---|---|---|
| 前端 | Thymeleaf + Bootstrap | Vue 3 + Element Plus + ECharts |
| 安全 | HttpSession | Spring Security + JWT |
| AI 影像 | 规则/随机模拟 | FastAPI + YOLO 实检 + 报告(LLM 或模板) |
| 决策 | 关键字规则 | RAG + 可选 LLM,失败回退模板 |
| 业务广度 | 患者 / 影像 / 病历 | 增加预约、仪表盘增强、知识库、AI 配置、YOLO 管理 |
| 数据库 | 依赖 MySQL | 默认 H2,可选 MySQL profile |
四、技术栈
4.1 总体一览
| 层级 | 技术 | 版本(项目实际) | 用途 |
|---|---|---|---|
| 前端框架 | Vue | 3.5.10 | SPA |
| 构建工具 | Vite | 5.4.8 | 开发与打包 |
| UI | Element Plus | 2.8.4 | 组件库 |
| 状态 | Pinia | 2.2.4 | 用户会话等 |
| 路由 | Vue Router | 4.4.5 | 前端路由与守卫 |
| HTTP | Axios | 1.7.7 | 调用 /api |
| 图表 | ECharts + vue-echarts | 5.5.1 / 7.0.3 | 仪表盘 |
| 文档渲染 | marked + DOMPurify | 18.x / 3.x | AI 对话 Markdown |
| 业务后端 | Spring Boot | 3.3.4 | REST / 安全 / JPA |
| 语言 | Java | 17 | 后端 |
| 安全 | Spring Security + jjwt | 0.12.6 | JWT |
| ORM | Spring Data JPA / Hibernate | 随 Boot 3.3 | 持久化 |
| 数据库 | H2(默认)/ MySQL(可选) | — | 业务数据 |
| 工具 | Lombok | — | 实体简化 |
| 构建 | Maven(含 mvnw) | — | 后端构建 |
| AI 服务 | FastAPI + Uvicorn | ≥0.110 / ≥0.27 | AI 微服务 |
| 视觉 | Ultralytics YOLO + OpenCV | — | 检测与标注 |
| 预处理 | OpenCV / 可选 MONAI | — | 影像预处理 |
| LLM / RAG | LangChain 生态 + httpx | ≥0.2 | 报告、决策、检索 |
| 大模型 | DeepSeek 等 OpenAI 兼容 API | 可配置 | 文本生成 |
4.2 前端技术细节
- 工程:
frontend/,type: module,Vite 开发服务器默认 5173。 - 代理:开发态将
/api代理到http://localhost:8080。 - 自动导入:
unplugin-auto-import、unplugin-vue-components简化 Element Plus 使用。 - 布局:
BasicLayout侧边栏 + 顶栏 + 主内容滚动;Dialog/Drawer 普遍append-to-body,避免被overflow裁切。 - 生产构建:
npm run build产物可置于 Nginx 或由 Spring 静态资源 / SPA 回退托管。
4.3 业务后端技术细节
- 工程:
smart-hospital/(Maven 子工程)。 - 端口:
8080。 - 包结构:
controller/service/repository/model/dto/security/config/common。 - 统一响应:
Result<T>,code == 0表示成功;全局异常处理业务码与校验错误。 - 异步诊断:
AsyncConfig线程池 +AIDiagnosisService异步分析。 - 文件存储:影像与头像本地目录
./uploads/;AI 设置与聊天./data/ai/。 - AI 客户端:
AiServiceClient调用 FastAPI;失败时服务内降级逻辑保证可用性。 - LLM 同步:
AiLlmSyncRunner/AiSettingsService将管理端配置同步到 AI 微服务。
4.4 AI 微服务技术细节
- 工程:
ai-service/,Python 3.10+(开发环境实测 3.12 可用)。 - 端口:
8001。 - 主要路由模块:
/health— 健康与能力探测/imaging/analyze— YOLO 检测 + 报告/report/imaging、/report/decision— 报告与决策/rag/*— 知识检索与写入/yolo/*— 权重与统计/llm-config— 运行时 LLM 配置
- 报告策略:
- 启用 LLM:结构化 JSON(所见 / 印象 / 建议),再由模板拼接分段
full_report - 未启用或失败:模板 / 规则文案
- 启用 LLM:结构化 JSON(所见 / 印象 / 建议),再由模板拼接分段
- 内置知识:
app/knowledge/下高血压、糖尿病、肺炎、肺结节、骨折等 Markdown 片段。 - 权重目录:
data/weights/(如best.pt、yolov8n.pt等演示权重)。
4.5 数据库与配置
| 项 | 默认(H2) | MySQL Profile |
|---|---|---|
| 连接 | jdbc:h2:mem:smart_hospital |
application-mysql.yml |
| 控制台 | /h2-console(sa / 空密码) |
— |
| DDL | hibernate.ddl-auto: update |
同左或按环境调整 |
| 种子数据 | DataInitializer 自动写入 |
同左 |
其他关键配置(application.yml):
jwt.*:密钥、过期时间、Header 前缀cors.allowed-origins:含http://localhost:5173ai.service.base-url:http://127.0.0.1:8001imaging.storage.path:./uploads/images- 上传限制:业务 multipart 最大约 500MB(兼容 YOLO 权重上传)
五、系统架构
5.1 逻辑架构
┌──────────────────────┐
│ 浏览器 Vue SPA │
│ localhost:5173 │
└──────────┬───────────┘
│ /api (Vite 代理)
▼
┌──────────────────────┐
│ Spring Boot 业务端 │
│ localhost:8080 │
│ JWT / JPA / 文件 │
└──────────┬───────────┘
│ HTTP(可选)
┌─────────────┴─────────────┐
▼ ▼
┌────────────────┐ ┌─────────────────┐
│ H2 / MySQL │ │ FastAPI AI 服务 │
│ 业务库 │ │ localhost:8001 │
└────────────────┘ │ YOLO / RAG / LLM│
└────────┬────────┘
│
┌──────────────┼──────────────┐
▼ ▼ ▼
本地权重 pt 知识 Markdown 外部 LLM API
5.2 调用关系原则
- 浏览器只访问业务后端(开发时经 Vite 代理),不直接依赖 AI 端口(管理端部分 YOLO 能力可经 Spring 转发)。
- AI 能力集中在 FastAPI;Spring 负责鉴权、落库、任务状态与降级。
- 配置单向同步:管理端保存 LLM 配置 → 持久化 JSON → 同步 AI 运行时。
- 失败可降级:AI 超时或宕机时,诊断与决策仍可返回规则/模板结果。
5.3 部署形态(实训推荐)
| 进程 | 命令摘要 | 端口 |
|---|---|---|
| AI | uvicorn app.main:app --host 0.0.0.0 --port 8001 |
8001 |
| 业务 | mvnw spring-boot:run 或 java -jar …jar |
8080 |
| 前端 | npm run dev |
5173 |
生产可仅保留 AI + 业务 jar,前端 build 后由 Nginx 或 Spring 静态托管。
六、目录与模块结构
smart-hospital/ # 仓库根
├── README.md # 启动与接口速览
├── PROJECT_REPORT.md # 早期探索报告(历史参考)
├── 项目详细文档.md # 本文件
├── smart-hospital.sql # MySQL 初始化脚本(可选)
├── data/ai/ # 根目录侧 AI 文件(若存在)
├── uploads/ # 根目录侧上传样例(若存在)
│
├── frontend/ # Vue 3 前端
│ ├── package.json
│ ├── vite.config.js
│ └── src/
│ ├── api/ # 按域划分的 HTTP 封装
│ ├── layouts/ # BasicLayout
│ ├── router/ # 路由与守卫
│ ├── stores/ # Pinia(用户)
│ ├── utils/ # 标签映射、Markdown 等
│ └── views/ # 各业务页面
│
├── smart-hospital/ # Spring Boot 业务后端
│ ├── pom.xml
│ ├── mvnw / mvnw.cmd
│ ├── data/ai/ # settings.json、chat-history.json
│ ├── uploads/ # 影像、头像、标注图
│ └── src/main/
│ ├── java/com/hospital/ # 应用代码
│ └── resources/
│ ├── application.yml
│ ├── application-mysql.yml
│ └── static/ # 可选内嵌前端构建产物
│
└── ai-service/ # FastAPI AI 微服务
├── requirements.txt
├── README.md
├── data/weights/ # YOLO 权重
├── samples/ # 示例影像
└── app/
├── main.py
├── api/ # imaging / report / rag / yolo / llm_config
├── services/ # yolo、report、rag、llm
├── schemas/
└── knowledge/ # RAG 文档片段
七、核心业务流程
7.1 AI 影像诊断流程
医生/技师 新建影像记录(上传图片)
│
▼
状态 = PENDING
│
│ 点击「AI 诊断」
▼
状态 = ANALYZING ──异步──► Spring AIDiagnosisService
│ │
│ ▼
│ 调用 FastAPI /imaging/analyze
│ │
│ ┌─────────┴─────────┐
│ ▼ ▼
│ YOLO 检测框 报告生成
│ 绘制标注图 (LLM 或模板)
│ │ │
│ └─────────┬─────────┘
│ ▼
│ 写 AIDiagnosisResult
│ 更新 ImagingRecord
▼
状态 = COMPLETED / ERROR
│
▼
前端轮询 / 打开报告弹窗
(所见 · 印象 · 建议 · 检测明细 · 完整报告)
7.2 电子病历辅助决策流程
医生填写并保存病历(含诊断等字段)
│
▼
Spring DecisionSupportService
│
▼
FastAPI /report/decision
│
├─ RAG 检索 knowledge + 业务知识库
├─ 可选 LLM 生成结构化建议
└─ 失败则按诊断关键词走模板
│
▼
返回治疗 / 用药 / 护理 / 随访 / 风险 / 冲突 / 来源
│
▼
前端 Dialog 分节展示
7.3 LLM 配置同步
管理员在「AI 配置」保存
│
▼
写入 ./data/ai/settings.json
│
▼
调用 AI 服务 llm_config 接口
│
▼
FastAPI 运行时启用/更新 LLM
(报告与决策从模板切到大模型)
八、数据模型概要
8.1 主要业务实体
| 实体 | 表名 | 要点 |
|---|---|---|
| User | users | 角色 ADMIN/DOCTOR/RADIOLOGIST,BCrypt 密码,科室等 |
| Patient | patients | 姓名、性别、年龄、证件、联系方式、既往史 |
| ImagingRecord | imaging_records | 患者、医生、检查类型、部位、图像 URL、状态、AI 摘要字段 |
| AIDiagnosisResult | ai_diagnosis_results | 诊断文本、置信度、所见、建议、检测 JSON、标注图、完整报告、引擎与是否降级 |
| ElectronicMedicalRecord | electronic_medical_records | 主诉至随访全字段 + 关联患者/医生 |
| DecisionSupportRecord 等 | 决策相关表 | 辅助决策落库(按实现) |
| Appointment | appointments | 预约日、科室、事由、状态机 |
| AiKnowledgeDoc | 知识文档表 | 标题、分类、正文、启用 |
| AiSettings / 聊天 | 文件为主 | settings.json、chat-history.json |
8.2 影像状态机
| 状态 | 含义 |
|---|---|
| PENDING | 已登记,待诊断 |
| ANALYZING | 诊断进行中 |
| COMPLETED | 成功,可查看报告 |
| ERROR | 失败 |
8.3 检查类型
X_RAY · CT · MRI · ULTRASOUND
8.4 关系简图
User ──┬──< ImagingRecord >── Patient
│ │
│ └── AIDiagnosisResult
│
├──< ElectronicMedicalRecord >── Patient
│ │
│ └── Decision / Suggestions(按实现落库)
│
└──< Appointment >── Patient
九、接口与权限
9.1 统一响应
{
"code": 0,
"message": "OK",
"data": {}
}
code != 0 时,前端 Axios 拦截器统一 ElMessage 提示。
9.2 业务 REST 一览(节选)
| 方法 | 路径 | 说明 | 权限 |
|---|---|---|---|
| POST | /api/auth/login |
登录 | 公开 |
| GET | /api/auth/me |
当前用户 | 已登录 |
| POST | /api/auth/change-password |
修改密码 | 已登录 |
| GET | /api/stats/overview |
统计概览 | 已登录 |
| * | /api/patients/** |
患者 CRUD / profile | 已登录 |
| * | /api/imaging/** |
影像 CRUD / 上传 | 已登录 |
| POST | /api/ai-diagnosis/analyze/{id} |
触发诊断 | 已登录 |
| GET | /api/ai-diagnosis/result/{id} |
诊断结果 | 已登录 |
| * | /api/emrs/** |
病历 CRUD | 已登录 |
| GET | /api/emrs/{id}/ai-suggestions |
辅助决策 | 已登录 |
| * | /api/appointments/** |
预约 CRUD / 状态 | 已登录 |
| * | /api/users/** |
用户管理 | ADMIN |
| * | AI 管理 / 聊天 / 知识库等 | 见对应 Controller | 已登录或 ADMIN |
9.3 AI 微服务接口(节选)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /health |
健康检查 |
| POST | /imaging/analyze |
检测 + 报告 |
| POST | /report/decision |
病历决策 |
| POST | /report/imaging |
单独报告 |
| POST | /rag/query |
知识问答 |
| * | /yolo/* |
权重与统计 |
| * | /llm-config |
运行时 LLM 配置 |
完整 OpenAPI:http://127.0.0.1:8001/docs。
十、部署与运行
10.1 环境要求
| 组件 | 要求 |
|---|---|
| JDK | 17+ |
| Node.js | 18+ |
| Python | 3.10+(推荐 3.11/3.12) |
| 可选 | MySQL 8.x;NVIDIA GPU(非必须,CPU 可跑) |
10.2 启动顺序(推荐)
1) ai-service :8001
2) smart-hospital :8080
3) frontend :5173
AI 服务
cd ai-service
python -m venv .venv
# Windows: .venv\Scripts\activate
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
pip install -r requirements.txt
# 可选:配置 .env 中 LLM_API_KEY
uvicorn app.main:app --host 0.0.0.0 --port 8001
业务后端
cd smart-hospital
mvnw.cmd spring-boot:run
# 或
java -jar target/smart-hospital-1.0.0.jar
MySQL 模式:
mvnw.cmd spring-boot:run -Dspring-boot.run.profiles=mysql
前端
cd frontend
npm install
npm run dev
浏览器访问:http://localhost:5173。
10.3 健康检查
| 服务 | 地址 |
|---|---|
| 前端 | http://localhost:5173 |
| 业务 API | http://localhost:8080/api/... |
| H2 控制台 | http://localhost:8080/h2-console |
| AI 健康 | http://127.0.0.1:8001/health |
| AI 文档 | http://127.0.0.1:8001/docs |
十一、演示账号与推荐路径
11.1 内置账号(DataInitializer)
| 用户名 | 密码 | 角色 | 说明 |
|---|---|---|---|
| admin | admin123 | ADMIN | 用户管理、AI 配置、YOLO 权重 |
| doctor1 | pass123 | DOCTOR | 临床业务主演示账号 |
| radio1 | radio123 | RADIOLOGIST | 影像相关演示 |
11.2 推荐演示剧本
- 使用
doctor1 / pass123登录,浏览仪表盘 KPI 与图表。 - 患者管理:查看列表 → 打开 360° 档案。
- 影像诊断:新建检查并上传样例图 → AI 诊断 → 对比原图/标注图 → 阅读分段完整报告。
- 电子病历:新建病历,诊断填写「高血压」或「肺炎」→ 查看 AI 建议与知识库引用。
- 预约挂号:新建预约并切换状态。
- 切换
admin:进入 AI 配置(可填 DeepSeek Key)、YOLO 权重、用户管理。 - 对比:关闭 AI 服务后再次诊断,观察 降级 是否仍返回结果。
11.3 验证清单(节选)
- 三端均能启动,5173 可登录
- admin 可见用户管理;doctor1 访问
/users为 403 - 患者增删改与档案抽屉正常
- 影像 AI 状态能到 COMPLETED,报告分段清晰
- 病历 AI 建议弹窗含多类内容
- 预约状态可流转
- 修改密码后需重新登录
十二、设计说明与边界
12.1 关键设计取舍
| 取舍 | 原因 |
|---|---|
| 默认 H2 | 降低实训环境门槛,开箱即演示 |
| AI 独立进程 | 隔离 Python 视觉/LLM 依赖,避免撑爆 Java 工程 |
| JWT 无状态 | 适配前后端分离与多端调用 |
| LLM 可关 | 无 Key 时用模板/RAG,保证答辩可演示 |
| 报告强制分段拼接 | 避免大模型输出「墙文本」影响阅读 |
| Dialog append-to-body | Element Plus 2.8 默认不挂 body,易被布局 overflow 裁切 |
12.2 已知边界(非缺陷说明)
- 非完整 PACS/RIS/HIS 产品,无医保、收费、电子签名、CA 等模块。
- YOLO 类别与权重为演示级,不保证临床敏感性/特异性。
- H2 内存库重启丢失业务表数据;需持久化请改用 MySQL profile。
- 大模型与外部 API 受网络、额度、延迟影响;超时有配置上限。
- 早期
PROJECT_REPORT.md描述的是改造前架构,以本文档与当前代码为准。
12.3 后续可扩展方向(建议)
- DICOM 解析与序列阅片
- 报告 PDF 导出与医师电子签收工作流
- 更细粒度的科室/数据权限与操作审计
- 向量库(如 Chroma/FAISS)替换简易 RAG
- Docker Compose 一键拉起三端
- 接口自动化测试与 CI
附录 A:技术栈版本速查表
| 名称 | 版本 |
|---|---|
| Spring Boot | 3.3.4 |
| Java | 17 |
| jjwt | 0.12.6 |
| Vue | 3.5.10 |
| Vite | 5.4.8 |
| Element Plus | 2.8.4 |
| Pinia | 2.2.4 |
| Vue Router | 4.4.5 |
| Axios | 1.7.7 |
| ECharts | 5.5.1 |
| FastAPI | ≥0.110 |
| Ultralytics | requirements 中指定 |
| LangChain | ≥0.2 |
附录 B:文档维护
| 项 | 说明 |
|---|---|
| 本文档路径 | 项目详细文档.md(仓库根目录) |
| 快速启动 | 见 README.md |
| AI 专项 | 见 ai-service/README.md |
| 历史探索 | 见 PROJECT_REPORT.md(可能过时) |
文档结束