Dify敏感词过滤设置指南|内容安全审查教程
在Dify中配置敏感词过滤时,必须将其置于工作流起点——即在用户输入接触大模型之前完成拦截。原因在于,一旦模型处理了包含违规意图、违法信息或高危业务术语的内容,后续的拦截措施无法消除上下文污染,越狱响应、隐私泄露乃至监管处罚的风险将直接暴露。
部署前置敏感词检测节点
操作流程简明:登录Dify控制台 → 进入目标应用 → 点击「工作流编排」→ 在「开始节点」后方拖入一个「Python代码节点」。然后将以下标准过滤器代码粘贴进去——注意词表路径需改为实际存放位置。
from dify_sensitive import SensitiveFilter
filter_engine = SensitiveFilter(
wordlist_path="/app/config/finance_keywords.txt",
enable_regex=True,
regex_patterns=[r"年化收益率.*?超过d+%", r"保本保息", r"1[3-9]d{9}"]
)
if filter_engine.contains_sensitive($inputs.query):
raise ValueError("触发监管关键词熔断:禁止输出")
强制要求:finance_keywords.txt 必须预先上传至Dify应用的 /config 目录,且文件编码必须是 UTF-8 无BOM,否则会导致运行时错误。
配置多模式识别策略
敏感词识别不应依赖单一手段,三种策略协同使用才能确保可靠性。
策略一:关键词黑名单——适用于固定不变的禁用词,例如“代客理财”、“配资”、“杠杆”。在Python节点中直接定义列表,通过 any(kw in $inputs.query for kw in forbidden) 进行判定,简洁高效。
策略二:正则表达式匹配——专门应对结构化敏感信息,如身份证号。使用 import re; re.search(r"d{17}[dXx]", $inputs.query) 即可捕获类似“11010119900307291X”的完整号码。该方法比字符串匹配更能抵抗变体绕过,因为不同格式的输入仍能被识别。
策略三:白名单例外机制——防止误伤业务关键词。典型场景:用户提及“苹果手机”可放行,但单独出现“苹果”可能指向敏感内容。此时需增加逻辑判断:if "苹果" in $inputs.query and "手机" not in $inputs.query: → 触发拦截。这样既保留了正常业务词汇,又避免了误报。
绑定审计日志与熔断响应
检测配置完成后,必须构建完整的闭环链路,确保可追溯、可停止、可上报。
第一步:启用审计日志增强模式
进入应用设置 → 「高级配置」→ 勾选「启用审计日志增强」→ 保存。此操作虽简单,但不可省略,否则后续事件排查将变得极为困难。
第二步:配置Level-1知识边界熔断
在RAG检索节点后添加一个「条件判断」节点,设定规则:$retrieval_results.confidence_mean < 0.35 → 分支跳转至「返回标准话术」节点。话术内容可设置为:“当前问题超出我的知识范围,已为您转接人工客服。”该机制用于处理模型确实无法回答的提问。
第三步:配置Level-2高危词熔断
在敏感词检测节点内部补充判断逻辑:if any(w in $inputs.query for w in ["代客理财", "配资", "杠杆"]) and not $retrieval_results.chunks: → 抛出异常并自动推送告警至风控看板。操作上仅需打开日志开关并连接条件分支。但需特别注意:若跳过Level-1的置信度判断,系统将无法区分“模型不懂”与“检索失败”,导致大量正常提问被错误归类为风险事件,反而引发新的运维难题。
