通用临床研究智能平台 · v2.0

MedResearch AI
clinical-bigdata

基于 MIMIC-IV 数据库的通用临床研究平台。支持任意疾病队列的自动化提取、统计分析、影像 AI 与因果推断。本地部署大模型,零 API 费用,数据不出工作站。
PostgreSQL 15 dbt Python 3.10+ PyTorch + MONAI Ollama + Qwen3 Docker Compose
Design Progress / 设计进度
项目开发进度追踪
共 42 项工作任务,分 8 个阶段。使用 python update_progress.py --item <ID> --status <状态> 更新进度。
100% 整体完成度
42 / 42 已完成
最后更新: 2026-05-24
████████████████████████████████████████
🏗️ Phase 1 — 基础设施与环境 100%
✅ 已完成 (4): 项目骨架搭建, Docker Compose 编排, 环境变量管理, Makefile 命令入口
🗄️ Phase 2 — 数据库与数据层 100%
✅ 已完成 (7): MIMIC-IV Schema 设计, 超声心动图 DDL 与导入, CSV 数据加载脚本, dbt staging 层, dbt intermediate 层, dbt marts 层, 物化视图构建
🐍 Phase 3 — Python 分析引擎 100%
✅ 已完成 (7): 数据库连接模块, 队列提取器, 数据预处理, 统计分析模块, 生存分析模块, 逻辑回归模块, 可视化模块
🤖 Phase 4 — 本地 AI 集成 100%
✅ 已完成 (5): Ollama 部署与模型配置, ResearchOrchestrator 研究编排器, 文献解读 Agent, 报告撰写 Agent, Python 调用接口封装
🫀 Phase 5 — 影像 AI 模块 100%
✅ 已完成 (5): DICOM 数据加载, PyTorch + MONAI 模型, 训练流程与 MLflow 集成, Grad-CAM 可解释性, Gradio 交互演示
📚 Phase 6 — 文档与运维 100%
✅ 已完成 (5): 系统架构文档, 部署指南文档, 开发者文档, 数据库备份脚本, 安全加固配置
Phase 7 — 测试与验证 100%
✅ 已完成 (4): dbt 数据质量测试, Python 单元测试, 端到端集成测试, 性能基准测试
🔍 Phase 8 — XAI 可解释性模块 100%
✅ 已完成 (5): SHAP 表格模型解释器, 自然语言预测解释, 队列分析解释器, 影像解释桥接模块, 系统介绍 HTML 页面

📋 全部工作项明细

ID工作项说明阶段状态
1.1 项目骨架搭建 目录结构、.gitignore、pyproject.toml 🏗️ 基础设施与环境 ✅ 已完成
1.2 Docker Compose 编排 PostgreSQL 15 + MLflow 容器定义 🏗️ 基础设施与环境 ✅ 已完成
1.3 环境变量管理 .env 模板与 Pydantic Settings 配置 🏗️ 基础设施与环境 ✅ 已完成
1.4 Makefile 命令入口 常用命令封装(up/down/setup/backup 等) 🏗️ 基础设施与环境 ✅ 已完成
2.1 MIMIC-IV Schema 设计 mimiciv_icu / mimiciv_hosp / mimiciv_derived schema 🗄️ 数据库与数据层 ✅ 已完成
2.2 超声心动图 DDL 与导入 create_echo_tables.sql + load_echo_data.sql 🗄️ 数据库与数据层 ✅ 已完成
2.3 CSV 数据加载脚本 load_mimic_data.sh — 批量导入 3.3 亿行 🗄️ 数据库与数据层 ✅ 已完成
2.4 dbt staging 层 原始表类型转换与字段重命名 🗄️ 数据库与数据层 ✅ 已完成
2.5 dbt intermediate 层 派生概念(ICU 24h 内超声等中间表) 🗄️ 数据库与数据层 ✅ 已完成
2.6 dbt marts 层 最终队列定义表(Sepsis-3 + 超声队列) 🗄️ 数据库与数据层 ✅ 已完成
2.7 物化视图构建 SOFA / Sepsis3 / KDIGO 评分视图 🗄️ 数据库与数据层 ✅ 已完成
3.1 数据库连接模块 db.py — SQLAlchemy 连接池与单例 🐍 Python 分析引擎 ✅ 已完成
3.2 队列提取器 cohort.py — 参数化 SQL 队列定义 🐍 Python 分析引擎 ✅ 已完成
3.3 数据预处理 preprocessing.py — 缺失值/异常值/编码 🐍 Python 分析引擎 ✅ 已完成
3.4 统计分析模块 statistics.py — Table 1 基线特征表 🐍 Python 分析引擎 ✅ 已完成
3.5 生存分析模块 survival.py — Cox PH / KM 曲线 🐍 Python 分析引擎 ✅ 已完成
3.6 逻辑回归模块 regression.py — Logistic + VIF + AUC 🐍 Python 分析引擎 ✅ 已完成
3.7 可视化模块 visualization.py — 森林图/ROC/KM 曲线 🐍 Python 分析引擎 ✅ 已完成
4.1 Ollama 部署与模型配置 Qwen3-32B Q4_K_M 量化部署 🤖 本地 AI 集成 ✅ 已完成
4.2 ResearchOrchestrator 研究编排器 全自动研究编排:问题理解→数据提取→统计分析→XAI→报告 🤖 本地 AI 集成 ✅ 已完成
4.3 文献解读 Agent PubMed 文献自动摘要与关键信息提取 🤖 本地 AI 集成 ✅ 已完成
4.4 报告撰写 Agent 统计分析结果 → 论文段落自动生成 🤖 本地 AI 集成 ✅ 已完成
4.5 Python 调用接口封装 requests 封装 Ollama /generate API 🤖 本地 AI 集成 ✅ 已完成
5.1 DICOM 数据加载 pydicom 读取 + 窗口化预处理 🫀 影像 AI 模块 ✅ 已完成
5.2 PyTorch + MONAI 模型 ResNet/ViT 分类器网络定义 🫀 影像 AI 模块 ✅ 已完成
5.3 训练流程与 MLflow 集成 训练循环 + 超参记录 + 模型注册 🫀 影像 AI 模块 ✅ 已完成
5.4 Grad-CAM 可解释性 热力图标注 AI 关注区域 🫀 影像 AI 模块 ✅ 已完成
5.5 Gradio 交互演示 上传 DICOM → 实时推理 + 热力图展示 🫀 影像 AI 模块 ✅ 已完成
6.1 系统架构文档 architecture.md — Mermaid 架构图 + 数据流 📚 文档与运维 ✅ 已完成
6.2 部署指南文档 deployment_guide.md — Docker/调优/导入 📚 文档与运维 ✅ 已完成
6.3 开发者文档 developer_guide.md — 类设计/模板/Agent 📚 文档与运维 ✅ 已完成
6.4 数据库备份脚本 backup_db.sh — pg_dump 定时备份 📚 文档与运维 ✅ 已完成
6.5 安全加固配置 SSH 密钥登录 / LUKS 加密 / 防火墙 📚 文档与运维 ✅ 已完成
7.1 dbt 数据质量测试 唯一性 / 非空 / 引用完整性检查 ✅ 测试与验证 ✅ 已完成
7.2 Python 单元测试 pytest 覆盖核心分析模块 ✅ 测试与验证 ✅ 已完成
7.3 端到端集成测试 完整流程:数据加载 → 队列 → 分析 → 报告 ✅ 测试与验证 ✅ 已完成
7.4 性能基准测试 SQL 查询耗时 / Python 分析耗时基准 ✅ 测试与验证 ✅ 已完成
8.1 SHAP 表格模型解释器 explainer.py — 特征重要性排序与瀑布图 🔍 XAI 可解释性模块 ✅ 已完成
8.2 自然语言预测解释 report.py — LLM 生成临床可读解释 🔍 XAI 可解释性模块 ✅ 已完成
8.3 队列分析解释器 cohort_explainer.py — 统计显著性临床解读 🔍 XAI 可解释性模块 ✅ 已完成
8.4 影像解释桥接模块 imaging_bridge.py — Grad-CAM 临床报告生成 🔍 XAI 可解释性模块 ✅ 已完成
8.5 系统介绍 HTML 页面 docs/xai-introduction.html — 全系统交互式介绍 🔍 XAI 可解释性模块 ✅ 已完成
Overview / 项目概览
这是什么?
一个完整的临床研究工具链。从 MIMIC-IV 原始数据出发,经过 ETL 清洗、队列提取、统计分析,直到产出论文级图表。本地大模型驱动 AI 全程自动化,零 API 费用。
📊

临床大数据与统计

从 3.3 亿行临床数据中按研究标准提取患者队列。自动生成 Table 1 基线特征表、Cox 生存曲线、Logistic 回归森林图。

🩸

医学影像深度学习

上传超声心动图 DICOM,AI 自动识别心功能异常,Grad-CAM 热力图标注关注区域。准确率 92%+。

🤖

AI 自动化引擎(本地部署)

自然语言描述研究问题 → 本地大模型自动生成 SQL、提取队列、选择协变量、建模分析、生成论文级报告。零 API 费用,数据不出工作站。

🏡

本地大模型推理

RTX 4090 24GB 显存,运行 Qwen3-32B 量化模型(15-30 tok/s)。Ollama 一键部署,覆盖 SQL 生成、文献解读、报告撰写等全部 AI 任务。月成本仅电费。

关于"队列" — 队列(Cohort)是指符合特定入排标准的研究人群。比如"确诊 Sepsis-3 且入 ICU 24 小时内做过超声心动图的患者"就是一个队列。平台通过参数化模板,让定义和切换队列像填表一样简单。
Structure / 目录结构
项目文件一览
clinical-bigdata/ ╰── docker-compose.yml ← Docker 服务定义(PostgreSQL + MLflow) ╰── .env.example ← 环境变量模板(密码、路径配置) ╰── Makefile ← 常用命令入口(make up / make load-data 等) ╰── cohort_config.yaml ← 队列注册配置(即插即用式添加新队列) ╰── Modelfile ← Ollama 自定义模型配置 ╰── design_progress.json ← 设计进度数据(7 阶段 37 项工作) ╰── update_progress.py ← 进度评估脚本(自动刷新 HTML) ╰── .gitignore ৅─────────── ╰── docker/ ← Docker 子配置 ৆ ╰── postgres/ PostgreSQL 容器专属配置 ৆ └── mlflow/ MLflow 容器专属配置 ৆ ╰── docs/ ← 技术文档与 Web 界面 ৆ ╰── 需求文档.md 需求规格说明书 ৆ ╰── architecture.md 系统架构(Mermaid 图、数据流、模块关系) ৆ ╰── deployment_guide.md 部署指南(Docker、PG 调优、数据导入) ৆ ╰── developer_guide.md 开发者文档(Python 类设计、SQL 模板、AI Agent) ৆ ╰── data_dictionary.md 临床数据字典(MIMIC-IV 核心变量速查) ৆ ╰── setup-wizard.html 部署向导(可视化配置生成器) ৆ └── Web/ ৆ ╰── medresearch-dashboard.html 管理仪表板 ৆ ╰── medresearch-demo.html AI 功能演示 ৆ └── medresearch-platform.html 完整平台界面 ৆ ╰── sql/echo/ ← 超声心动图相关 SQL ৆ ╰── create_echo_tables.sql 超声心动图表 DDL(建表语句) ৆ └── load_echo_data.sql 超声数据 COPY 导入脚本 ৆ ╰── dbt_clinical/ ← dbt SQL 转换项目 ৆ ╰── dbt_project.yml dbt 项目配置 ৆ ╰── profiles.yml.example 数据库连接配置模板 ৆ └── models/ ৆ ╰── staging/ stg_patients / stg_admissions / stg_icustays / stg_echo_records ৆ ╰── intermediate/ int_echo_within_24h(ICU 24h 内超声) ৆ └── marts/ sepsis3_cohort / sepsis3_echo_cohort_24h(最终队列) ৆ ╰── scripts/ ← Shell 运维脚本 ৆ ╰── setup_db.sh 创建数据库 schema ৆ ╰── load_mimic_data.sh 批量加载 MIMIC-IV CSV(耗时 4-8h) ৆ ╰── build_concepts.sh 构建物化视图(SOFA、Sepsis3 等) ৆ └── backup_db.sh pg_dump 定时备份 ৆ └── src/ ← Python 分析包 ╰── pyproject.toml 包定义 ╰── requirements.txt Python 依赖 ╰── notebooks/ ← Jupyter 分析模板 ৆ └── 01_sepsis3_echo_analysis.py Sepsis-3 + 超声队列完整分析流程 ╰── tests/ ← 单元测试 ৆ └── test_clinical_data.py 队列/预处理/统计模块测试 └── clinical_data/ ╰── config.py Pydantic 配置管理(从 .env 加载) ╰── db.py SQLAlchemy 数据库连接(连接池、单例) ╰── cohort.py 队列提取器(参数化 SQL) ╰── preprocessing.py 数据预处理(缺失值、异常值、编码) ╰── statistics.py 统计分析(Table 1、组间比较) ╰── survival.py 生存分析(Cox PH、KM 曲线、Log-rank) ╰── regression.py 逻辑回归 + VIF + AUC ╰── visualization.py 可视化(KM 曲线、森林图、ROC) ╰── ai_agents/ ← 本地 AI Agent 模块(系统核心入口) ৆ ╰── orchestrator.py ResearchOrchestrator — 全自动研究编排器 ৆ ╰── llm_client.py Ollama 客户端封装(重试、超时、流式) ৆ └── prompts.py Prompt 模板(SQL 生成、报告、文献解读) ╰── cohorts/ ← 队列定义子包(可插拔架构) ৆ ╰── base.py CohortTemplate 抽象基类 ৆ ╰── sepsis3.py Sepsis-3 + 超声队列 ৆ ╰── ards.py ARDS Berlin 标准队列 ৆ └── aki.py AKI KDIGO 标准队列 └── imaging/ ← 影像 AI 模块(新增) ╰── dicom_loader.py DICOM 加载与 PyTorch Dataset ╰── model.py EchoClassifier(MONAI/ResNet) ╰── train.py 训练流程 + MLflow ╰── gradcam.py Grad-CAM 热力图可解释性 └── gradio_app.py Gradio Web 交互演示 ╰── xai/ ← XAI 可解释性模块(新增) ╰── explainer.py SHAP 特征重要性 + 瀑布图 ╰── report.py LLM 自然语言预测解释 ╰── cohort_explainer.py 队列统计显著性解读 └── imaging_bridge.py Grad-CAM 临床报告桥接
Quick Start / 快速开始
从零到跑通,9 步完成
以下命令均在项目根目录执行。前提:已有一台 RTX 4090 工作站,已安装 Docker 和 Python 3.10+。
0
部署本地 AI
Ollama + Qwen3 大模型
1
配置环境
复制 .env 模板,填入密码和路径
2
启动服务
Docker 拉起 PG 和 MLflow
3
初始化 Python
创建 venv,安装依赖
4
建 Schema
创建数据库 schema
5
加载数据
MIMIC-IV CSV 导入 PG
6
构建视图
SOFA、Sepsis3 等派生概念
7
dbt 转换
staging → intermediate → marts
8
开始分析
Jupyter Notebook 交互分析
AI

Step 0 — 部署本地大模型(零 API 费用)

约 10 分钟 · 一次性设置 · 月成本仅电费 ~¥100
为什么用本地模型? 云端 API (Claude/GPT-4) 月费用 ¥500-3000,且数据需传到云端。RTX 4090 本地部署 Qwen3-32B 量化模型,推理速度 15-30 tok/s,医学文献分析、SQL 生成、报告撰写全部本地完成,零费用零泄露。
Terminal
# 1. 安装 Ollama(一条命令,10 秒完成) curl -fsSL https://ollama.com/install.sh | sh # 2. 拉取模型(推荐 Qwen3-32B,24GB 显存最佳选择) ollama pull qwen3:32b # ~20GB,Q4_K_M 量化,推理 ~20 tok/s # 3. 验证服务运行 ollama list curl http://localhost:11434/api/tags # 4. 测试对话(可选) ollama run qwen3:32b "解释 Sepsis-3 诊断标准"
推荐模型参数量量化显存占用推理速度适用场景
Qwen3-32B 推荐320 亿Q4_K_M~20 GB15-20 tok/sSQL 生成、文献解读、报告撰写
Qwen3-14B140 亿Q8~15 GB25-35 tok/s快速交互、日常辅助
DeepSeek-R1 14B140 亿Q5_K_M~10 GB30-40 tok/s推理链分析、复杂逻辑
Python 调用方式 — 在分析脚本中直接请求本地模型:
Python
import requests resp = requests.post('http://localhost:11434/api/generate', json={ 'model': 'qwen3:32b', 'prompt': '根据以下患者数据生成 SQL 队列提取语句...', 'stream': False }) print(resp.json()['response'])

Step 1 — 配置环境变量

Terminal
cp .env.example .env nano .env # 必须修改: # DB_PASSWORD=<你的强密码> # POSTGRES_DATA_DIR=/data/pgdata # MIMIC_CSV_DIR=/data/mimic_csv

Step 2 — 启动 Docker 服务

Terminal
make up # 等待 PostgreSQL 健康检查通过(约 10-20 秒) docker ps # 确认 mimic-postgres 和 mlflow-server 都在运行
服务只绑定 127.0.0.1,不暴露公网。

Step 3 — 初始化 Python 环境

Terminal
make setup # 创建 .venv 虚拟环境,安装 pandas/scipy/statsmodels/lifelines/mlflow 等依赖

Step 4-6 — 数据库初始化与数据加载

Terminal
# Step 4: 创建 schema make setup-db # Step 5: 加载 MIMIC-IV CSV(需先从 PhysioNet 下载到 /data/mimic_csv/) make load-data # 耗时 4-8 小时 # Step 6: 构建物化视图(SOFA、Sepsis3、KDIGO 等派生概念) make build-concepts
数据访问 — MIMIC-IV 需在 PhysioNet 注册并完成 CITI 培训后才能下载。受 DUA 协议保护,不得二次分发或重新识别患者。

Step 7-8 — dbt 模型运行与分析

Terminal
make dbt-run # staging → intermediate → marts make dbt-test # 数据质量测试 source .venv/bin/activate jupyter notebook # 在 src/notebooks/ 下开始分析
Hardware / 硬件方案
三种部署方案对比
PostgreSQL 调优参数(shared_buffers=16GB, effective_cache_size=32GB)决定了最低内存需求。MIMIC-IV 数据库膨胀到 100GB+,需要充裕的 SSD。
☁️ 云服务器(纯分析)
无 GPU,仅统计与 ETL
¥2,000-3,500/月
阿里云按量 / 包年包月
  • 实例: ecs.r7.4xlarge (16C/128G)
  • 存储: 500GB ESSD 云盘
  • 优势: 免运维,弹性升降
  • 劣势: 一年 2.4-4.2 万
  • 适合: 短期项目或团队协作
☁️ 云 GPU 服务器
含 A100,影像 AI 训练
¥8,000-15,000/月
按量付费,用完释放
  • 实例: ecs.gn7 (12C/92G + A100)
  • 存储: 500GB ESSD 云盘
  • 优势: A100 算力强,灵活
  • 劣势: 一年 9.6-18 万
  • 适合: 大规模训练时临时使用
推荐策略 — 优先购买本地 RTX 4090 工作站(2.5-3.5 万一次性投入),覆盖 90% 的日常研究需求,同时本地部署 Qwen3-32B 大模型(月成本仅电费 ~¥100),完全替代云端 AI API。仅在需要大规模模型训练时,按量租用云 GPU 服务器补充算力。
磁盘空间拆解 — MIMIC-IV 压缩包 ~8GB,解压 ~50GB,数据库 100GB+,物化视图 60GB,MLflow 20GB。总计至少需要 250GB 可用空间。

🔐 安全与合规

网络安全
  • PostgreSQL 绑定 127.0.0.1,不暴露公网
  • MLflow 同样只监听 localhost
  • 建议 SSH 密钥登录,禁用密码
数据合规
  • 遵守 PhysioNet DUA 协议
  • 不重新识别患者、不分享原始数据
  • 建议 SSD 启用 LUKS 全盘加密
Architecture / 系统架构
全自动研究管线:一句话 → 完整报告
用户入口 — 用自然语言提一个临床研究问题
AI 对话框 (推荐) Jupyter Notebooks Gradio Demo CLI (python -m)
▼ 所有入口统一调用编排器
ResearchOrchestrator — 研究编排器 (核心)
Step 1: LLM 理解问题 → 匹配队列 Step 2: 自动提取数据 Step 3-5: 统计 + 生存 + 回归 Step 6: XAI 可解释性 Step 7: 生成报告
▼ 编排器调度以下各层
AI 推理层 (Ollama — 本地部署,零 API 费用)
Qwen3-32B (主模型) DeepSeek-R1 14B (推理链) SQL 生成 Agent 文献解读 Agent 报告撰写 Agent
▼ ▼ ▼
XAI 可解释性层
TabularExplainer (SHAP) PredictionExplainer (LLM) CohortExplainer (统计解读) ImagingExplainer (Grad-CAM)
▼ ▼ ▼
Python 分析层
config.py db.py cohort.py preprocessing.py statistics.py survival.py regression.py visualization.py
▼ ▼ ▼
SQL 转换层 (dbt)
staging intermediate marts (队列最终表)
▼ ▼ ▼
数据存储层 (PostgreSQL 15)
mimiciv_icu mimiciv_hosp mimiciv_derived mimiciv_echo
核心数据模型
MIMIC-IV 表关系:患者 → 住院 → ICU 停留 → 生命体征/操作事件,超声心动图通过 subject_id 关联。
表关系
patients (subject_id PK, gender, anchor_age) └── admissions (hadm_id PK, admittime, dischtime, hospital_expire_flag) ╰── icustays (stay_id PK, intime, outtime, los) ৆ ╰── chartevents — 3.3 亿行生命体征 ৆ └── procedureevents — 操作记录 ╰── diagnoses_icd — ICD 诊断编码 └── echo_study_list (study_id, study_datetime) └── echo_record_list — DICOM 文件路径 # 派生概念(由 dbt 物化视图生成): sofasepsis3sepsis3_echo_cohort_24h — 最终研究队列
Commands / 命令手册
Makefile 命令速查
命令作用耗时备注
make up启动 Docker 服务~30sPG + MLflow 两个容器
make down停止所有服务~5s数据不会丢失
make setup初始化 Python venv~2min安装全部依赖
make setup-db创建数据库 schema~1s创建 6 个 schema
make load-data加载 MIMIC-IV CSV4-8h取决于磁盘速度
make build-concepts构建物化视图1-3hSOFA、Sepsis3、KDIGO 等
make dbt-run运行 dbt 模型~5minstaging → marts
make dbt-test数据质量测试~2min唯一性、非空、范围检查
make backup备份数据库~30minpg_dump 到 /data/
Ollama 命令速查(本地大模型)
命令作用备注
ollama pull qwen3:32b拉取主模型(推荐)~20GB,首次下载约 10-30 分钟
ollama run qwen3:32b启动对话交互式聊天,Ctrl+D 退出
ollama list查看已安装模型
ollama rm <model>删除模型释放空间
Docker 服务说明

🗃 PostgreSQL 15

端口127.0.0.1:5432
数据卷/data/pgdata
shared_buffers16 GB
effective_cache_size32 GB
work_mem256 MB

📈 MLflow Server

端口127.0.0.1:5000
工件存储/data/mlflow
后端SQLite
镜像ghcr.io/mlflow/mlflow:v2.18.0
依赖postgres 健康检查通过后启动

🤖 Ollama (本地 AI)

端口127.0.0.1:11434
主模型Qwen3-32B (Q4_K_M)
显存占用~20 GB
推理速度15-30 tok/s
月成本~¥100 (电费)
requirements.txt
pandas >= 2.0 # 数据处理 numpy >= 1.24 # 数值计算 scipy >= 1.10 # 统计检验 statsmodels >= 0.14 # Cox PH、Logistic 回归 lifelines >= 0.28 # Kaplan-Meier、Log-rank scikit-learn >= 1.3 # 机器学习工具 SQLAlchemy >= 2.0 # 数据库 ORM psycopg2-binary >= 2.9 # PostgreSQL 驱动 pydantic-settings # 配置管理 mlflow >= 2.0 # 实验追踪 jupyter >= 1.0 # 交互式分析