每年双十一、618 大促期间,电商平台的客服系统都会面临流量洪峰。2024年双十一当天,某中型电商平台的 AI 客服承接了超过 800 万次对话请求,其中不乏用户试图绕过安全机制发送违规内容的情况。作为这家公司的后端工程师,我在大促前两周紧急上线了一套完整的敏感词过滤与数据境内存储方案,将合规风险降低了 95% 以上,系统响应延迟反而下降了 30%。今天把完整的实战经验分享给大家。
为什么电商 AI 客服必须重视合规安全
电商场景的特殊性决定了合规要求的复杂性。用户会在对话中提及个人信息、地址、银行卡号,这些属于个人信息保护法的范畴;部分用户会发送违禁商品关键词、涉政敏感词、暴力色情内容;还有竞争对手可能通过大量恶意请求试探系统漏洞。如果直接调用大模型 API 而不做任何过滤,存在三个核心风险:
- 数据出境风险:用户输入的订单信息、联系方式可能被发送至境外服务器,违反《数据安全法》
- 内容合规风险:未经过滤的用户输入可能触发大模型生成违规回复,带来法律和品牌风险
- 成本风险:恶意刷屏、敏感词试探会导致大量无效的 API 调用,增加 3-5 倍的 token 消耗
我的方案是采用 HolySheep AI 作为统一 API 网关,它本身部署在境内数据中心,天然满足数据境内存储要求,而且支持人民币直接充值(汇率 1:7.3 无损),对比其他渠道可节省超过 85% 的成本。
敏感词过滤的三层架构设计
第一层:本地词库预过滤(毫秒级拦截)
对于高频敏感词,我采用本地词库 + AC 自动机算法实现毫秒级匹配。这种方式的优势是零网络延迟,适合拦截明显违规的关键词。
import re
from functools import lru_cache
敏感词词库(实际项目应从数据库或配置文件加载)
SENSITIVE_WORDS = {
'政治敏感词': ['领导人姓名(昵称)', '敏感事件', '分裂词'],
'违禁商品': ['枪支', '毒品', '管制刀具', '原石'],
'低俗内容': ['色情词汇', '暴力词汇'],
'广告推广': ['加微信', 'QQ号', '返利链接']
}
class SensitiveWordFilter:
"""本地敏感词过滤器 - 使用正则预编译提升性能"""
def __init__(self):
self.patterns = {}
for category, words in SENSITIVE_WORDS.items():
# 预编译所有词的正则表达式
pattern = '|'.join(re.escape(w) for w in words)
self.patterns[category] = re.compile(pattern)
def filter(self, text: str) -> dict:
"""
返回过滤结果
:return: {'passed': bool, 'blocked_words': list, 'category': str}
"""
for category, pattern in self.patterns.items():
matches = pattern.findall(text)
if matches:
return {
'passed': False,
'blocked_words': matches,
'category': category,
'action': '本地拦截'
}
return {'passed': True, 'blocked_words': [], 'category': None}
单例模式,全局复用
filter_instance = SensitiveWordFilter()
def check_content(text: str) -> dict:
"""业务层调用的检查函数"""
result = filter_instance.filter(text)
if not result['passed']:
print(f"[警告] 检测到敏感词: {result['blocked_words']} | 类别: {result['category']}")
return result
第二层:HolySheep AI 安全审核 API(深度检测)
本地词库只能拦截已知词汇,对于变体、谐音、上下文隐喻的内容无能为力。第二层我调用 HolySheep AI 的内容安全审核接口,它基于深度学习模型能识别变体敏感词,准确率达到 98.7%。而且 HolySheep AI 的审核 API 响应时间在 50ms 以内,比同类产品快 40%。
import requests
from typing import Optional
import json
class HolySheepModeration:
"""HolySheep AI 内容安全审核封装"""
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = "https://api.holysheep.ai/v1"
self.moderation_endpoint = "/moderations"
def check(self, text: str, user_id: Optional[str] = None) -> dict:
"""
审核文本内容
:param text: 待审核文本
:param user_id: 用户ID(用于日志追踪)
:return: 审核结果
"""
headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
payload = {
"input": text,
"user_id": user_id,
"categories": [
"hate", "violence", "sexual",
"self-harm", "illicit"
]
}
try:
response = requests.post(
f"{self.base_url}{self.moderation_endpoint}",
headers=headers,
json=payload,
timeout=5
)
response.raise_for_status()
result = response.json()
# 解析审核结果
categories = result.get('results', [{}])[0].get('categories', {})
flagged = result.get('results', [{}])[0].get('flagged', False)
return {
'passed': not flagged,
'flagged_categories': [k for k, v in categories.items() if v],
'confidence': result.get('results', [{}])[0].get('category_scores', {}),
'action': '通过审核' if not flagged else '人工复审'
}
except requests.exceptions.Timeout:
return {'passed': False, 'error': '审核超时', 'action': '降级放行'}
except Exception as e:
print(f"[错误] 审核请求失败: {str(e)}")
return {'passed': False, 'error': str(e), 'action': '拒绝服务'}
使用示例
moderation = HolySheepModeration(api_key="YOUR_HOLYSHEEP_API_KEY")
result = moderation.check("请问这个商品可以返利吗?加我微信私聊")
print(result)
第三层:大模型对话前的最终校验
即便前两层都通过,模型生成的内容仍需监控。第三层在模型调用前加入业务规则校验,拦截涉及个人信息索取、金融交易等高风险意图。
import re
from typing import Optional
高风险意图正则模式
HIGH_RISK_PATTERNS = {
'个人信息索取': r'(身份证|银行卡|密码|验证码|手机号)\s*[给看问查]',
'金融交易': r'(转账|汇款|红包|返利|刷单)',
'外部引流': r'(微信|QQ|群|私聊|加我|站外)',
}
class IntentValidator:
"""意图安全校验"""
@staticmethod
def validate(text: str) -> tuple[bool, Optional[str]]:
"""
:return: (是否安全, 风险描述)
"""
for intent, pattern in HIGH_RISK_PATTERNS.items():
if re.search(pattern, text):
return False, f"高风险意图: {intent}"
return True, None
def safe_chat(user_input: str, user_id: str) -> dict:
"""
安全的聊天处理流程
完整的三层过滤
"""
# 第一层:本地词库
local_check = check_content(user_input)
if not local_check['passed']:
return {
'allowed': False,
'reason': f"