Dify 工作流中敏感数据输出如何脱敏处理怎么配置?

文章导读
Dify 工作流原生没有独立的全局敏感数据脱敏开关,需通过工作流中的代码节点编写正则规则或调用外部脱敏接口处理。适用场景为包含手机号、身份证、邮箱的结构化数据输出,风险边界是正则规则覆盖不全可能导致漏脱敏。
📋 目录
  1. 快速处理思路
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

Dify 工作流原生没有独立的全局敏感数据脱敏开关,需通过工作流中的代码节点编写正则规则或调用外部脱敏接口处理。适用场景为包含手机号、身份证、邮箱的结构化数据输出,风险边界是正则规则覆盖不全可能导致漏脱敏。

先说结论:在 Dify 开放源码版本中,敏感数据脱敏属于应用层逻辑,需要用户在工作流中显式配置处理节点。

  • 适合:需要在 LLM 输出后、返回给用户前拦截并修改特定格式数据的场景。
  • 优先做:使用代码节点(Code Node)编写正则替换逻辑,避免直接输出原始敏感信息。
  • 再验证:通过发布后的测试对话检查最终返回文本,确认敏感字段已被掩码覆盖。

快速处理思路

在不依赖外部付费服务的前提下,最稳妥的方案是在工作流末端增加一个代码节点。该节点接收上游 LLM 或工具的输出,通过 Python 或 JavaScript 正则匹配敏感模式,替换为星号或固定字符后,再连接到最终输出节点。

为什么会这样

Dify 定位为应用编排平台,默认信任工作流内节点产生的数据内容。平台本身提供传输加密和存储加密,但不会主动解析应用层业务数据的具体内容来进行脱敏。因此,数据隐私保护责任落在工作流设计者身上,需要在数据流出前通过逻辑节点进行清洗。

Dify 工作流中敏感数据输出如何脱敏处理怎么配置?

分步处理

第一步,在工作流编辑页面,找到 LLM 生成节点或工具调用节点之后的连线。第二步,添加一个代码节点,选择 Python 或 JavaScript 运行环境。第三步,在代码编辑区编写正则替换逻辑,例如匹配手机号模式并替换中间四位。第四步,将代码节点的输出变量连接到最终的“结束”节点或“回复”节点。

import re
def main(arg1: str) -> dict:
    # 示例:脱敏手机号
    pattern = r'(\d{3})\d{4}(\d{4})'
    masked = re.sub(pattern, r'\1****\2', arg1)
    return {"result": masked}

注意代码节点返回的字典键名需与下游节点期待的变量名一致。如果工作流涉及多个敏感字段,建议在代码节点内集中处理,减少节点数量以降低延迟。

怎么验证是否生效

发布工作流后,在预览窗口或已发布的应用界面输入包含敏感信息的测试用例。检查最终回复内容中,手机号、身份证等字段是否已变为掩码。同时查看应用日志,确认日志中记录的是脱敏后的数据还是原始数据,部分日志配置可能仍会记录原始输入。

Dify 工作流中敏感数据输出如何脱敏处理怎么配置?

常见坑

正则规则过于简单可能导致误伤,例如将普通数字序列误判为手机号。代码节点执行超时会影响整体响应速度,复杂脱敏逻辑建议放在外部 API 处理。中文编码问题可能导致替换后的字符串出现乱码,需确保代码文件保存为 UTF-8 格式。

常见问题

Dify 是否有自动脱敏插件?

目前公开版本没有内置一键自动脱敏插件,需手动配置代码节点逻辑。

Dify 工作流中敏感数据输出如何脱敏处理怎么配置?

脱敏处理会影响日志记录吗?

工作流内的脱敏只影响输出内容,后台审计日志是否记录原始数据取决于平台部署配置。

如何处理非结构化文本中的敏感信息?

非结构化文本难以用正则完全覆盖,建议结合第三方隐私计算 API 或在 Prompt 中要求模型不输出敏感信息。

参考来源

Dify 官方 GitHub 仓库,页面标题:Dify.ai - Source Code,URL:https://github.com/langgenius/dify