OpenMed v2.3.0 发布解析:隐私优先医疗 AI SDK 的 Agent、多模态、本地训练与全平台运行时升级
【免费下载链接】openmedLocal-first healthcare AI: clinical NER & HIPAA PII de-identification that runs 100% on-device. 2,200+ medical models, 21 languages, Apple MLX + Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed
OpenMed2.3.0是稳定版 v2 SDK 的一次全面增量发布:在不移除任何公开 Python 符号的前提下,横向扩展了隐私安全的 Agent 与 Trace 工作流、多模态资产接入、临床证据、本地训练、跨平台运行时、部署适配器与发布加固能力。本文以官方发布说明为主线,结合仓库中的迁移指南、npm 包源码与发布脚本,完整解读该版本的新特性、兼容性边界、安装升级方式、隐私临床约束与验证发布流程,帮助读者理解升级影响并快速落地迁移。
版本信息:openmed/about.py 中声明
__version__ = "2.3.0",发布日期为 2026-09-04。
版本概览与六大亮点
本次发布围绕六条主线展开,全部为增量演进,未破坏既有 Python 公共 API:
- 多模态安全与溯源:有界资产清单(bounded asset manifests)、流式摘要(streaming digests)、媒体类型检测、类型化弃权(typed abstention)、清单配置(manifest profiles)、PDF 保真、本地邮件接入,以及元数据安全的文档抽取。
- Agent 与 Trace 契约:封闭式结果(closed outcomes)、确定性运行摘要、单调时间记录(monotonic timing)、同意核验、保留 schema 的 Trace 脱敏、有界流式与分片、事务性恢复与保真证明。
- 临床证据:确定性证据表、患者记录级 span 过滤、物质使用类 SDOH(社会健康决定因素)抽取,以及无值审查元数据(value-free review metadata)。
- 本地训练:教师集成清单(teacher-ensemble manifests)、联邦轮次生命周期记录、可复现性验证与隐私安全的训练 schema。
- 集成适配器:搜索、批处理、Notebook、编排、数据库、远程函数、Kubernetes、HPA 与自托管服务等可选适配器。
- 端侧与桌面运行时:iOS 扩展、Android 加速器选择、浏览器 PHI 防护、Electron 与 Tauri 桥接、TensorRT、GGUF、WebGPU、MLX 与边缘 SBC 合格化路径。
- npm 脱敏正确性修复:可用的默认 ONNX 模型、Transformers.js 的源偏移对齐、Unicode 安全 span,以及无法对齐无偏移 token 时返回内容无关(content-free)失败。
- 发布加固:确定性 CLI 与 schema 契约、包体积预算、容器摘要策略、镜像安全门禁,并移除了托管模型发布自动化。
兼容性:252 次提交、零符号删除的静态 API 对比
官方发布的兼容性数据基于审定的v2.2.0..v2.3.0发布分支区间:
- 区间内共252 次提交、651 个变更文件,提交主题引用127 个唯一的 issue 或 PR 标识符。
- 静态公开 Python API 从37,735 增长到 41,729 个符号:新增 3,994 个,零删除、零签名收窄、零新增弃用。
- REST 面保持19 个路径、17 个组件 schema不变。
所谓"静态对比",是指不导入包、不执行应用代码,仅解析openmed/导出面。你可以在本地复现同样的对比(脚本位于 scripts/release/api_surface_diff.py):
python scripts/release/api_surface_diff.py \ v2.2.0 HEAD \ --json api-surface-diff.json \ --check docs/migration/2.2-to-2.3.md需要强调的是,Python AST 对比并不覆盖 Swift、Kotlin/Android、JavaScript、CLI、配置、Trace schema、证据记录、模型产物与部署契约,这些面需要单独评审(详见 docs/migration/2.2-to-2.3.md)。npm 调用方尤其要注意默认模型修正、新增原始 token 输入类型与显式对齐失败行为。
安装与升级:Python、npm、Swift、Android、容器全覆盖
发布采用不可变 tag 驱动包与镜像发布。Registry 可用性可能滞后于源码发布(tag 触发的 CI 工作流尚未完成时),因此自动化应在部署前核验所需坐标。
Python
pip install --upgrade "openmed==2.3.0" pip install --upgrade "openmed[hf,fhir]==2.3.0" pip install --upgrade "openmed[mlx]==2.3.0"浏览器与 Node.js
npm install openmed@2.3.0npm 包保持无 scope 命名,同时提供 ESM 与 CommonJS 导出(对应 js/openmedkit-web/package.json 中的module/main/exports配置)。要使用默认 ONNX 模型,需要安装@huggingface/transformers,或注入本地 token-classification pipeline。包将@huggingface/transformers(>=3.0.0)与onnxruntime-web(>=1.20.0)声明为可选 peer 依赖,Node 运行时要求 >=20。
Swift
dependencies: [ .package(url: "https://github.com/maziyarpanahi/openmed.git", from: "2.3.0"), ]Android
dependencies { implementation("com.github.maziyarpanahi:openmed:v2.3.0") }JitPack 解析不可变v2.3.0仓库 tag。OpenMedKit 执行本地推理,且不声明 Android INTERNET 权限——这是"零网络出站"承诺的 Android 侧实现证据。
容器与 Helm
发布后不可变容器坐标为ghcr.io/maziyarpanahi/openmed:v2.3.0。Helm chart 的 app 版本与默认镜像 tag 同步为2.3.0,显式选择发布镜像时使用image.tag=v2.3.0。相关清单可参考 deploy/helm/openmed-service/、deploy/openmed-compose.yaml 与 deploy/k8s/hpa.yaml。
隐私与临床边界:本地优先的默认路径
OpenMed 始终将本地处理作为默认:
- 模型下载与可选远程集成是显式边界;必需产物就位后,核心 PHI 处理不依赖云服务。
- 遥测默认关闭;发布证据使用哈希、计数、偏移与溯源,而非原始标识符。
官方文档同时给出两条边界声明,本文必须原样保留以免误导:
- 脱敏并非零风险:任何去标识化或结构化隐私系统都无法保证零残余风险。必须在实际部署路径上验证直接标识符召回率、泄漏、span 完整性、语言与格式覆盖、策略行为及量化模型差异。
- 临床功能属辅助软件:临床抽取、证据、过滤与映射是辅助软件,不是医疗器械,也不构成临床真值来源。输出必须经合格人员审查,不得自动触发诊断、治疗、计费、数据发布或其他临床决策。
验证与发布:精确提交门禁与已知上游风险
NLTK CVE-2026-81726 已知限制
可选的agents、llamaindex、quickumls、scrubadub依赖树包含 NLTK 3.10.3,其模型工件路径安全公告 CVE-2026-81726 截至 2026-09-14 尚无已发布修复版本。官方声明:OpenMed不调用受影响的模型文件 API,服务镜像不安装 NLTK;但使用这些可选依赖的应用不得将 NLTK 模型导入/导出路径暴露给不可信输入。仓库豁免仅限该 CVE、nltk包与uv.lock目标,2026-09-28 到期,且上游修复版本不能被该策略豁免。
精确提交门禁
通过发布需要精确的 release 提交,通过以下全部检查:
- 仓库、依赖许可、密钥与 action 引用策略;
- 锁定依赖、lint、格式化与完整 Python 测试套件;
- 严格文档、README 翻译漂移、营销暂存与重新生成的 OpenAPI 检查;
- wheel/sdist 构建、元数据、内容、Twine、SBOM 与溯源测试;
- npm 安装、审计、测试、类型检查、构建与 tarball 检查;
- Swift resolve/build/tests 及适用的托管 Apple 平台任务;
- Android AAR 构建/测试、lint、网络拒绝、consumer-rule 与预算检查;
- Helm 默认值与合成值 lint/render 检查;
- 适用的 amd64 与 arm64 容器构建与冒烟任务;
- 对已发布
v2.2.0树的 API 兼容性证据。
托管检查必须引用精确 release 提交,更早源码头上的成功任务不构成发布资格;包发布、容器发布、release 资产与 registry 核验仍是 tag 驱动的后续动作。
模型指针策略
2.3.0 是 SDK 发布,本身不提升任何模型指针。模型转换、评估与发布是显式的本地维护者操作。未来任何指针提升仍需:真实候选、公开的 SHIELD 与 golden 证据、签名抽取门禁,以及最终就绪判定必须精确等于READY。仓库中的 gates/ 目录(如 gates/baseline.json、gates/champion.json)与 scripts/release/ 下的champion_challenger.py、drift_report.py等脚本即支撑这一证据链。
升级清单:2.2 → 2.3 八步迁移
依据 docs/migration/2.2-to-2.3.md,升级步骤如下:
- 仅安装应用实际使用的可选 extras 的
openmed==2.3.0。 - 对每个部署的语言、脚本、文档格式与量化运行时,在合成 fixture 上重跑隐私、直接标识符召回、关键泄漏、span 完整性与确定性安全测试。
- 重新合格化应用自有的多模态资产配置、清单限制、摘要策略、弃权处理与文档解析验收测试。
- 在采用新的机器可读契约前,刷新生成的 CLI、REST、schema、agent-outcome 与 trace 消费者。
- 将 PHI、凭证、受限数据集、许可词汇表、外部模型权重与第三方运行时排除在包及其证据之外。
- 将临床证据、SDOH 抽取、记录过滤、术语映射与训练输出视为需要合格审查的辅助证据,不得触发诊断、治疗、计费或发布。
- 在实际部署平台上逐一演练每个启用的桌面、浏览器、Android、Apple、TensorRT、WebGPU、搜索、批处理或集群适配器。
- 在推出新运维面之前,审查容器、Helm、Kubernetes operator、HPA、sidecar 与远程函数策略。
npm 契约细节:默认模型、原始 token 类型与偏移对齐
这是 2.3 中 JavaScript 侧行为变化最集中的地方,官方发布说明要求 npm 调用方重点核对。
默认模型与加载器
npm 默认模型现在为OpenMed/OpenMed-PII-ClinicalE5-Small-33M-v1-onnx-android,导出为DEFAULT_MODEL_ID(见 js/openmedkit-web/src/index.ts 第 129-130 行)。-onnx-android仓库使用根级 INT8 加载器:源码中defaultModelLoaderFor()通过正则/ -onnx-android$/i匹配仓库名,命中时走loadOnnxModel(INT8 变体model_int8),否则走通用loadTokenClassificationPipeline。模型下载与本地推理是分离的;可通过localFilesOnly/allowRemoteModels控制下载行为(js/openmedkit-web/src/model-loader.ts)。
类型契约:旧数值偏移保留、新原始输入可选偏移
- 既有
TokenClassificationEntity、TokenClassificationPipeline与模型加载器输出保留 v2.2 的数字start/end契约。 - 新增的
RawTokenClassificationEntity、RawTokenClassificationPipeline与RawTransformersRuntime类型接受可省略偏移的运行时输入(类型定义见 js/openmedkit-web/src/types.ts 第 109-122 行)。 - 调用
alignTokenOffsets(text, tokens)可将原始 token 转换为带对齐偏移的实体;模型加载器在返回 pipeline 输出前自动完成此转换。 - 最终
OpenMedSpan偏移仍是必填项,使用JavaScript UTF-16 索引。
对齐失败必须显式报错,绝不能静默漏脱敏
extractPii()保留Otoken 以保证顺序对齐。显式 pipeline 偏移原样保留;缺失偏移时按大小写/重音与 token 标记归一化重建。未知或无法对齐的 token 会抛出内容无关错误,而不是静默省略脱敏 span(见 js/openmedkit-web/src/offsets.ts 的alignmentError():"Token offset alignment failed; provide source offsets.")。
从实现看,对齐算法做了三重鲁棒性设计:大小写与重音不敏感(normalizeString做小写 + NFD 分解 + 去组合标记),兼容 WordPiece(##)、SentencePiece(▁)与 byte-level BPE(Ġ)标记,并在 token 索引跳变(如[UNK]或 ignore_labels 丢弃)时放宽为窗口内搜索(CONTIGUOUS_SEARCH_WINDOW = 16)。Unicode 层面按码点归一化、但对外输出 UTF-16 偏移。
对自定义分词器或被过滤的输出,正确姿势是:提供精确的源偏移,并把对齐错误当作一次失败的扫描处理——绝不能当作"文档无 PII"的证据。
端到端调用示例
import { extractPii, deidentify, loadOnnxModel } from "openmed"; // 方式一:默认模型 + @huggingface/transformers const spans = await extractPii("Patient Jane Doe called 555-0100.", { docId: "note-1", threshold: 0.5, }); // 方式二:显式注入本地 pipeline(离线) const pipeline = await loadOnnxModel("file:///models/my-model", { localFilesOnly: true, }); const result = await deidentify("Jane Doe was seen yesterday.", { pipeline, replacement: (span) => `[${span.canonical_label}]`, }); console.log(result.deidentifiedText);迁移后的新契约:多模态、Agent/Trace 与训练
从迁移指南可以确认三组新契约的落地语义:
- 多模态接入与溯源:有界资产清单、流式摘要、媒体类型检测、类型化弃权、确定性清单配置、PDF 版式与保真工具、本地邮件处理,以及更多文档格式的隐私安全文本抽取与脱敏。这些 API 对格式错误或无界输入采用"失败关闭"(fail closed)策略。调用方应保留调用者拥有的流语义,使用声明的尺寸与摘要限制,只保留审查所需的元数据、偏移、哈希与聚合证据。
- Agent、Trace 与训练契约:Agent 运行获得封闭结果码、确定性摘要、单调时间记录、同意核验结果与 PHI 安全失败原因;Trace 工具新增本地发现、保留 schema 的脱敏、流式与并行执行、事务性恢复、保真检查与训练 schema 适配器。训练侧新增教师集成清单、确定性联邦轮次记录与可复现性验证。这些是增量契约,但下游 schema 消费者应在启用前刷新快照并显式处理新的封闭词表。
- 集成与运行时边界:OpenSearch、Elasticsearch、Spark、Beam、Airflow、LlamaIndex、PostgreSQL、dbt、仓库远程函数、Kubernetes、浏览器扩展、Electron、Tauri、Android 加速器、TensorRT、GGUF、WebGPU 均以可选适配器形式加入。外部进程、集群、浏览器、数据库、模型文件与凭证是显式信任边界。MedCAT 桥接保持在进程外,不安装受限依赖,并要求显式确认其第三方许可。核心本地处理不新增强制网络或遥测路径。
小结
OpenMed 2.3.0 的定位是"兼容优先的横向扩展":Python 公共面零删除、REST 契约不变,同时把多模态安全、Agent/Trace 契约、临床证据、本地训练、跨平台运行时与发布加固做深做透。升级者应重点处理三类动作:一是按八步清单重跑隐私与保真测试;二是 npm 侧核对默认模型、原始 token 类型与显式对齐失败语义;三是把临床与训练输出继续限定在"辅助证据"边界内,并遵守 NLTK CVE 的已知限制与豁免期限。更多细节可继续阅读 docs/migration/2.2-to-2.3.md、docs/release/v2.2.0.md 与 npm 包源码 js/openmedkit-web/src/。
【免费下载链接】openmedLocal-first healthcare AI: clinical NER & HIPAA PII de-identification that runs 100% on-device. 2,200+ medical models, 21 languages, Apple MLX + Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考