模型 / 数据集
maziyarpanahi/openmed avatar
maziyarpanahi/openmed

OpenMed:把临床 NER 和 PII 脱敏留在本地,但别把合规也交给它

本地优先的医疗保健 AI:临床 NER 和 HIPAA PII 去识别,100% 在设备上运行。 2,200 多个医疗模型、21 种语言、Apple MLX + Python,无需云,患者数据不会离开您的网络。阿帕奇-2.0。

5,325 个 Star674 个 ForkPythonApache-2.0

秒懂

它是什么?
OpenMed 是一个本地优先的医疗 AI 工具包,提供临床命名实体识别和 HIPAA PII 脱敏,支持 Python、Swift、Android 等接口。它的核心价值在于数据不出网络,但合规责任仍然在部署者身上。
适合谁用?
OpenMed 适合那些已经明确要求患者数据不出本地网络、并且有技术能力自行验证模型和数据集条款的团队,比如医院内部的研究部门或医疗软件开发商。它不适合把 HIPAA 合规当作开箱即用功能的用户,因为 README 明确写了使用 SDK 本身不构成合规。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 Python(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决的不是模型精度问题,而是数据离场问题

医疗文本处理有两个痛点:一是从自由文本里抽出疾病、药物、检查结果这类实体,二是把姓名、地址、病历号这些 PII 抹掉。OpenMed 把这两个任务打包成一个本地优先的运行环境。它的核心主张是,推理过程在你自己控制的硬件上完成,患者数据不需要发到云端。这个定位对医院、诊所和医疗软件开发商有直接吸引力,因为数据出境往往比模型精度更让人头疼。但注意,README 里反复强调,模型下载、远程适配器、遥测路径和用户配置的集成可能使用网络。所以它解决的是核心推理的数据离场,不是整个系统的零联网。

从 analyze_text 到 MCP 服务器:接口比想象中多

OpenMed 的 Python 入口非常简洁。README 给出的 30 秒示例只有两行核心调用:analyze_text 接收一段临床文本和一个模型名,返回实体列表,每个实体带标签、文本和置信度。示例输出显示 DISEASE 和 DRUG 标签,置信度在 0.95 以上。但这只是冰山一角。它还有 Swift 的 OpenMedKit,用于 iOS 和 Apple Silicon 上的 MLX 推理;有 Android 的 Kotlin 库,基于 ONNX Runtime Mobile;有浏览器端的 Transformers.js 导出路径;甚至有 MCP 服务器和工具注册表,方便 agent 调用。接口层的丰富程度说明它不只是给数据科学家用的库,而是想覆盖从移动端到服务端的全场景。

MLX 加速的数字要谨慎看,但方向是对的

README 里有一个性能声明:在 Apple Silicon 上,MLX 运行 Privacy Filter 比 CPU PyTorch 快 24 到 33 倍,单位是每推理步的中位延迟。这个数字很亮眼,但你要注意它只针对 Privacy Filter 这一个模型家族,不适用于所有任务。而且它比较的是 MLX 和 CPU PyTorch,不是和 CUDA GPU 比。如果你在服务器上有 NVIDIA GPU,这个对比就没有参考意义。另一个细节是,MLX 模型名可以回退到 PyTorch checkpoint,但前提是映射和工件存在。这意味着你在 Mac 上开发,到 Linux 服务器上部署,模型加载逻辑可能需要额外配置。加速是真实的,但适用范围有限。

安装与运行:从 pip 到 Swift Package Manager

Python 用户直接 pip install openmed,Apple Silicon 上可以装 openmed[mlx] 扩展。Swift 开发者通过 Swift Package Manager 添加依赖,地址指向 GitHub 仓库,版本从 2.2.0 开始。Android 开发者需要在 settings.gradle.kts 里加 JitPack 仓库,然后 implementation com.github.maziyarpanahi:openmed:v2.2.0。注意 Android 的依赖是 immutable 的 v2.2.0 版本,不是动态版本。模型本身不在 PyPI 包里,需要从 Hugging Face 的 OpenMed 组织下载。README 没有给出具体的模型下载命令,但提到了模型目录和每个模型的条款需要单独审查。这意味着安装 SDK 只是第一步,真正跑起来还要管理模型工件。

合规声明很诚实,但也是最大的坑

OpenMed 在 README 里用大段文字强调,SDK 的使用本身不建立 HIPAA 合规。它说可以配置成瞄准 Safe Harbor 的 18 个标识类别,但专家部署审查仍然是必需的。这句话应该被每个潜在用户读三遍。它承认了两件事:一是模型可能出错,二是法律合规不能靠软件保证。这个立场值得赞赏,但也是实际部署中的最大障碍。如果你的团队没有临床信息学或隐私法律方面的专家,那么 OpenMed 给的只是工具,不是答案。另外,模型和数据集条款各不相同,Apache-2.0 只覆盖 SDK 源码,不覆盖模型。你在生产环境用某个模型之前,必须去 Hugging Face 上看它的许可证是否允许商业使用、是否限制特定人群。

一个明显的局限:模型目录大,但验证责任全在你

仓库描述提到 2200 多个医疗模型和 21 种语言,但 README 里又说 33 种模型支持的 PII 语言。这两个数字不一致,可能是因为模型目录和 PII 语言覆盖范围不同。不管怎样,模型数量多不代表每个模型都适合你的任务。OpenMed 提供的是目录和运行时,不是开箱即用的医疗 AI 服务。每个模型的质量、偏见、对特定临床场景的适用性都需要你自己验证。对于一个小型诊所,这可能是不切实际的工作量。另外,README 提到实验性的 GLiNER 系列支持零样本任务,但用「experimental」这个词说明它还没到生产级稳定。如果你的需求是零样本实体抽取,OpenMed 可能不是最稳的选择。

替代方案:对比 spaCy 和 Presidio 的架构差异

如果你只需要在本地跑临床 NER,spaCy 是更传统的选择。spaCy 是一个通用 NLP 库,你需要自己训练或微调医疗实体识别模型,或者使用现成的 en_core_web_md 这类通用模型。它没有内置 PII 脱敏流程,但可以搭配 Presidio 做 PII 检测和匿名化。Presidio 是一个专门的 PII 脱敏库,它使用模式匹配和机器学习模型,但它不聚焦医疗领域,也没有 OpenMed 那样的临床实体标签体系。关键区别在于,spaCy 和 Presidio 是两个独立的库,你需要自己拼装管线;而 OpenMed 把 NER 和 PII 脱敏整合在一个运行时里,并且提供了模型目录和跨平台导出。但 OpenMed 的模型是预先训练好的,你无法像 spaCy 那样方便地用自己的数据微调。如果你需要定制模型,spaCy 的灵活性更高。

维护成本:版本更新频繁,但升级路径还算清晰

OpenMed 的发布节奏很紧凑,v2.0.0 在 2026 年 7 月 28 日,v2.1.0 在 8 月 12 日,v2.2.0 在 8 月 21 日,三周内三个 minor 版本。这说明项目处于活跃开发期,但频繁更新也意味着你需要跟着升级,否则可能错过安全修复或新模型支持。Android 的依赖用了 immutable 版本,Swift 用了 from: "2.2.0",这要求你手动更新版本号。好消息是 SDK 是 Apache-2.0 许可证,你可以自由修改和分发源码,但模型许可证各不相同,升级时还要重新检查模型条款。长期维护成本不在于代码本身,而在于持续审查模型和合规要求。如果项目停止活跃开发,你仍然能使用现有版本,但新模型和新的合规要求可能无法跟进。

编辑结论

OpenMed 适合那些已经明确要求患者数据不出本地网络、并且有技术能力自行验证模型和数据集条款的团队,比如医院内部的研究部门或医疗软件开发商。它不适合把 HIPAA 合规当作开箱即用功能的用户,因为 README 明确写了使用 SDK 本身不构成合规。也不适合完全不懂模型评估的团队,因为模型下载、远程适配器和遥测路径都可能联网,你需要逐项审查。在采用之前,先确认三件事:你选择的模型在 Hugging Face 上的许可证是否允许你的使用场景;你的部署环境是否真的切断了所有可选网络路径;以及你的验证流程能否覆盖 18 个 Safe Harbor 标识类别的实际输出。OpenMed 的价值在于把本地推理的工程边界画得很清楚,但合规的边界需要你自己画。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记