Dify 内容审核-OpenAI 审核实现详解

张开发
2026/4/21 3:38:10 15 分钟阅读

分享文章

Dify 内容审核-OpenAI 审核实现详解
## 功能概述OpenAI 审核是 Dify 内置的智能内容审核方案利用 OpenAI 官方的 Moderation API 进行高精度的内容合规检查。通过机器学习模型能够理解复杂的语义并支持多种语言。核心特性实现细节数据结构文件: api/core/moderation/openai_moderation/openai_moderation.pyclassOpenAIModeration(Moderation):name:stropenai_moderation# 策略标识# 从基类继承# self.app_id - 应用 ID# self.tenant_id - 租户 ID# self.config - 配置字典配置验证方法:validate_config()classmethoddefvalidate_config(cls,tenant_id:str,config:dict):# 验证基础结构必须启用输入或输出审核cls._validate_inputs_and_outputs_config(config,True)# 检查 OpenAI 账户是否配置# 在实际调用时执行验证约束:约束项说明至少启用一个输入或输出审核必须至少启用一个预设响应可选≤100 字符API Key需要配置 OpenAI API Key核心审核逻辑方法:moderation_for_inputs()defmoderation_for_inputs(self,inputs:dict,query:str)-ModerationInputsResult:# 1. 初始化结果flaggedFalsepreset_response# 2. 获取配置ifself.configisNone:raiseValueError(The config is not set.)# 3. 检查输入审核是否启用ifself.config[inputs_config][enabled]:preset_responseself.config[inputs_config][preset_response]# 4. 添加查询到输入字典ifquery:inputs[query__]query# 5. 调用 OpenAI 审核 APIflaggedself._is_violated(inputs)# 6. 返回结果returnModerationInputsResult(flaggedflagged,actionModerationAction.DIRECT_OUTPUT,preset_responsepreset_response)输出审核逻辑:defmoderation_for_outputs(self,text:str)-ModerationOutputsResult:flaggedFalsepreset_responseifself.configisNone:raiseValueError(The config is not set.)ifself.config[outputs_config][enabled]:flaggedself._is_violated({text:text})preset_responseself.config[outputs_config][preset_response]returnModerationOutputsResult(flaggedflagged,actionModerationAction.DIRECT_OUTPUT,preset_responsepreset_response)调用 OpenAI API方法:_is_violated()def_is_violated(self,inputs:dict):# 1. 拼接所有输入值text\n.join(str(inputs.values()))# 2. 创建模型管理器model_managerModelManager()# 3. 获取 Moderation 模型实例model_instancemodel_manager.get_model_instance(tenant_idself.tenant_id,provideropenai,model_typeModelType.MODERATION,modelomni-moderation-latest)# 4. 调用审核 APIopenai_moderationmodel_instance.invoke_moderation(texttext)# 5. 返回审核结果True违规False正常returnopenai_moderation处理流程:配置方式数据结构{enabled:true,type:openai_moderation,config:{inputs_config:{enabled:true,preset_response:您的输入包含不当内容请修改后重试},outputs_config:{enabled:true,preset_response:输出内容包含不当内容}}}字段说明:字段类型必填说明enabledboolean是是否启用审核功能typestring是必须为openai_moderationconfig.inputs_configobject是输入审核配置config.inputs_config.enabledboolean是是否启用输入审核config.inputs_config.preset_responsestring否预设响应≤100字符config.outputs_configobject是输出审核配置config.outputs_config.enabledboolean是是否启用输出审核config.outputs_config.preset_responsestring否预设响应≤100字符通过 UI 配置步骤 1: 打开功能面板打开应用编辑界面在右侧找到功能(Features) 按钮/面板在功能列表中找到内容审核卡片步骤 2: 选择 OpenAI 审核在提供者列表中选择“OpenAI Moderation”步骤 3: 配置审核范围输入审核:☑️ 启用输入审核可选 预设响应不当内容请修改输出审核:☑️ 启用输出审核可选 预设响应输出包含不当内容注意: 至少需要启用一种步骤 4: 验证 OpenAI 配置系统会自动检查OpenAI API Key 是否已配置账户是否有充足额度模型是否可用步骤 5: 保存点击保存按钮完成配置通过 API 配置获取当前配置curl-XGEThttps://api.dify.ai/v1/apps/{app_id}/model-config\-HAuthorization: Bearer {api_key}响应示例:{sensitive_word_avoidance:{enabled:true,type:openai_moderation,config:{inputs_config:{enabled:true,preset_response:Input not allowed},outputs_config:{enabled:false}}}}更新配置curl-XPOSThttps://api.dify.ai/v1/apps/{app_id}/model-config\-HAuthorization: Bearer {api_key}\-HContent-Type: application/json\-d{ sensitive_word_avoidance: { enabled: true, type: openai_moderation, config: { inputs_config: { enabled: true, preset_response: 输入内容不合适 }, outputs_config: { enabled: true, preset_response: 输出内容不合适 } } } }性能分析时间复杂度操作耗时说明文本合并O(n)n输入字段数API 调用200-2000ms网络往返时间整体审核200-2000ms主要是 API 调用性能特点方面特点说明响应时间⚡ 中等秒级延迟有网络开销准确度⭐⭐⭐⭐⭐ 高基于 ML 模型准确性好成本 高每次调用消耗 API 配额稳定性✅ 高OpenAI 官方维护优化建议1. 缓存策略:# 缓存相同内容的审核结果lru_cache(maxsize1000)defcheck_cached(text:str)-bool:returnmodel_instance.invoke_moderation(text)2. 批量审核:# 累积多条内容后批量处理batch_texts[text1,text2,text3]results[invoke_moderation(t)fortinbatch_texts]3. 降级策略:# API 失败时降级到关键词审核try:returnopenai_moderation()exceptException:logger.error(OpenAI API failed, fallback to keywords)returnkeywords_moderation()使用场景适用场景复杂语义理解需要理解讽刺、变形等复杂表达关键词匹配效果差多语言内容支持中文、英文、日文等多种语言单个模型处理多语言高准确度要求金融、医疗等敏感领域允许调用外部 API 的场景动态内容新型违规内容不断出现关键词维护成本高不适用场景❌ 实时性要求极高毫秒级❌ 网络环境受限或不稳定❌ 预算紧张无法承担 API 成本❌ 对 OpenAI 有依赖限制与其他策略对比配置示例示例 1: 仅审核输入{enabled:true,type:openai_moderation,config:{inputs_config:{enabled:true,preset_response:您的输入包含不当内容},outputs_config:{enabled:false}}}示例 2: 仅审核输出{enabled:true,type:openai_moderation,config:{inputs_config:{enabled:false},outputs_config:{enabled:true,preset_response:输出内容需要审核}}}示例 3: 双向审核{enabled:true,type:openai_moderation,config:{inputs_config:{enabled:true,preset_response:输入不符合要求},outputs_config:{enabled:true,preset_response:输出不符合要求}}}示例 4: 无预设响应{enabled:true,type:openai_moderation,config:{inputs_config:{enabled:true,preset_response:},outputs_config:{enabled:true,preset_response:}}}常见问题Q: OpenAI 审核支持哪些语言A: 支持绝大多数主流语言包括英文、中文、日文、韩文西班牙文、法文、德文等欧洲语言阿拉伯文、俄文等其他语言Q: 审核 API 的成本是多少A: OpenAI Moderation API 费用较低约为 $0.01-0.05/1K tokens。具体费用参考 OpenAI 官方价格。Q: 能否缓存审核结果A: 可以但需要注意相同文本可以缓存结果需要考虑内容动态更新的情况建议设置 TTL 以应对政策变化Q: 审核失败或超时怎么办A: 系统会记录错误日志允许内容通过降级或可配置降级策略如切换到关键词审核Q: 如何调整审核的严格程度A: OpenAI Moderation API 返回的是二元结果通过/拒绝不支持调整严格程度。如需细粒度控制考虑使用自定义 API 审核。Q: 国内用户能否使用A: 国内用户需要配置可访问 OpenAI API 的网络环境或通过代理/VPN或使用支持代理的 API 客户端库测试用例文件: api/tests/unit_tests/core/moderation/test_content_moderation.py测试类测试类场景TestOpenAIModerationOpenAI 审核功能测试关键测试deftest_openai_moderation_config_validation(self):验证配置合法性config{inputs_config:{enabled:True,preset_response:Invalid},outputs_config:{enabled:True,preset_response:Invalid}}OpenAIModeration.validate_config(tenant_id,config)# 应该通过验证deftest_openai_moderation_inputs(self):测试输入审核moderationOpenAIModeration(app_id,tenant_id,config)resultmoderation.moderation_for_inputs({user_input:clean message},)assertresult.flaggedFalsedeftest_openai_moderation_outputs(self):测试输出审核moderationOpenAIModeration(app_id,tenant_id,config)resultmoderation.moderation_for_outputs(clean output)assertresult.flaggedFalse扩展建议1. 多模型支持# 支持多个审核模型版本SUPPORTED_MODELS[omni-moderation-latest,omni-moderation-2024-09-26,]2. 自定义类别审核# 返回详细的审核类别resultmodel_instance.invoke_moderation_with_details(texttext,return_categoriesTrue)# 可能返回: {# sexual: False,# hate: False,# violence: True, # 审核不通过# self-harm: False,# }3. 评分机制# 返回评分而非二元结果scoremodel_instance.invoke_moderation_score(text)# 0.0-1.00 表示安全1 表示违规ifscore0.7:flag_as_violation()文档版本: 1.0最后更新: 2026-01-21

更多文章