OpenMed React Native实战:移动端App内设备侧NLP与医疗脱敏集成完整指南
【免费下载链接】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
OpenMed 是一个本地优先(Local-first)的医疗 AI 开源项目,提供临床 NER(命名实体识别)与 HIPAA PII 脱敏能力,并支持 100% 设备侧运行。本文面向移动端新手,手把手讲解如何用 React Native 桥接层把 OpenMed 的设备侧 NLP 模型集成进你的 App:患者数据全程不出设备,无需云端服务。
为什么移动 App 需要"设备侧 NLP + 脱敏"
传统做法是把临床文本上传云端做实体识别和脱敏,这会带来两个问题:
- 隐私合规风险:患者数据(姓名、日期、地址等直接标识符)离开设备网络,难以满足 HIPAA 等要求;
- 离线与网络依赖:弱网、飞行模式下功能不可用。
OpenMed 的解法是把 2,200+ 医疗模型、21 种语言的语言理解能力直接跑在终端上。React Native 桥接层(位于 js/openmedkit-react-native/)让 TypeScript 层的业务代码通过 4 个异步 API 调用原生推理引擎,桥接内部实现见 js/openmedkit-react-native/src/index.ts。
React Native 桥接架构:3 层文件各司其职
| 层级 | 文件 | 职责 |
|---|---|---|
| TypeScript API 层 | js/openmedkit-react-native/src/index.ts | 统一 4 个导出函数、规范化返回的 span 结构 |
| iOS 原生桥 | js/openmedkit-react-native/ios/OpenMedKitRN.swift | 以OpenMedKitRN模块名注册,后台队列执行推理 |
| Android 原生桥 | js/openmedkit-react-native/android/OpenMedKitRnModule.kt | 基于 Kotlin 协程异步加载模型与分析 |
一个关键设计是后端自动按平台选择:iOS 默认走 Apple MLX,Android 默认走 ONNX Runtime(见 默认后端逻辑),业务代码不用关心平台差异。
快速上手:4 步完成设备侧 NLP 集成
第 1 步:加载模型(loadModel)
首次调用loadModel传入模型路径即可,相同cacheKey会直接命中缓存,不重复加载:
await loadModel({ modelPath: "/models/openmed-pii", backend: "mlx", // iOS 用 mlx/coreml,Android 用 onnx cacheKey: "mlx:/models/openmed-pii", });模型文件需预先放在应用沙盒目录(可随安装包内置,保证离线可用)。
第 2 步:识别临床实体(analyzeText / extractPii)
analyzeText:提取全部临床实体,如症状、用药、检查、解剖部位;extractPii:只提取隐私标识符,默认开启智能合并(useSmartMerging),把"姓名 + 地址"这类相邻实体合并处理。
两者都返回结构统一的 span 列表,支持confidenceThreshold置信度过滤。
第 3 步:按合规策略脱敏(deidentify)
deidentify一步完成"识别 + 替换",返回脱敏后文本与每个实体的处置动作(redact/replace/mask等)。不传策略时默认使用hipaa_safe_harbor(HIPAA 安全港)策略,开箱即合规。
官方提供了一个可直接参考的脱敏界面示例 examples/react-native/RedactScreen.tsx,演示了"加载模型 → 脱敏 → 展示前后对比"的完整流程。
返回结果解读:脱敏 span 里有什么
每次调用返回的 span(类型定义)都带合规语义,便于审计:
- policy_label:
DIRECT_IDENTIFIER(直接标识符)/QUASI_IDENTIFIER(准标识符,如日期、邮编)/CLINICAL_CONCEPT(临床概念,如病症); - text_hash:原文片段只回传 HMAC-SHA256 哈希,JS 层拿不到敏感原文,天然防泄漏;
- action + replacement:记录每个片段被如何处置,可写审计日志。
这一套 span 协议在 iOS(Swift)、Android(Kotlin)、Flutter 桥之间保持完全一致,跨端测试见 tests/mobile/test_rn_bridge_parity.ts。
选型与性能小贴士
📌模型选型:小参数 PII 模型适合手机常驻加载;大模型留给服务端,React Native 端只加载轻量模型即可。
📌首次加载体验:loadModel是异步的,建议放在应用启动的空闲期预热,避免用户点击时卡顿。
📌批量处理:多条文档循环调用时,复用已加载的模型(cacheKey 命中),避免重复初始化。项目提供的基准测试数据可帮助你评估吞吐:
相关文档与源码路径速查
- 📖 移动端示例总览:docs/examples.md
- 🗺️ 平台运行时能力地图(含 React Native 桥):docs/feature-map.md
- 🍎 iOS 端原生包:swift/OpenMedKit/
- 🤖 Android 端原生包:android/openmedkit/
- ✅ 桥接 API 公开契约快照:tests/mobile/snapshots/openmedkit-react-native-public-api.json
总结
通过 React Native 桥接层,你只需 3 个 API(loadModel→extractPii/analyzeText→deidentify),就能把 OpenMed 的设备侧 NLP 与 HIPAA 脱敏能力装进移动 App:零云端依赖、患者数据不出设备、跨 iOS/Android 行为一致。对于医疗类 App 开发者来说,这是兼顾性能与合规的一条低门槛路径。
【免费下载链接】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),仅供参考