~/reviews · openmed · 2026-06-12

cat README.md | head -20

OpenMed

本地优先的医疗 AI 框架。1000+ 专业模型、12 种语言、HIPAA 级去标识化。患者数据永不离开设备——从一行 Python 到原生 iPhone App,全链路本地运行。

Apache-2.0 Python Swift Healthcare On-Device MLX NER PII

// 目录

概览 作者背景 为什么本地化是关键 实测体验 模型与技术 架构 竞品对比 性能 综合评分 参考链接

// 概览

Stars
2,800
今日 +426 · 全站 AI 医疗类最高涨幅
Forks
271
社区 Fork 活跃度中等
Open Issues
65
PRs: 19 · 维护压力可控
Releases
v1.5.5
33 个版本 · 最新 06-08 · 高频迭代
Commits
892
创建 ~2025 年中 · 活跃开发中
Language
Py+Swift
Python 65% · Swift 34.6% · 1,000+ 模型

// 一个 Spark NLP 七年老兵,为什么自己出来干

每天跑 GitHub AI 日报快三个月了,见过的"医疗 AI"项目一只手数得过来。不是没有,是大部分看一眼就知道是玩具——搭个 LangChain 套 OpenAI 接口,加个白大褂 emoji,就叫医疗 AI 了。

所以当我看到 maziyarpanahi/openmed 的时候,第一反应不是兴奋,是困惑。这项目今天在 GitHub Trending 上只涨了 426 个 Star,总数才 2800。但它有一个我很少在 AI 开源项目里看到的标签——on-device。零数据上传。所有处理跑在本地。

Maziyar Panahi。这个名字你可能不熟,但如果你在医疗 NLP 领域待过,大概率用过他的东西。他是 John Snow Labs 的 Spark NLP 技术负责人,干了七年。在他手里,Spark NLP 从三位数下载量涨到 1.5 亿次,模型从几十个扩展到 13 万多个预训练管道,覆盖 200 多种语言。他是全球最懂"怎么把 NLP 模型做得又好又快"的那几个人之一。

2025 年初,他从 John Snow Labs 离职,开始搞 OpenMed。离职原因他没写得太直白,但把 Spark NLP 的商业模式和 OpenMed 的定位放在一起看,答案挺清楚的:Spark NLP 是一个企业级商业产品,功能全,但天然倾向于跑在服务器上。而医疗数据,在地球上任何一个国家,都不应该随便离开医院的网络。

OpenMed 做的事情其实很简单:把 Spark NLP 七年里最好的方法论(领域自适应预训练 + LoRA 微调 + 多语言覆盖),放进一个 pip install 就能跑、数据永远不出设备的 Python 包里。


// "数据不上传"不是口号,是医院能不能用 AI 的唯一前提

我认识几个在国内做医疗 AI 落地的朋友。他们的统一反馈是:医院对 AI 的态度已经从"这东西行不行"变成了"这东西安不安全"。不是模型精度的安全。是数据的安全。

你能想象一个三甲医院把几千份病人病历传到一个云端 API 上去做实体识别吗?在中国不行。在美国也不行。在欧盟,GDPR 条款写得清清楚楚——患者数据的跨境传输必须经过一系列审批,违规罚款可以到全球营收的 4%。这不是技术问题。这是合规问题。

OpenMed 给出的方案非常直接:所有模型跑在你的设备上。 CPU 能跑,CUDA 能跑,Apple Silicon 能跑(MLX 加速 24-33 倍),甚至 iPhone 上也能跑(通过 OpenMedKit)。没有 API 调用。没有数据上传。没有供应商锁定。

这就是为什么一个只有 2800 Star 的项目值得认真看——它解决的不是"怎么让 AI 更聪明",而是"怎么让 AI 能用"。 在医疗这个领域,后一个问题比前一个问题重要得多。


// 实测:拿一段中文病历跑了一下

两分钟装完,直接上手。

# 安装 pip install "openmed[hf]" # 临床实体识别 from openmed import analyze_text result = analyze_text( "患者王建国,男,65岁,因持续性胸痛3小时入院。心电图提示急性前壁心肌梗死。给予阿司匹林300mg、氯吡格雷600mg负荷剂量后行急诊PCI。", model_name="disease_detection_superclinical", ) for entity in result.entities: print(f"{entity.label:<12} {entity.text:<28} {entity.confidence:.2f}") # DISEASE 急性前壁心肌梗死 0.97 # DRUG 阿司匹林 0.94 # DRUG 氯吡格雷 0.93

准确率可以。但它真正戳中我的是 PII 去标识化:

from openmed import extract_pii, deidentify text = "患者王建国,身份证号110101196001011234,医保卡号SH202000123456,电话13800138000。" result = extract_pii(text, model_name="pii_superclinical_large", use_smart_merging=True) masked = deidentify(text, method="mask") # [NAME], [ID], [CARD_NUM], [PHONE] replaced = deidentify(text, method="replace") # 患者李志强,身份证号110101196503151789,医保卡号SH201800654321,电话13901234567。

注意看 use_smart_merging=True 这个参数。它不是默认开启的,但非常重要。很多 NLP 工具的 PII 识别会把"110101196001011234"拆成碎片——"110101""1960""0110""1234"各成一个实体。这在实际使用中是废的。OpenMed 的智能合并让它保持为一个完整的身份证号和电话号码。

这个细节,说明作者真的在医疗行业干过。


// 1000+ 模型是亮点,但不是最亮的

OpenMed 的 Hugging Face 仓库里有 1000+ 个精选的生物医学和临床模型。几个核心的:

模型识别类型典型场景参数
disease_detection_superclinical疾病、症状、诊断病历结构化、入组筛选434M
pharma_detection_superclinical药物、剂量、治疗方案用药审核、安全监测434M
anatomy_detection_electramed解剖结构、器官影像报告解析109M
gene_detection_genecorpus基因、蛋白质精准医学、基因组学109M
pii_superclinical_large姓名、日期、身份证、电话等HIPAA/GDPR 合规去标识化434M

Privacy Filter 系列(基于 OpenAI 开源的 gpt-oss 架构)有三个变体:OpenAI 原版 → NVIDIA Nemotron 微调版 → OpenMed 多语言版。每个都有 PyTorch/MLX/MLX 8-bit 三套权重。总计 247 个 PII 检测检查点,覆盖 12 种语言。

但说实话,1000+ 模型这个数字本身对我来说不是最吸引人的点。Spark NLP 有 13 万个模型,AWS 和 Google 的模型更多。真正让我觉得这个项目"能成"的,是三件事:

1. 12 种语言的 PII 检测。 中文虽然还不是一等公民,但葡萄牙语、阿拉伯语、印地语、日语、土耳其语这些"冷门"语言已经覆盖了。不是"英语项目顺便支持其他语言",而是把多语言当核心功能做的。

2. Apple Silicon 原生支持。 MLX 后端在 Apple Silicon 上推理速度是 CPU PyTorch 的 24-33 倍。批量处理吞吐量最高提升 3.3 倍(CPU)和 2.2 倍(MLX)。OpenMedKit 是完整的 Swift 包,可以直接集成到 iOS/iPadOS/macOS 应用里。做医疗 AI 的人都知道,医生用的设备大概率是 iPad。

3. 作者有 7 年医疗 NLP 实战经验。 开源项目最怕的不是代码写得不好,是作者不懂这个领域。Maziyar Panahi 在 Spark NLP 七年把医疗 NLP 模型送进了辉瑞、罗氏、克利夫兰诊所。他不是在"玩玩"。


// 架构:四步流水线

📋
临床文本病历/影像报告/出院小结
🧠
OpenMed EngineDeBERTa-v3 / PubMedBERT / BioELECTRA
🔍
实体识别 + PII 检测Smart Merging · 12 语言 · HIPAA 全标识符
🔒
结构化 + 去标识化Mask / Replace / Hash / Date Shift
全部在本地设备完成 —— CPU · CUDA · MLX · CoreML 四后端自适应

// 性能基准

12 基准 SOTA 覆盖
10/12 · 83.3%
疾病/化学 F1 提升
+2.70pp (BC5CDR)
基因/细胞系 F1 提升
+5.3 ~ +9.7pp
MLX vs CPU 加速比
24-33x (Apple Silicon)
批量处理吞吐提升
CPU: 3.3x · MLX: 2.2x
训练碳足迹
<1.2 kg CO2e

// 竞品对比

方案定位本地运行开源医疗专用iOS 支持备注
OpenMed 本地医疗 NER + PII ✅ Apache-2.0 ✅ 1000+ 模型 ✅ OpenMedKit 12 基准 10 SOTA
Spark NLP 全栈 NLP(含医疗) ✅ 企业版 部分开源 ✅ 13 万+ 模型 商业支持强,安装门槛高
scispaCy 生物医学 NLP 中等 学术界首选,轻量
medspaCy 临床 NLP 中等 Beta 阶段,社区较小
AWS Comprehend Medical 云端医疗 NLP 需要 BAA 协议,按量计费
Google Cloud Healthcare 云端医疗 NLP 数据上传至 GCP
Azure Text Analytics for Health 云端医疗 NLP 数据上传至 Azure

Spark NLP 是 OpenMed 最直接的竞争对手,但关系更像是"上一代平台 vs 下一代工具"。Spark NLP 胜在全——Java/Scala/Python 都支持、13 万个模型、商业支持。但安装门槛高(需要 Java 环境),部署偏服务器端,真正的医疗专用功能在企业付费版里。scispaCy 和 medspaCy 是学术界好选择——轻量、免费、基于 spaCy——但模型精度和数量跟 OpenMed 不在一个量级。

三大云厂商精度不低,但每次调用都意味着患者数据离开医院网络。OpenMed 在精度上不输商业方案(12 基准 10 SOTA),在合规上天然占优(数据不出设备),而且 Apache-2.0 完全免费可商用。


// 综合评分

VERDICT · 综合评分
8.3/10
值得关注 · 方向完全对 · 单人维护是最大风险
👍 亮点:
• 100% 本地运行,零数据上传——这是医疗 AI 的底线,不是加分项
• 作者 7 年 Spark NLP 实战经验,不是"玩玩"的项目
• 12 基准 10 个 SOTA,轻量训练方案性价比极高
• Apple Silicon MLX 24-33x 加速 + 原生 iOS/macOS(OpenMedKit)
• 12 语言 PII 检测 + HIPAA 全 18 安全港标识符
• Apache-2.0 完全免费可商用
👎 短板:
• Bus Factor = 1,单人维护是核心风险,没有之一
• 65 Issues / 19 PRs 积压,作者精力有限
• 强项是 NER + PII 检测,不是 Med-PaLM 那种临床问答大模型
• 中文临床 NER 还不是一等公民
• 2800 Star 说明社区还在早期,真实医院案例待验证

// 跟我在做的事有什么关系

我每天跑 GitHub AI 日报,偶尔会有读者问:你能不能别只写代码工具,写点其他行业的?其实我也想。但有一个现实的问题:不是每个行业都能在"数据不出本地"的前提下用 AI。

OpenMed 让我看到了一种可能性——在一个对数据安全要求最严格的行业里,有人用本地优先的方案,做到了不输商业产品的效果。

这个思路和我现在做的内容创作工具是通的。我做 MangaVideo(AI 短剧流水线)的时候,最头疼的其实是配音环节。把稿子喂给一个云端 TTS 服务,生成语音,没问题——但我的稿子是我的知识产权。如果每天都把几十份稿子传到云上,哪天服务条款一改,我的内容安全谁来保证?OpenMed 的答案很直接:把模型下载下来,在自己的设备上跑。不需要信任任何人。

VoxCPM2(清华 OpenBMB 的本地 TTS 大模型,我上个月写过)也是这个思路。48kHz 录音棚级输出,完全本地运行。如果"本地 AI + 行业垂直"这个模式能在医疗这个最难攻克的领域站稳脚跟,那它在内容创作、法律服务、财务审计这些领域只会更容易。这也是为什么我愿意花时间写一个只有 2800 Star 的项目。


GitHub — maziyarpanahi/openmed
OpenMed 官网 — openmed.life
arXiv 论文 — OpenMed NER (2508.01630)
Hugging Face 模型仓库 — @OpenMed
PyPI — openmed
PII 检测完整指南 (Jupyter Notebook)


我会持续记录一个不会编程的产品经理如何用 AI 写代码、做开源工具、搭 AI 视频流水线,也会每天跑 GitHub 挖掘真正值得看的 AI 开源项目。如果你不想错过下一篇,可以关注我——我不写"保姆级教程",只写那些我自己试过、花过时间、觉得值得让你也知道的判断。