客服AI小助手只要上线对外,就躲不开合规这事。模型偶尔会被用户带歪,说出不该说的;用户也可能在对话里发违规内容。我给一个对外客服智能体加了一层合规过滤,分享下我的做法和踩的坑。

先想清楚要过滤哪几处

很多人只想着过滤模型的输出,其实进出都得管。我最后做了三个卡点:

  1. 用户输入进来时,先过一遍——挡明显的辱骂、违禁内容,免得污染对话也免得诱导模型

  2. 模型输出出去前,再过一遍——这是重点,防模型说错话

  3. 知识库内容入库前过一遍——别让脏数据躺在知识库里被检索出来

第二处最关键。模型不是每次都听话,尤其用户故意套话的时候。

我这个客服智能体搭在一个零代码拖拽配节点的平台上,过滤层就是在主流程前后各挂一个处理节点。

词库匹配打底,别只靠它

最基础的一层是敏感词库匹配。我用了一份公开的违禁词表,加上自己业务相关的词(比如竞品名、内部代号这种不想外泄的)。匹配上了就拦截或者替换。

直接 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,直接调,没自己部署。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐