Dify.AI内容审核:自动过滤系统
在AI应用开发中,内容安全是至关重要的环节。Dify.AI作为一个全面的LLM应用开发平台,提供了强大的内容审核(Content Moderation)功能,帮助开发者自动过滤敏感内容,确保应用的安全合规性。
内容审核的重要性
随着AI应用的普及,内容安全问题日益突出:
- 合规要求:不同地区有不同的内容监管法规
- 用户体验:避免不当内容影响用户体验
- 品牌保护:防止恶意内容损害品牌形象
- 法律风险:减少因内容问题引发的法律纠纷
Dify.AI的内容审核系统通过双重审核机制,在用户输入和AI输出两个环节进行内容过滤。
系统架构设计
Dify.AI的内容审核系统采用模块化设计,支持多种审核策略:
核心组件
1. 基础审核类(Base Moderation)
class Moderation(Extensible, ABC):
"""内容审核基类"""
@abstractmethod
def moderation_for_inputs(self, inputs: dict, query: str = "") -> ModerationInputsResult:
"""输入内容审核"""
pass
@abstractmethod
def moderation_for_outputs(self, text: str) -> ModerationOutputsResult:
"""输出内容审核"""
pass
2. 审核结果定义
class ModerationAction(Enum):
DIRECT_OUTPUT = "direct_output" # 直接返回预设响应
OVERRIDDEN = "overridden" # 替换违规内容
class ModerationInputsResult(BaseModel):
flagged: bool = False # 是否违规
action: ModerationAction # 处理动作
preset_response: str = "" # 预设响应内容
inputs: dict = {} # 处理后的输入
query: str = "" # 处理后的查询
审核策略实现
1. OpenAI审核集成
Dify.AI默认集成了OpenAI的内容审核API:
class OpenAIModeration(Moderation):
"""OpenAI内容审核实现"""
def _is_violated(self, inputs: dict):
text = "\n".join(str(inputs.values()))
model_instance = model_manager.get_model_instance(
tenant_id=self.tenant_id,
provider="openai",
model_type=ModelType.MODERATION,
model="text-moderation-stable"
)
return model_instance.invoke_moderation(text=text)
2. 关键词过滤
除了第三方API,Dify.AI还支持基于关键词的本地过滤:
class KeywordsModeration(Moderation):
"""关键词内容审核"""
def moderation_for_inputs(self, inputs: dict, query: str = "") -> ModerationInputsResult:
flagged = False
keywords = self.config.get("keywords", [])
# 检查所有输入字段
for value in inputs.values():
if any(keyword in str(value).lower() for keyword in keywords):
flagged = True
break
return ModerationInputsResult(
flagged=flagged,
action=ModerationAction.DIRECT_OUTPUT,
preset_response=self.config.get("preset_response", "")
)
3. 自定义API审核
支持通过API集成自定义审核服务:
class APIModeration(Moderation):
"""API内容审核"""
def moderation_for_outputs(self, text: str) -> ModerationOutputsResult:
api_url = self.config.get("api_url")
headers = self.config.get("headers", {})
response = requests.post(api_url, json={"text": text}, headers=headers)
result = response.json()
return ModerationOutputsResult(
flagged=result.get("flagged", False),
action=ModerationAction.DIRECT_OUTPUT,
preset_response=self.config.get("preset_response", "")
)
配置与使用
1. 应用配置
在Dify.AI中配置内容审核:
sensitive_word_avoidance:
type: "openai_moderation"
config:
inputs_config:
enabled: true
preset_response: "您输入的内容包含敏感信息,请重新输入"
outputs_config:
enabled: true
preset_response: "抱歉,无法生成相关内容"
2. 审核流程
Dify.AI的审核流程采用实时处理模式:
性能优化策略
1. 缓冲区处理
对于流式输出,采用缓冲区机制减少审核频率:
class OutputModeration(BaseModel):
buffer: str = ""
buffer_size: int = 100 # 每100字符审核一次
def append_new_token(self, token: str):
self.buffer += token
if len(self.buffer) >= self.buffer_size:
self._process_buffer()
2. 异步处理
使用多线程进行非阻塞审核:
def start_thread(self) -> threading.Thread:
thread = threading.Thread(target=self.worker)
thread.start()
return thread
3. 缓存机制
对重复内容进行缓存,避免重复审核:
from functools import lru_cache
@lru_cache(maxsize=1000)
def cached_moderation(text: str) -> bool:
"""缓存审核结果"""
return moderation_api.check(text)
监控与日志
1. 审核统计
class ModerationMetrics:
"""审核指标统计"""
def __init__(self):
self.input_violations = 0
self.output_violations = 0
self.total_checks = 0
def record_check(self, is_violation: bool, is_input: bool):
self.total_checks += 1
if is_violation:
if is_input:
self.input_violations += 1
else:
self.output_violations += 1
2. 详细日志
logger.info(
"Moderation result - App: %s, Type: %s, Flagged: %s",
app_id,
"input" if is_input else "output",
flagged
)
最佳实践
1. 分级审核策略
| 风险等级 | 审核策略 | 响应方式 |
|---|---|---|
| 高风险 | 严格模式+人工复核 | 直接拦截 |
| 中风险 | 标准审核 | 替换内容 |
| 低风险 | 宽松审核 | 标记记录 |
2. 多维度审核
def multi_layer_moderation(text: str) -> ModerationResult:
"""多层审核策略"""
# 第一层:关键词过滤
if keyword_filter.check(text):
return ModerationResult(flagged=True, level="high")
# 第二层:AI模型审核
ai_result = ai_moderation.check(text)
if ai_result.flagged:
return ModerationResult(flagged=True, level=ai_result.confidence)
# 第三层:自定义规则
if custom_rules.check(text):
return ModerationResult(flagged=True, level="medium")
return ModerationResult(flagged=False)
3. 动态配置更新
支持运行时配置更新,无需重启服务:
class DynamicConfigManager:
"""动态配置管理"""
def update_moderation_config(self, new_config: dict):
# 更新内存中的配置
self.current_config = new_config
# 通知所有工作线程
for worker in self.workers:
worker.update_config(new_config)
故障处理与降级
1. 服务降级策略
当审核服务不可用时,提供降级方案:
def safe_moderation(text: str) -> ModerationResult:
try:
return moderation_service.check(text)
except Exception as e:
logger.warning("Moderation service down, using fallback: %s", e)
# 使用本地基础过滤
return local_filter.check(text)
2. 熔断机制
from circuitbreaker import circuit
@circuit(failure_threshold=5, recovery_timeout=60)
def call_moderation_api(text: str):
"""带熔断的审核API调用"""
return requests.post(api_url, json={"text": text})
总结
Dify.AI的内容审核系统提供了一个完整、灵活且高效的解决方案:
- 双重保护:输入和输出双重审核确保内容安全
- 多策略支持:支持OpenAI、关键词、自定义API等多种审核方式
- 高性能设计:缓冲区、异步处理、缓存等优化策略
- 灵活配置:支持动态配置更新和分级审核策略
- 完备监控:详细的日志记录和统计指标
通过这套系统,开发者可以轻松构建安全可靠的AI应用,无需担心内容安全问题,专注于业务逻辑的实现。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



