
如何构建本地PII脱敏工具用Electron与Tauri开发OpenMed桌面应用完整指南【免费下载链接】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/openmedOpenMed 是一款本地优先local-first的医疗 AI 脱敏工具内置临床命名实体识别Clinical NER与 HIPAA PII 脱敏能力可 100% 在设备端运行患者数据绝不离开你的网络。本文带你用 Electron 与 Tauri 两大桌面框架把它变成一款开箱即用的本地脱敏桌面应用。为什么本地脱敏是刚需医疗文本病历、短信、日志中遍布姓名、手机号、出生日期等 PHI受保护健康信息。传统做法把文本发到云端 API 处理但合规要求数据不出网。OpenMed 的解法很直接把模型和推理都搬进桌面进程本地识别、本地打码、本地输出。官方演示网站右侧的面板就是典型的本地脱敏效果pii.detect() · on-device检测出的实体被标注为[NAME]、[ID]、[DATE]、[PHONE]底部状态栏显示 0 bytes left device——零字节出网。要动手开发只需克隆源码仓库git clone https://gitcode.com/GitHub_Trending/ope/openmed两条技术路线Electron 还是 TauriOpenMed 为桌面开发提供了两套官方集成包都自带安全边界设计维度 Electron 方案️ Tauri 方案核心包js/openmedkit-electron/js/openmedkit-tauri/运行模型主进程 独立 utility 工作进程Rust 宿主托管 Python sidecar 子进程模型加载本地 Transformers.js 导出ONNXPyInstaller 打包的自包含 sidecar通信协议Electron 私有 IPC 通道换行分隔 JSONNDJSONstdin/stdout用户环境要求仅需 Node ≥ 20终端用户无需安装 Python参考示例examples/electron/redact-app.mdexamples/tauri/redact-app.md一句话总结Electron 路线开发体验快、生态成熟Tauri 路线安装包小、内存占用低且由 Rust 可信宿主牢牢锁住模型路径。两条路线的安全哲学一致——渲染进程网页界面只能提交文本绝不能选择本地文件路径或发起网络请求。OpenMed 桌面脱敏的核心体验下面这张桌面 移动端演示截图展示了同一套本地推理能力输入一段含患者姓名、SSN、地址、医保号的合成病历应用在本机下载模型后实时识别左侧列出每个实体及其置信度右侧给出打码后的文本。这正是你要构建的目标形态。脱敏输出的最小单元是OpenMedSpan包含实体在原文中的起止偏移、实体类型如PHONE、PERSON、标准标签与置信度分数。界面层拿到 span 列表后做展示或替换例如Patient Alice Nguyen渲染为Patient [PERSON]。Electron 路线四步搭好隐私安全的 IPC 脱敏服务Electron 方案的设计核心是 js/openmedkit-electron/src/main-service.ts 中的ElectronDeidentifyService创建专用离线会话session.fromPartition生成一个独立分区其请求拦截器会取消该会话下的一切网络请求从机制上杜绝推理进程联网。fork 一个 utility 工作进程推理在独立进程内运行强制HF_HUB_OFFLINE1离线模式崩溃或被杀不会影响主窗口。注册受信 IPC 通道registerElectronDeidentifyIpc只在openmed:deidentify单一通道上处理请求且每个调用方都要通过isTrustedSender校验限定为指定窗口的主框架。预加载桥接用contextBridge把createElectronDeidentifyClient暴露到页面同时保持contextIsolation: true、禁用nodeIntegration。界面层最终只需一个调用const result await window.openmed.deidentify(note); // result.spans: 本地识别出的实体区间与标签请求体带requestId做幂等关联单条文本上限 100 万字符、并发上限 16、默认超时 2 分钟——越界请求直接拒绝而不是报错后重试。完整可运行的主进程、预加载与渲染层代码都在 examples/electron/redact-app.md 中配套深度解析见 docs/runtimes/electron.md。Tauri 路线Rust 可信宿主 Python sidecarTauri 方案把信任边界画在 Rust 层参考 examples/tauri/redact-app.md构建自包含 sidecar用 PyInstaller 把 scripts/openmed_sidecar_entry.py 打成单文件可执行内置 Python 运行时——终端用户无需安装 Python模型权重作为独立应用资源从磁盘加载。Tauri 注册三个有界命令ping、deidentify、shutdown。模型绝对路径由 js/openmedkit-tauri/src-tauri/sidecar_command.rs 中的OpenMedSidecarState::with_model在 Rust 侧固定渲染进程的任何消息都无法改变它。单例序列化请求Rust 包装器通过一个长驻子进程串行转发请求让 Python 运行时复用同一份离线模型缓存进程被杀返回SIDECAR_TERMINATED、并发调用返回SIDECAR_BUSY、超时返回SIDECAR_TIMEOUT任何传输失败都会丢弃子进程后再重启。收紧权限不授予 webviewshell:allow-spawn等直接 shell 权限禁用远程域 IPCPHI 处理页面绝不导航到远程内容。前端调用同样简洁deidentify(note, { policy: hipaa_safe_harbor })返回打码文本与完整 span 记录beforeunload时调用shutdownSidecar()释放模型。协议与错误语义详见 docs/runtimes/tauri.md。性能与安全本地推理不慢本地不等于慢。OpenMed 对批量 PII 脱敏有系统基准batch 路径下单条脱敏吞吐可达 30 文档/秒CPU/TorchMLX 加速版超过 200 文档/秒——对桌面应用逐条处理病历绰绰有余。安全侧的硬性约定两条路线共同遵守零网络推理会话拦截全部出站请求本地模型缺失时报结构化错误绝不回退到云端无 PHI 日志日志只允许固定事件名、安全错误码、span 数量与请求 ID 哈希禁止记录原文、文档 ID 与异常细节失败即关闭fail closed非法 span、越界偏移、重复请求一律拒绝而非降级。选型速查清单️团队已有 Node 技术栈 / 需要最大兼容性→ Electron 方案utility 进程隔离 离线会话双保险在意安装包体积与内存 / 偏好 Rust 宿主→ Tauri 方案sidecar 单文件分发更干净强合规场景HIPAA→ 两者都支持hipaa_safe_harbor策略务必叠加本地 PII 模型而非仅规则deterministicOnly只用于冒烟测试。总结用 OpenMed 构建桌面脱敏工具的关键不是接一个云端 API而是把信任边界写进进程模型Electron 用受信 IPC 离线会话Tauri 用 Rust 宿主锁定模型路径。跟着 examples/electron/redact-app.md 或 examples/tauri/redact-app.md 的参考实现半天时间就能跑出一个数据不出设备的本地脱敏应用。【免费下载链接】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),仅供参考