智谱GLM-5.2和OpenMed把病历脱敏后再分析,140万人数据泄露的教训


隐私,不是一句口号,是一行代码。

一个医疗AI演示,自己跑完整个病历流程,计划、调用工具、写处置方案,全程没看到一个病人的真名。另一边,一家医疗AI供应商这个月刚漏了一百四十万病人的数据,姓名、社保号、诊断全在网上挂着。区别只在于,数据在进模型之前,有没有先在本地把名字抹掉。



GLM-5.2自己跑完了一整套临床流程

这条推文发出来的时候,很多人第一反应是,大模型现在能看病了?但仔细看,Maziyar说的不是模型看病,是GLM-5.2以agent的方式跑完了一个完整的临床案例。agent这个词在这里的意思是,模型自己规划步骤,自己调用外部工具,最后自己写出处置意见,中间不需要人一步步去点。

整个过程分三步。第一步,模型拿到一份原始病历。第二步,模型自己决定需要查什么资料、调什么接口。第三步,模型把查到的信息和病历结合起来,写出一份完整的处置方案。这不是一个聊天对话,是一个自动化的流程。

关键的地方在于,这个流程里用到的所有模型都是开源的,而且全部跑在本地。GLM-5.2负责核心推理,Gemma 4负责拉取结构化的信息模板,OpenMed负责去掉所有能识别个人身份的信息。三个模型分工明确,没有一个需要把数据传到云端去处理。

同一周,Xsolis漏了一百四十万条病人记录

就在同一个月,一家叫Xsolis的医疗AI供应商出了事。根据HIPAA Journal的报道,这次泄露涉及1,396,519名患者,被曝光的资料包括姓名、社保号、诊断信息。不是几十条,不是几百条,是一百四十万条。

这件事有意思的地方在于,Xsolis本身做的是医疗AI,按理说应该最清楚数据安全的重要性。但数据还是漏了。Maziyar在推文里说得很直接,因为数据存在别人的云上。这句话的背后是一个很现实的问题,当你的数据放在别人管的服务器上,你其实是在赌对方不会犯错、不会被黑、不会有人不小心把权限设错。

HIPAA从1996年就立了法,专门管医疗数据隐私。但将近三十年过去了,大规模数据泄露依然在发生。不是因为法律不严,是因为数据流转的链条太长了。每多经过一个系统,就多一个可能出事的环节。

OpenMed在本地把名字抹掉,GLM-5.2全程只看到脱敏文本

Maziyar用的这个方案,逻辑其实很简单。原始病历拿到之后,第一件事不是喂给大模型,是先在本地跑一个去标识化的步骤。这个步骤由OpenMed PII模型完成,它跑在设备上,完全不联网,把病历里所有能指向具体人的信息全部替换掉。名字变成[PATIENT],社保号变成[SSN],地址变成[ADDRESS]。

脱敏之后的文本才交给GLM-5.2和Gemma 4。大模型从头到尾看到的是一份没有名字、没有身份证号、没有具体住址的病历。它只根据症状、检查结果、病史这些医疗信息来做推理和写处置方案。

原始的病历文件从头到尾没有离开过这台机器。Maziyar专门强调了一句话,OpenMed是隐私的第一道防线,100%离线、完全在本地运行,在所有操作开始之前就先跑完。这个顺序很重要,不是先分析再脱敏,是脱敏之后再分析。先脱敏,意味着大模型从一开始就没有机会接触到原始数据。

技术栈拆开看,每一层都在做同一件事

这套流程用到的工具链可以拆成四层。

第一层是去标识化,OpenMed PII跑在MLX框架上,模型格式是ONNX,开源协议是Apache-2.0。
第二层是结构化信息抽取,Gemma 4用llama.cpp跑,负责把病历里的信息按标准格式整理出来。
第三层是核心推理,GLM-5.2通过UnslothAI转成GGUF格式,再用llama.cpp或者Hugging Face的Inference Providers来跑。
第四层是agent循环控制,用Pydantic来管理整个流程的状态和工具调用。

这四层各自干各自的事,但有一个共同点,每一层都可以完全在本地运行。推理用llama.cpp,去标识化用MLX,agent控制用Pydantic的本地版本。这意味着整个链条不需要依赖任何云端API。

Maziyar在另一条回复里补充了一个细节,如果有人用GLM-5.2的官方订阅端点遇到529错误,那是因为走的是别人的服务器。如果自己跑本地版本或者通过Hugging Face的Inference Providers跑,就不会有这个限制。这个差别本质上就是,数据是经过别人的手还是只经过自己的手。

开源解决的是信任问题,本地解决的是数据归属问题

中文评论区里有人问了一个很到点上的问题,医疗这块开源归开源,隐私链路真的不能省。Maziyar用中文回复了这句话,核心意思是,开源解决的是可审计和可自部署,但开源本身不会自动保护隐私。开源大模型你可以看到它的代码,你可以自己部署它,这些降低了信任成本,但没有一条本地隐私链路,数据依然可能被传出去。

本地隐私链路做的事情很简单,把数据和模型之间的接触点控制住。原始数据只在本地设备上存在,模型也只在本地上运行。数据不出设备,就不存在传输过程中被截获的风险,也不存在云端服务器被攻破之后数据被批量拖走的风险。

原始病历一个字都不离开设备,这句话不是修辞,是技术上的事实。因为去标识化在本地完成,之后的每一步处理都只针对脱敏后的文本,原始文件从头到尾没有被上传过。

本地推理不是什么新鲜事,但用在医疗上意义不一样

本地跑大模型这件事,最近半年已经不算稀奇了。腾讯的Hy3出了1-bit和4-bit版本,295B的MoE模型可以用llama.cpp跑在单张GPU上。PrismML发布的Bonsai 27B能在手机上跑,基于Qwen3.6 27B,支持多步推理和结构化工具调用。NVIDIA展示的coding agent用了NeMo RL和NeMo Gym,在本地搭训练环境教视觉模型数星星。

但这些都还停留在技术展示和开发工具的层面。Maziyar这条推文不一样的地方在于,他把本地推理这件事和医疗数据隐私直接绑在了一起。以前讨论本地推理,讨论的是成本、是速度、是部署方便。现在讨论本地推理,讨论的是你的一百四十万条病历数据到底应该放在谁的服务器上。

医疗数据和其他数据不一样。你的购物记录被泄露,最多是收到一堆广告。你的病历被泄露,社保号、诊断信息、用药记录全部暴露,这不是骚扰短信的问题,是你整个人从健康到财务所有维度的信息都被摊开了。


整套流程的核心就一句话,先脱敏再分析

如果把Maziyar展示的这个方案压缩到最简单的一句话,就是先脱敏再分析。这个顺序看起来理所当然,但在实际部署里,很多人为了省事或者为了调用方便,会先把数据传到云端再处理。传上去的那一刻,风险就已经存在了。

OpenMed做的事就是把这个顺序强行扳回来。它强迫你在数据离开本地之前先把该抹掉的东西抹掉。后面的GLM-5.2和Gemma 4再怎么跑,跑的都是已经没有身份信息的文本。即使llama.cpp或者llama.cpp的某个版本有漏洞,即使推理过程中有什么意外输出,暴露的也只是一份不知道是谁的病历。

Maziyar在回复里说了一句话,OpenMed的座右铭就是隐私优先。这句话听起来像口号,但它对应的技术动作非常具体,本地跑、离线、先于一切操作执行。口号只负责提醒你这件事重要,技术负责让这件事自动发生。



医疗数据的隐私保护,从来不是靠相信某家公司会守规矩,是靠技术让数据根本没机会被看到。开源模型降低的是信任成本,本地脱敏解决的是数据归属。一百四十万条记录已经挂在网上了,你的数据还在谁的云上躺着?