游乐游手机版
首页/AI热点日报/热点详情

Dify海量敏感历史数据本地脱敏后RAG检索方法

类型:热点整理2026-08-06
在Dify工作流中预置medical_anonymize函数,利用自定义Python节点和脱敏补丁包对身份证、手机号、姓名等敏感字段进行上下文感知脱敏。分阶段导入样本文件并验证脱敏效果,确保RAG检索精度与隐私安全达到平衡。

处理百万级含有身份证号、手机号、患者姓名等敏感字段的医疗政务文档,是一项令人头疼的任务——既要确保脱敏后不泄露个人隐私,又不能破坏语义的连贯性,否则RAG检索精度会大幅下降。幸运的是,借助Dify的自定义Python节点与专门的脱敏补丁包,可以在这个问题上找到理想的平衡点。

核心思路其实并不复杂:在Dify工作流中预置一个名为medical_anonymize的函数,对三类敏感信息进行上下文感知的脱敏处理,让RAG检索精度与隐私安全达成一种博弈后的均衡状态。

准备本地脱敏环境

首先确认Dify是否已启用自定义Python节点功能。该功能默认处于关闭状态,需要前往管理后台的「设置→高级配置」中,勾选“允许执行用户自定义代码”——如果这一步不做,后续所有脱敏逻辑都无法注入工作流。

然后安装脱敏补丁包,建议将版本号锁定为2.4.1:pip install dify-safety-patch==2.4.1。这个包内置了中文姓名、18位身份证号、11位手机号的正则模板,还具备上下文感知截断保护机制,比手写正则更能抗误伤。手写正则的问题在于,姓名和地址中的汉字容易相互干扰,处理不当就会误伤大量正常内容。

【必须验证】在Dify沙箱中先运行一次测试脚本,确认re.sub能正确匹配u4e00-u9fa5范围内的汉字。这个步骤很多人会跳过,但真遇到问题才知道它有多重要——部分旧版Dify容器未加载完整的Unicode表,姓氏脱敏会直接失败,而且是静默失败,不报错,只是结果不对。

构建带脱敏的预处理工作流

进入Dify「工作室→新建工作流」,选择「数据预处理」模板,不要使用空白模板。该模板已经预置了文本清洗和编码校验节点,能有效避免UTF-8乱码污染后续的向量化流程。

在「文档解析」节点后面插入「自定义Python节点」,粘贴脱敏逻辑:

from dify_safety_patch import medical_anonymize
output_text = medical_anonymize(input_text)

这里有一个值得专门说明的坑:不要自己编写多个re.sub进行轮番替换。多轮正则替换会导致星号叠加,比如“张***三”再脱敏一轮就变成“张******三”,数据越处理越乱。dify-safety-patch内部已经做了冲突规避,直接使用即可。

分阶段导入与验证

脱敏逻辑编写完成后,不要急着把百万级文档一股脑全部灌入,建议分阶段进行。

第一步,上传10份带敏感信息的样本文件,PDF和DOCX各5份,触发工作流执行。

第二步,在知识库列表页找到刚生成的知识库,点击「查看原始文本」,核对三类字段的脱敏效果:
• 身份证显示为“110101******1234”,前6位后4位保留
• 手机号显示为“1*********0”,首尾保留
• 姓名显示为“王**”“李**”,双字名不显示中间字

第三步,发起一个测试提问,例如“张伟的就诊记录在哪里”,观察检索结果能否命中脱敏前包含“张伟”的原始段落。这一步是检验脱敏是否过度的关键——如果未命中,说明脱敏破坏了检索关键词的锚点,需要退回Python节点,调整anonymize函数中的保留策略。

验证通过后,再分批导入剩余文档。整个过程就像给数据做一次精密的安检,既要拦截敏感信息,又不能妨碍正常信息的流通。

来源:https://www.php.cn/faq/2936325.html?uid=1589237

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。