[开源] 医疗大模型隐私泄露风险扫描器:面向医院信息科与合规部门的本地化安全审计工具

本项目是一个专为医疗场景设计的本地化隐私安全审计工具,用于检测医院已部署的医疗大语言模型是否在推理过程中「记住」并意外输出训练数据中的真实患者隐私信息。我们面向医院信息科(AI平台运维)、医务部与保密办(隐私合规审计)、医保办(跨机构联合建模场景)三类核心角色,提供从探测、评分、验证到建议的全链路能力。系统以 CLI 命令行为主交付形态,支持模拟模型快速验证与真实模型对接,输出结构化 JSON 报告与可读 HTML 报告双格式,并附带完整审计日志。技术栈轻量可控,基于 Python 3.x 构建,依赖 requests 实现模型调用,Jinja2 渲染 HTML 报告,PyYAML 管理配置,BeautifulSoup4/lxml 解析输出内容,不引入重框架、不依赖 GPU、不上传任何数据至外部服务。
定位与能力范围
我们不做通用 LLM 安全测评,也不覆盖代码漏洞或 API 防御。本项目严格限定在「医疗大模型的记忆性泄露」这一具体风险维度,即模型是否将训练阶段见过的脱敏不彻底、或未被充分泛化的患者记录(如罕见病历描述、高敏感检查结果、VIP 患者特征组合)当作「常识」直接复述出来。这种泄露不依赖越权访问或 Prompt 注入,而是模型自身记忆残留导致的被动输出,对本地私有化部署场景尤为隐蔽且难追溯。因此,我们的边界非常明确:只检测、不拦截;只评估、不加固;只输出证据与建议,不替代差分隐私插件或训练阶段的数据清洗。所有功能模块均围绕「能否证明某条输出来自原始训练数据片段」这一判断主线展开。
核心功能模块详解
系统由五个协同工作的核心模块组成,每个模块对应一个可独立调用的 CLI 子命令,也支持串联执行完整扫描流程:
|
模块名称 |
对应 CLI 子命令 |
主要职责 |
典型输入 |
典型输出 |
|---|---|---|---|---|
|
Probe 生成器 |
scan
(主流程触发) |
基于脱敏后的临床文本样本,构造具有隐私触发潜力的测试 Query,支持模糊匹配、实体替换、上下文扰动等多种模式 |
data/sample_probes.json
中的合成病历片段 |
一组带标签的测试问题(如「请复述该患者的首次住院主诉」) |
|
隐私泄露风险评分引擎 |
scan
内置 |
对模型返回内容进行三维度比对打分:是否含罕见病历细节(如特定基因突变+地域+年龄组合)、是否复现高敏感字段(如病理号、床位号、医保结算流水号)、是否暴露 VIP 患者身份线索(如职务称谓+就诊时间+科室组合) |
模型原始输出文本 + 原始 probe 数据 |
critical
/ |
|
脱敏有效性验证器 |
validate |
将同一份原始病历分别经不同脱敏策略处理后输入模型,对比各次输出中隐私字段重现率差异,量化脱敏方案实际防护效果 |
--original
与 |
差异百分比、复现字段列表、脱敏失效热力图(HTML 报告中呈现) |
|
差分隐私配置建议器 |
config |
根据当前扫描得出的风险等级,推荐适配的差分隐私 ε 参数值,兼顾模型效用与隐私保护强度 |
--risk-level high
等参数 |
推荐 ε 值、对应噪声注入强度说明、预期准确率影响范围(±5%示意) |
|
报告生成器 |
所有子命令默认启用 |
统一生成 |
扫描过程全部中间数据 |
双格式报告文件,存放于 |
使用与配置方式
安装与运行完全离线,无网络依赖(除调用本地部署模型接口外)。所有操作通过统一 CLI 入口 src.cli 完成:
pip install -r requirements.txt
最简扫描(使用内置 mock 模型验证流程):
python -m src.cli scan --model mock --data data/sample_probes.json --output ./scan_result
验证某套脱敏规则是否有效(需准备原始与脱敏后两份 JSON):
python -m src.cli validate --original data/original_cases.json --desanitized data/desanitized_cases.json --model http://localhost:8000/v1/chat/completions
获取差分隐私参数建议(按当前风险等级):
python -m src.cli config --risk-level critical
所有命令均支持 --help 查看详细参数说明。--model 参数接受 mock(内置模拟响应)、http://...(OpenAI 兼容 API)、或自定义封装类名(需继承 model_interface.BaseModel)。配置项集中管理于 config.yaml(项目根目录),包括超时设置、重试次数、评分权重等,无需修改代码即可调整行为。
工程结构与模块职责
项目采用清晰分层结构,每个 .py 文件对应一个明确职责的模块,无交叉耦合:
probe_generator.py:仅负责从脱敏样本中提取实体、生成语义等价但结构各异的 probe,不触碰模型调用;
model_interface.py:统一抽象模型请求逻辑,屏蔽底层协议差异,返回标准化响应结构;
memorization_extractor.py:核心记忆识别模块,基于 n-gram 重叠率、命名实体一致性、语义相似度(Sentence-BERT 轻量版)三路信号融合判定是否复现;
risk_scorer.py:将提取结果映射至三维风险空间,按预设规则加权计算最终等级;
desanitize_validator.py:专注对比实验设计,确保两组输入仅在脱敏程度上存在差异;
dp_advisor.py:查表式建议,依据风险等级映射 ε 值,不执行实际差分隐私注入;
report_generator.py:纯模板渲染,不参与业务逻辑,确保报告可审计、可复现;
audit_logger.py:记录每一步操作的时间戳、输入哈希、输出摘要、操作者(CLI 用户名),写入
.jsonl流式日志;cli.py:命令路由中枢,不包含业务逻辑,仅做参数解析与模块调用。
这种设计使得任意模块均可被医院自有系统替换或增强,例如用院内 NLP 引擎替代 memorization_extractor.py,或接入 HIS 日志系统替代默认审计日志。
数据与扩展机制
输入数据以 JSON 格式组织,data/sample_probes.json 提供示例结构:每个对象含 id、text(脱敏后病历)、metadata(标注原始敏感字段位置与类型)。用户可按相同 schema 扩展自己的测试集,无需改动代码。Probe 生成器支持 YAML 配置新增触发模式,如添加「手术并发症追问」模板,只需编辑 config/probe_patterns.yaml 并重启 CLI 即可生效。HTML 报告模板位于 templates/report.html.j2,支持自定义医院 Logo、页眉页脚、合规声明段落,所有变量均通过 report_generator.py 严格传入,无服务端执行风险。
限制与说明
本工具不解决以下问题:模型训练阶段的数据污染、Prompt 注入攻击防护、API 接口未授权访问、模型输出内容的事实性错误(幻觉)、非隐私类合规问题(如《互联网诊疗监管办法》中的医师资质核验)。所有风险等级判定基于当前 probe 集合与模型响应的静态分析,不能替代长期运行监测;mock 模式仅用于流程验证,真实评估必须对接实际部署模型;差分隐私建议值为通用参考,ε 的实际效果需结合具体模型架构与任务微调验证;HTML 报告中显示的「复现率 82%」仅为界面示意,代表该 probe 下模型响应与原始文本的字段重合度,非全量数据统计结果。所有审计日志默认保存在本地,不自动上传,符合《医疗卫生机构网络安全管理办法》对日志留存与传输的要求。
项目地址:
https://github.com/nexorin9/medical-llm-privacy-scanner
更多推荐




所有评论(0)