AI交互过程中敏感词处理

简介

在和AI聊天时,我们要对一些敏感词进行过滤,比如政治敏感词,色情/涉黄词,暴力/脏话词,广告/营销词,违法词。AI只会回答与敏感词无关的提问。所以我们需要在AI客服中引入过滤敏感词的功能。

实战

 <!--敏感词检索-->
        <dependency>
            <groupId>com.github.houbb</groupId>
            <artifactId>sensitive-word</artifactId>
            <version>0.21.0</version>
        </dependency>

package com.yutian.config;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.houbb.sensitive.word.api.IWordAllow;
import com.github.houbb.sensitive.word.api.IWordDeny;
import com.github.houbb.sensitive.word.bs.SensitiveWordBs;
import com.github.houbb.sensitive.word.support.allow.WordAllows;
import com.github.houbb.sensitive.word.support.deny.WordDenys;
import com.yutian.biz.entity.SensitiveWord;
import com.yutian.biz.mapper.SensitiveWordMapper;
import com.yutian.enums.SensitiveWordEnums;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;

/**
 * 敏感词检索配置类
 */
@Configuration
public class SensitiveWordConfig {

    @Autowired
    private SensitiveWordMapper sensitiveWordMapper;

    @Bean
    public SensitiveWordBs sensitiveWordBs() {
        return SensitiveWordBs.newInstance()
                //使用内置黑名单词库+自定义黑名单
                .wordDeny(WordDenys.chains(WordDenys.defaults(), new IWordDeny() {
                    //数据库自定义黑名单
                    @Override
                    public List<String> deny() {
                        return sensitiveWordMapper.selectList(Wrappers.lambdaQuery(SensitiveWord.class)
                                .eq(SensitiveWord::getType, SensitiveWordEnums.SENSITIVE_WORD_DENY.getCode()))
                                .stream()
                                .map(SensitiveWord::getWord)
                                .toList();
                    }
                }))
                //使用内置白名单词库+自定义白名单
                .wordAllow(WordAllows.chains(WordAllows.defaults(),new IWordAllow() {
                    //数据库中自定义白名单
                    @Override
                    public List<String> allow() {
                        return sensitiveWordMapper.selectList(Wrappers.lambdaQuery(SensitiveWord.class)
                                        .eq(SensitiveWord::getType, SensitiveWordEnums.SENSITIVE_WORD_ALLOW.getCode()))
                                .stream()
                                .map(SensitiveWord::getWord)
                                .toList();
                    }
                }))
                //启用邮箱检查
                .enableEmailCheck(true)
                //启用URL检查
                .enableUrlCheck(true)
                //启用数字检查
                .enableNumCheck(true)
                //忽略大小写
                .ignoreCase(true)
                //半角全角忽略
                .ignoreWidth(true)
                .init();
    }
}

  @Autowired
    private SensitiveWordBs sensitiveWordBs;
 /**
     * 检查用户问题是否包含敏感词
     * @param userMessage
     * @return
     */
    private String userMessageCheck(String userMessage){
        Assert.notEmpty(userMessage,"输入内容不可为空...");
        if(sensitiveWordBs.contains(userMessage)){
            return "该问题内容包含敏感词汇,我暂时无法回答,请重新换一个问题我们再聊吧...";
        }
        return null;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容