给客服Agent加敏感词合规过滤
客服AI小助手只要上线对外,就躲不开合规这事。模型偶尔会被用户带歪,说出不该说的;用户也可能在对话里发违规内容。我给一个对外客服智能体加了一层合规过滤,分享下我的做法和踩的坑。
先想清楚要过滤哪几处
很多人只想着过滤模型的输出,其实进出都得管。我最后做了三个卡点:
-
用户输入进来时,先过一遍——挡明显的辱骂、违禁内容,免得污染对话也免得诱导模型
-
模型输出出去前,再过一遍——这是重点,防模型说错话
-
知识库内容入库前过一遍——别让脏数据躺在知识库里被检索出来
第二处最关键。模型不是每次都听话,尤其用户故意套话的时候。
我这个客服智能体搭在一个零代码拖拽配节点的平台上,过滤层就是在主流程前后各挂一个处理节点。
词库匹配打底,别只靠它
最基础的一层是敏感词库匹配。我用了一份公开的违禁词表,加上自己业务相关的词(比如竞品名、内部代号这种不想外泄的)。匹配上了就拦截或者替换。
直接 in 遍历词表太慢,词多了卡。我用了 DFA(确定有限自动机)做多模式匹配,几千个词也是毫秒级。Python 现成的库不少,ahocorasick 这种就行:
import ahocorasick
A = ahocorasick.Automaton()
for idx, word in enumerate(banned_words):
A.add_word(word, (idx, word))
A.make_automaton()
def has_banned(text):
return any(True for _ in A.iter(text))
但词库有个老毛病:绕过太容易。用户把"违禁词"中间加个空格、加个标点、用拼音、用谐音,词库就抓瞎了。我实测纯词库能挡的真没多少,认真要绕的全绕过去了。
加一层模型审核
所以词库之上我又加了一道模型审核。把待检文本丢给模型,让它判断是否含违规内容,输出"通过"或"拦截"加个类别。这层能抓词库抓不到的变体和语义层面的违规。
代价是慢和贵。每条消息多调一次模型,延迟涨、成本涨。我的折中是:词库先过,词库判明显违规的直接拦,不用再调模型;只有词库没拦下、但又拿不准的,才走模型审核。这样大部分正常对话根本不触发第二层,省了不少调用。
一个真实的两难
过滤这事最头疼的是误杀。我的客服是卖医疗器械的,"出血""疼痛""药物"这些词在正常咨询里天天出现,但它们也在很多通用敏感词表里。一刀切全拦,正常用户问个产品都被拦,体验稀烂。
我处理办法是给业务白名单:在我这个场景下合理的词,从拦截表里摘掉。这事没有银弹,得一条条根据业务调,上线后还得盯着误杀日志持续修。我前两周几乎每天都在加白名单,烦但必要。
还有个脏细节:拦截之后别冷冰冰甩"内容违规"。我让被拦的回复统一换成一句客气的兜底话术,"这个问题我这边不太方便回答,要不您说说具体需求",用户体验好很多,也不暴露你在做过滤。
小结一下
词库做快筛和明显违规拦截,模型审核兜语义和变体,业务白名单防误杀,拦截后给软话术。四样配齐,这个客服跑下来合规这块没出过岔子。
模型审核和对话用的都是讯飞星辰 MaaS 的现成大模型 API,直接调,没自己部署。
更多推荐


所有评论(0)