医疗AI不传云端:这1000个模型,全跑在你自己的电脑上

患者数据永不离开你的设备
一行代码,临床文本变结构化——无API、无供应商锁定、无网络调用
🔥 先看一个场景:矛盾在哪?
你是一个医院信息科的技术人员,或者一家医疗AI创业公司的开发者。
临床医生给你一堆病历:出院小结、影像报告、化验单……他们要你“提取出里面的疾病、药物、检查结果”。
你怎么办?
传统方案的死结
| 方案 | 问题 |
|---|---|
| 用商业医疗AI API(比如AWS Comprehend Medical、Google Healthcare API) | 数据要发到云端,患者隐私谁负责?HIPAA合规成本高得离谱 |
| 自己训练模型 | 需要标注好的医疗数据——贵、慢、医疗标注找专业医生更贵 |
| 用开源通用NLP模型 | 医疗术语太专业,通用模型一塌糊涂。“AML”它可能以为是“上午”,其实是“急性髓系白血病” |
核心矛盾:医疗数据极度敏感,不能出网络;但高性能的医疗AI模型,又被锁在商业API里。
✅ OpenMed 的解法
OpenMed 是一套“本地优先”的医疗AI工具包。
1000+ 个专业医疗模型,全部可以在你自己的硬件上运行——CPU、GPU、Apple Silicon(M系列芯片)都行。
患者数据从不离开你的设备或网络。
from openmed import analyze_text
result = analyze_text(
"Patient started on imatinib for chronic myeloid leukemia.",
model_name="disease_detection_superclinical",
)
# 输出:
# DISEASE chronic myeloid leukemia 0.98
# DRUG imatinib 0.95
一行代码,本地运行。没有API密钥,没有网络调用,数据不出门。

📊 它跟云端医疗API有什么不同?
| OpenMed | AWS / Google 医疗API | |
|---|---|---|
| 运行位置 | 你的设备/服务器 | 他们的云端 |
| 患者数据离开你的网络 | ❌ 从不 | ✅ 发送给供应商 |
| 成本 | 免费、开源 | 按调用付费(长期用很贵) |
| 专业医疗模型数 | 1000+ | 有限(通用为主) |
| 离线/内网部署 | ✅ 支持 | ❌ 不行 |
| 供应商锁定 | 无(Apache 2.0) | 有 |
🍎 一个特别亮点:苹果生态原生支持
OpenMed 跟 Apple Silicon(M1-M4 芯片)深度集成:
- MLX加速(Apple 自己的机器学习框架)
- 通过 OpenMedKit 可以直接集成到 iOS / iPadOS / macOS 应用里
- PII检测、临床实体抽取完全在设备本地完成
// 加到你的Swift包里
dependencies: [
.package(url: "https://github.com/maziyarpanahi/openmed.git", from: "1.5.5"),
]
💡 一句话解释:MLX 是苹果做的机器学习框架,专门给M系列芯片加速。比 PyTorch 在 Mac 上跑得更快、内存占用更小。
🔧 它能干什么?
1. 医疗实体抽取(NER,命名实体识别)
从临床文本里抽取出:
- 疾病和诊断:
chronic myeloid leukemia、Type 2 diabetes - 药物和治疗:
imatinib、75mg clopidogrel - 解剖部位:
left ventricle、liver - 基因和蛋白质:
BRCA1、EGFR
from openmed import analyze_text
result = analyze_text(
"Patient with NSTEMI and hypertension, started on clopidogrel.",
model_name="pharma_detection_superclinical",
)
for entity in result.entities:
print(f"{entity.label}: {entity.text}")
# DRUG: clopidogrel
# CONDITION: NSTEMI, hypertension
💡 NER(命名实体识别):就是让计算机从一段文字里“挑出”特定类型的词——比如人名、地名、疾病名、药名。医疗版NER要能认出
imatinib是药,NSTEMI是病。
2. PII检测与去标识化(脱敏)
医疗数据最怕“泄露患者隐私”。OpenMed能自动找出病历里的:
- 姓名、出生日期、地址
- 社保号(SSN)、病历号(MRN)
- 电话号码、邮箱
- 身份证、驾照号……覆盖HIPAA全部18类标识符
from openmed import extract_pii, deidentify
text = "Patient: John Doe, DOB: 01/15/1970, SSN: 123-45-6789"
# 找出PII
result = extract_pii(text, model_name="pii_superclinical_large")
# 多种脱敏方式
deidentify(text, method="mask") # [NAME], [DATE]
deidentify(text, method="replace") # 伪造真实感的数据(保留格式)
deidentify(text, method="hash") # 加密哈希
deidentify(text, method="shift_dates", date_shift_days=180) # 日期偏移
关键能力:智能实体合并——01/15/1970 不会被拆成 01/15 和 1970 两个碎片。
💡 PII(个人身份信息):能直接或间接定位到具体人的信息,比如姓名、身份证号、病历号。医疗AI处理这些信息前必须先“脱敏”。
💡 HIPAA:美国医疗信息隐私保护法案,规定了18类需要保护的标识符。不合规罚款很重。
3. 多语言支持
12种语言的PII检测,总计 247个PII检查点:
| 语言 | 代码 | 语言 | 代码 |
|---|---|---|---|
| 英语 | en | 法语 | fr |
| 德语 | de | 意大利语 | it |
| 西班牙语 | es | 荷兰语 | nl |
| 葡萄牙语 | pt | 印地语 | hi |
| 泰卢固语 | te | 阿拉伯语 | ar |
| 日语 | ja | 土耳其语 | tr |
# 葡萄牙语示例
extract_pii("Paciente: Pedro Almeida, CPF: 123.456.789-09", lang="pt")
📦 核心模型一览
| 模型名 | 专长 | 实体类型 | 模型大小 |
|---|---|---|---|
disease_detection_superclinical |
疾病与病症 | DISEASE, CONDITION, DIAGNOSIS | 434M |
pharma_detection_superclinical |
药物与用药 | DRUG, MEDICATION, TREATMENT | 434M |
pii_superclinical_large |
PII与去标识化 | 18类HIPAA标识符 | 434M |
anatomy_detection_electramed |
解剖与身体部位 | ANATOMY, ORGAN, BODY_PART | 109M |
gene_detection_genecorpus |
基因与蛋白质 | GENE, PROTEIN | 109M |
💡 模型大小(如434M):指模型参数数量,4.34亿个。参数越多,模型越“聪明”,但对硬件要求也更高。109M的模型可以在老一点的CPU上跑,434M的建议有GPU或M系列Mac。
🚀 三种使用方式
1. Python API(最直接)
pip install "openmed[hf]"
from openmed import analyze_text, extract_pii
# NER抽取
result = analyze_text("Patient with AML and diabetes.", model_name="disease_detection_superclinical")
# PII检测
pii = extract_pii("John Doe, SSN: 123-45-6789", model_name="pii_superclinical_large")
2. REST服务(部署成API)
pip install "openmed[hf,service]"
uvicorn openmed.service.app:app --host 0.0.0.0 --port 8080
curl -X POST http://127.0.0.1:8080/pii/extract \
-H "Content-Type: application/json" \
-d '{"text":"Paciente: Maria Garcia, DNI: 12345678Z","lang":"es"}'
3. 离线/内网部署
没有互联网的环境(比如医院内网、研究机构的隔离网络)也能用:
result = analyze_text(
"Patient presents with chronic myeloid leukemia.",
model_id="./models/OpenMed-NER-DiseaseDetect-SuperClinical-434M", # 本地路径
config=OpenMedConfig(device="cpu"),
)
🎯 谁应该用 OpenMed?
| 人群 | 为什么适合 |
|---|---|
| 医院/医疗机构的IT/数据团队 | 患者数据不能出网。OpenMed本地部署,合规无忧 |
| 医疗AI创业公司 | 不用重新训练模型,直接用1000+个专业模型,省几百万标注费 |
| 制药公司/CRO(合同研究组织) | 从海量临床试验文本、文献里抽实体,全程在自己服务器上跑 |
| 医学研究机构 | 病历去标识化后做研究,不暴露患者隐私 |
| 个人开发者/黑客马拉松 | 免费、开源、一行代码跑起来,不用申请任何API key |
| Mac/iOS开发者 | OpenMedKit让你在iPhone上跑医疗AI,完全本地,不联网 |
一个典型的“冲突”场景
问题:某三甲医院想做“智能病历结构化”,从出院小结里自动抽疾病和药物。但IT部门规定:任何患者数据不得上传至公有云。
之前:要么自己招团队训练模型(投入大、周期长),要么放弃。
现在:OpenMed 直接部署在内网服务器上,模型本地加载,数据不出院区。一行 Python 就能跑。
🔬 技术原理(通俗版)
1. 模型从哪来?
OpenMed 聚合了 Hugging Face 上 1000+ 个领域适应(domain-adapted)的生物医学模型。这些模型用大量的生物医学文献、临床笔记、出院小结训练过,所以能认出 imatinib 是药,NSTEMI 是病。
2. 怎么跑在你本地?
模型下载到本地后,OpenMed 用 Hugging Face 的 transformers 库加载推理(inference)。你可以选:
device="cpu":任何电脑都能跑,慢一点device="cuda":有NVIDIA显卡,快很多device="mps"(Mac M系列):用苹果的Metal加速
3. 隐私过滤器(Privacy Filter)
基于 OpenAI 发布的 Privacy Filter 架构,专门做PII检测。OpenMed 提供了三个变体:
openai/privacy-filter:OpenAI原始版本OpenMed/privacy-filter-nemotron:用NVIDIA的Nemotron数据集微调,更准OpenMed/privacy-filter-multilingual:支持12种语言
这些模型在MLX加速下,iPhone上也能跑。
✅ 总结
| 层次 | 核心内容 |
|---|---|
| 解决了什么矛盾 | 医疗数据敏感不能上云 ↔ 高性能医疗AI被锁在商业API里。OpenMed让医疗AI本地运行,数据不出设备 |
| 核心能力 | ①医疗实体抽取(疾病/药物/基因)②PII检测与脱敏(18类HIPAA)③12种语言 ④1000+模型 ⑤苹果生态原生支持 |
| 谁来用 | 医院IT、医疗AI创业、药企、研究人员、Mac/iOS开发者 |
| 怎么开始 | pip install "openmed[hf]" → from openmed import analyze_text → 一行代码跑起来 |
📦 立即开始
pip install "openmed[hf]"
from openmed import analyze_text
result = analyze_text(
"Patient started on imatinib for chronic myeloid leukemia.",
model_name="disease_detection_superclinical",
)
print([(e.label, e.text) for e in result.entities])
# [('DISEASE', 'chronic myeloid leukemia'), ('DRUG', 'imatinib')]
Apache 2.0 许可证 · 无供应商锁定 · 你的数据,永远只属于你

浙公网安备 33010602011771号