掘金 人工智能 6小时前
大模型“说脏话”后,我用这招让它文明了
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文讲述了程序员小米在为政企客户集成LangChain4j时,发现大模型可能输出不当言论的问题。为避免法律风险和用户体验问题,团队引入了敏感词识别机制。通过在LangChain4j的输出流程中加入内容过滤器,利用国产开源库Sensitive-Word进行敏感词检测,并根据风险等级采取不同的处理策略,如替换、终止响应等。同时,也对用户prompt进行过滤,防止注入攻击。最终,系统有效避免了敏感内容输出,提升了用户体验,并为模型微调提供数据支撑。

🛡️ 敏感词识别的必要性:在使用LangChain4j等框架进行业务集成时,尤其是在对话场景上线政企门户、模型响应可能被转写为语音等情况下,必须考虑模型输出的法律风险和用户体验风险,避免模型输出不当言论。

🛠️ 解决方案:通过在LangChain4j的PromptTemplate.invoke()或LLMChain.invoke()后的response中加入内容过滤器,利用Sensitive-Word等成熟的敏感词检测库进行敏感词检测。Sensitive-Word是一个完全国产、开源、无依赖的库,支持多种匹配模式、停用词/白名单策略、拼音匹配/繁简转化,并自带基础词库,也支持加载自定义词表。

🚦 分级处理策略:将词库进行级别划分,例如分为高风险词、中风险词和低风险词,并为每类词汇定义不同的处理策略,如直接拒绝输出、用[敏感词]替代、用*屏蔽等。同时,记录日志并上报埋点,为模型微调提供数据支撑。

✍️ Prompt过滤:除了对模型输出进行过滤外,也需要对用户输入的prompt进行过滤,防止prompt注入攻击,避免模型生成危险内容。

故事开始:大模型说脏话了,甲方慌了

大家好,我是小米,一个正在写代码写到凌晨、被大模型“骂醒”的程序员……

事情是这样的:

上个月我们在给一个政企客户做 LangChain4j 集成(一个 Java 版的类 LangChain 框架),流程本来很顺利。结果上线前的一次压测,模型居然在模拟对话中爆了一句:“你丫再说一遍试试?”

甲方现场脸都绿了:“我们要的是个AI助理,不是AI杠精!”

我赶紧查日志、复现 prompt,结果还真是——某位测试人员在 prompt 里反复引导模型“情绪化”,最后触发了某个边界 case,模型“情绪激动”说出了这句话。

我们突然意识到,大模型也要“讲文明”!

那一刻,我知道,我们必须引入敏感词识别机制

为什么 LangChain4j 要处理敏感词?

我们在用 LangChain4j 做 Java 业务集成时,常常以为“模型只管生成,业务逻辑我兜底”。

但当场景越来越“真实”:

这时候,模型说出一句“你傻吗?”就不仅是 bug,是事故。

敏感词问题归根结底有两个风险:

这时候,我们决定引入一个成熟的敏感词识别方案

思路来了:敏感词识别 = 拦截器 + 字典匹配

目标是:模型的每次输出,我们都要“过一道筛”

我们梳理了一下整个 LangChain4j 的输出流程:

其中我们可以在“返回 response”之后,加入一个 内容过滤器,把模型的结果再“审核一遍”。

于是我们做了以下决策:

登场主角:Sensitive-Word 中文敏感词识别神器

首先,我要强烈推荐一下这个开源库:Sensitive-Word。

我喜欢它的理由很简单:

一句话:你想要的,它全给你了。

集成实战:LangChain4j + Sensitive-Word 全流程演示

步骤一:引入依赖

步骤二:初始化敏感词引擎

我们准备了一个 sensitive-words.txt 文件,里面包含了一些:

步骤三:封装一个 Output Filter 工具类

步骤四:嵌入 LangChain4j 的处理链

最终效果如下:

是不是瞬间“文明”了很多?

进阶:不同类型敏感词,策略分级处理

我们后来还把词库做了“级别划分”:

并为每类词汇定义处理策略:

这一层抽象,让我们不仅拦截了输出,也可以做到日志分类、用户提示更智能。

模型+敏感词:prompt 要素也要过滤?

你可能会问: “小米,prompt 里也可能含敏感词吧?”

是的!我们后来又加了一层:

因为 prompt 注入攻击有时就是从这里来的,你如果不做判断,模型“真就给你生成方案了”。这就很危险!

上线后的变化

上线后的这套机制,效果非常明显:

总结时间:这就是“小米式工程优化”

我们这代程序员,其实早就从“写代码”走到了“做产品”的边界。

你以为写个 LangChain4j 接口就完了,其实真正难的是:

这次敏感词处理,就是我们团队在“理想与现实之间”的一次深度妥协,但却是一次工程能力的体现

END

如果你喜欢这种“讲故事 + 代码实操”的技术分享,欢迎关注我,点赞、在看、分享三连! 我会继续更新更多 LangChain4j 实战干货,欢迎加入我们这群“用 Java 玩 AI”的技术控!

我们下期见啦~

我是小米,一个喜欢分享技术的31岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

LangChain4j 敏感词识别 Sensitive-Word 内容安全 AI伦理
相关文章