首页 > 其他分享 >开源模型应用落地-安全合规篇-模型输出合规性检测(三)

开源模型应用落地-安全合规篇-模型输出合规性检测(三)

时间:2024-03-19 11:58:05浏览次数:33  
标签:static String 模型 合规性 安全 开源 内容 import 文本

 一、前言

    为什么我们需要花大力气对用户输入的内容和模型生成的输出进行合规性检测,一方面是严格遵守各项法规要求,具体如下:互联网信息服务深度合成管理规定icon-default.png?t=N7T8https://www.gov.cn/zhengce/zhengceku/2022-12/12/content_5731431.htm

    其次,受限于模型本身的一些缺陷,模型可能会生成一些不正确的输出。

    最后,合规性检测也是建立可持续发展和良好声誉的关键步骤。如果忽视对用户输入内容和模型生成内容的合规性检测,可能会导致法律诉讼、声誉损害和用户流失等不良后果。

    接下来,让我们一起学习如何使用腾讯云的内容安全审核来检测模型生成内容是否合规。


二、术语

2.1、腾讯文本内容安全(Text Moderation System,TMS)

    是一款文本内容智能识别审核服务,针对用户上传的文本进行内容安全识别并审核的安全服务,文本内容安全服务能够做到识别准确率高、召回率高,多维度覆盖不同类型的文本内容,同时产品将会持续更新审核服务识别标准及产品服务能力。

  •     能够对文本文件进行多样化场景检测,精准识别文本中出现可能令人反感、不安全或不适宜的内容,有效降低内容违规风险与有害信息识别成本。
  •     能够精准识别涉黄等有害内容,支持用户配置词库,打击自定义的违规文本。文本内容安全服务能检测内容的危险等级,客户可提前设置文本内容识别结果的自动化处理策略,从而帮助客户节省人力,降低业务风险。
  •     以开放 API(Application Programming Interface,应用程序编程接口)的方式提供服务,用户通过调用API即可获取识别结果,高效构建智能化业务系统,提升业务运营效率。

2.2、应用场景

互动直播

    腾讯文本内容安全可提供针对直播中的弹幕、用户评论等文本内容过滤的一站式、低时延解决方案,识别可疑房间并进行预警。

    如果已使用腾讯云的视频、直播解决方案,即可一键开启文本内容安全服务,及时阻断不良内容传播,降低平台运营风险。

社区论坛

    腾讯文本内容安全可以广泛应用于博客、论坛等各类有用户原创内容的平台,包括个人主页、评论、发帖、回帖及站内信等场景。快速识别令人反感、不安全或有害内容,保障平台商业利益和业务合规,降低客户运营成本。

电商购物

    腾讯文本内容安全可以对购物平台的文本内容进行全场景覆盖式识别,包括商品简介、商品详情介绍、买家评价和用户问答等场景。防止涉黄等敏感类文本发布,降低人工识别成本和业务违规风险。

    精细化的多级标签及高度客制化的自定义识别策略,保障各类合规商品正常交易的同时,及时甄别各场景下潜藏的不良和有害信息,维护平台业务的正常开展。


三、前提条件

3.1、开通腾讯云内容安全服务

        # 购买套餐包或者开通后付费

        # 新建业务场景-审核策略(非必须)

        # 上传自定义违禁词表(非必须)

        # 获取SecretID和SecretKey


四、技术实现

    处理流程如下图所示:

    实现效果如下图所示:仿照文心一言,当遇到违规内容时,提示用户新建对话

PS:图片被检测违规,无法上传全屏截图

4.1、引入Maven依赖

<dependency>
    <groupId>com.tencentcloudapi</groupId>
    <artifactId>tencentcloud-sdk-java-tms</artifactId>
    <version>3.1.893</version>
</dependency>

4.2、新增内容安全审核公共类

import com.alibaba.fastjson.JSONObject;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.tms.v20201229.TmsClient;
import com.tencentcloudapi.tms.v20201229.models.TextModerationRequest;
import com.tencentcloudapi.tms.v20201229.models.TextModerationResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;

import java.nio.charset.StandardCharsets;

@Slf4j
public class ContentCheckUtils {

    // 密钥
    private static final String SECRET_ID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    private static final String SECRET_KEY = "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk";
    private static final String BIZ_TYPE = "111111111111111111111111111";
    private static final String DEFAULT_ENDPOINT = "tms.ap-guangzhou.tencentcloudapi.com";
    private static final String DEFAULT_REGION = "ap-shanghai";
    private static final int DEFAULT_TIMEOUT = 3;
    //    第三方的
    private static final Base64 base64 = new Base64();

    private static final TmsClient tmsClient = init();

    private static TmsClient init() {
        // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
        // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
        Credential cred = new Credential(SECRET_ID, SECRET_KEY);
        // 实例化一个http选项,可选的,没有特殊需求可以跳过
        HttpProfile httpProfile = new HttpProfile();
        httpProfile.setEndpoint(DEFAULT_ENDPOINT);
        // 请求连接超时时间,单位秒(默认60秒)
        httpProfile.setConnTimeout(DEFAULT_TIMEOUT);
        // 设置写入超时时间,单位秒(默认0秒)
        httpProfile.setWriteTimeout(DEFAULT_TIMEOUT);
        // 设置读取超时时间,单位秒(默认0秒)
        httpProfile.setReadTimeout(DEFAULT_TIMEOUT);

        // 实例化一个client选项,可选的,没有特殊需求可以跳过
        ClientProfile clientProfile = new ClientProfile();
        clientProfile.setHttpProfile(httpProfile);
        // 实例化要请求产品的client对象,clientProfile是可选的
        TmsClient client = new TmsClient(cred, DEFAULT_REGION, clientProfile);

        return client;
    }

    public static boolean contains_illegal_word(String text) {

        if (StringUtils.isEmpty(text) || StringUtils.isBlank(text))
            return Boolean.TRUE;
        try {
            // 实例化一个请求对象,每个接口都会对应一个request对象
            TextModerationRequest req = new TextModerationRequest();
//            req.setBizType(BIZ_TYPE);
            byte[] utf8Bytes = text.getBytes(StandardCharsets.UTF_8);
            String content = base64.encodeToString(utf8Bytes);

//            log.info(content);
            req.setContent(content);
            TextModerationResponse resp = tmsClient.TextModeration(req);

            String suggestion = resp.getSuggestion();

//            返回值:Block:建议屏蔽,Review :建议人工复审,Pass:建议通过
            if(StringUtils.equals(suggestion,"Pass")){
                //通过
                return Boolean.FALSE;
            }else{
                // 输出json格式的字符串回包
                String str = JSONObject.toJSONString(resp);
                log.warn("内容:{},包含违规信息,具体为:{}",text,str);
                return Boolean.TRUE;
            }

        } catch (Exception e) {
            log.error("内容安全服务异常",e);
            return Boolean.TRUE;
        }
    }


}

4.3、修改AI对话公共类

4.4、修改业务逻辑处理类

增加以下公共代码

    

4.5、修改测试页面

五、测试

5.1、打开测试页面

5.2、测试输入违规内容

    页面输出:

    后台输出:

    PS:

虽然上述AI输出的内容是乱编乱造的,但已经满足了测试的目标。为了确保内容的合规性,我们在腾讯云内容审核后台设置了一个关键词过滤器,以便检测模型输出中是否包含特定的关键词,比如"老蒋"。一旦模型输出包含这个关键词,就会被标记为违规内容。需要注意的是,国内的开源语言模型有时候会生成不正确的输出,但这种情况的发生概率较低。在实际应用中,应根据具体的业务场景来制定适合自身的安全审核策略。


六、附带说明

6.1、[TencentCloudSDKException]code: InvalidParameterValue.ErrTextContentType message:文本内容不存在或文本类型错误:需标准utf8转成的base64格式编码

    解决:使用UTF-8进行编码

String text = "今天天气真好";
Base64 base64 = new Base64();
byte[] utf8Bytes = text.getBytes(StandardCharsets.UTF_8);
String content = base64.encodeToString(utf8Bytes);

6.2、文本内容安全接口调用返回的数据格式

{
	"Keywords": [],
	"RequestId": "78e6a13f-ae7d-4edf-8a2b-69f71a0040fd",
	"SubLabel": "",
	"DetailResults": [{
		"LibId": "",
		"LibName": "",
		"Suggestion": "Pass",
		"Score": 2,
		"Keywords": [],
		"SubLabel": "",
		"Label": "Terror",
		"header": {},
		"LibType": 0,
		"skipSign": false,
		"HitInfos": []
	}, {
		"LibId": "",
		"LibName": "",
		"Suggestion": "Pass",
		"Score": 2,
		"Keywords": [],
		"SubLabel": "",
		"Label": "Porn",
		"header": {},
		"LibType": 0,
		"skipSign": false,
		"HitInfos": []
	}, {
		"LibId": "",
		"LibName": "",
		"Suggestion": "Pass",
		"Score": 0,
		"Keywords": [],
		"SubLabel": "",
		"Label": "Polity",
		"header": {},
		"LibType": 0,
		"skipSign": false,
		"HitInfos": []
	}, {
		"LibId": "",
		"LibName": "",
		"Suggestion": "Pass",
		"Score": 0,
		"Keywords": [],
		"SubLabel": "",
		"Label": "Ad",
		"header": {},
		"LibType": 0,
		"skipSign": false,
		"HitInfos": []
	}, {
		"LibId": "",
		"LibName": "",
		"Suggestion": "Pass",
		"Score": 0,
		"Keywords": [],
		"SubLabel": "",
		"Label": "Abuse",
		"header": {},
		"LibType": 0,
		"skipSign": false,
		"HitInfos": []
	}, {
		"LibId": "",
		"LibName": "",
		"Suggestion": "Pass",
		"Score": 0,
		"Keywords": [],
		"SubLabel": "",
		"Label": "Illegal",
		"header": {},
		"LibType": 0,
		"skipSign": false,
		"HitInfos": []
	}, {
		"LibId": "",
		"LibName": "",
		"Suggestion": "Pass",
		"Score": 0,
		"Keywords": [],
		"SubLabel": "",
		"Label": "Spam",
		"header": {},
		"LibType": 0,
		"skipSign": false,
		"HitInfos": []
	}],
	"Label": "Normal",
	"BizType": "0",
	"Suggestion": "Pass",
	"Score": 0,
	"DataId": "",
	"ContextText": "",
	"Extra": "",
	"header": {},
	"skipSign": false
}

6.3、如何在线调式

    地址:登录 - 腾讯云

6.4、如何生成示例代码

    还是上面的地址,选择代码示例的tab

6.5、不同业务场景设置不同的审核策略

6.6、文本内容安全文档中心

文本内容安全 文本内容安全-文本内容安全相关接口-API 中心-腾讯云

标签:static,String,模型,合规性,安全,开源,内容,import,文本
From: https://blog.csdn.net/qq839019311/article/details/136804205

相关文章

  • 自动化测试框架、Python面向对象以及POM设计模型简介
    1 自动化测试框架概述   所谓的框架其实就是一个解决问题的思维,前言中描述的诸多问题如果得到解决,自然而然这种得到良好解决的东西它就可以称之为一个框架,只是这个框架用来解决如何组织开展自动化测试。一个典型的自动化测试框架一般包括测试用例集模块、测试执行控制模块......
  • 倾斜摄影三维模型的立面出图的问题分析
    倾斜摄影三维模型的立面出图的问题分析 倾斜摄影是一种常用的三维模型构建技术,通过利用倾斜摄影系统获取的影像数据,可以生成高精度、真实感的三维模型。倾斜摄影的应用十分广泛,包括城市规划、建筑设计、文化遗产保护等领域。其中,倾斜摄影的立面出图是一项重要的应用,可以为建筑......
  • 第三章:数据建模与模型评估
    #1.数据建模importpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt#python绘图库可以与numpy一起使用importseabornassns#基于python的图形可视化库,更加方便快捷fromIPython.displayimportImagedata=pd.read_csv('clear_data.csv')#清洗后的数......
  • 机器学习模型—主成分分析 降维魔法
    机器学习模型—主成分分析降维魔法在许多领域的研究与应用中,我们通常需要对含有多个变量的数据进行观测和分析。然而,多变量大数据集不仅增加了数据采集的工作量,还使问题分析变得复杂。此时,主成分分析(PCA)作为一种降维算法,能够帮助我们从高维数据中提取关键信息,减少维度,同时......
  • 机器学习模型—K means
    文章目录机器学习模型—Kmeans聚类的目标k均值原理k均值的实现手动实现Python实现K的确定手肘法总结机器学习模型—KmeansK-Means聚类是一种无监督机器学习算法,它将未标记的数据集分为不同的簇。本文旨在探讨k均值聚类的基本原理和工作......
  • JAVA实战开源项目:农村物流配送系统(Vue+SpringBoot)
    目录一、摘要1.1项目介绍1.2项目录屏二、功能模块2.1系统登录、注册界面2.2系统功能2.2.1快递信息管理:2.2.2位置信息管理:2.2.3配送人员分配:2.2.4路线规划:2.2.5个人中心:2.2.6退换快递处理:2.2.7客户评价:三、系统展示四、核心代码4.1查询商家4.2退换快递4......
  • JAVA实战开源项目:城市桥梁道路管理系统(Vue+SpringBoot)
    目录一、摘要1.1项目介绍1.2项目录屏二、功能模块三、系统展示四、核心代码4.1查询城市桥梁4.2新增城市桥梁4.3编辑城市桥梁4.4删除城市桥梁4.5查询单个城市桥梁五、免责说明一、摘要1.1项目介绍基于Vue+SpringBoot+MySQL的城市桥梁道路管理系统,支持管......
  • 【20.6】Django框架Form组件之模型表单ModelForm
    【一】引入如果你正在构建一个数据库驱动的应用,那么你可能会有与Django的模型紧密映射的表单。比如,你有个BlogComment模型,并且你还想创建一个表单让大家提交评论到这个模型中。在这种情况下,写一个forms.Form类,然后在表单类中定义字段,这种一般创建表单的做法是冗余的,因为你已经......
  • 【13.0】Django框架之模型层
    【一】前言Django自带的sqlite3数据对日期格式不敏感,处理的时候容易出错【1】测试脚本测试脚本当我们只想要测试Django中的某一个py文件的内容时,我们可以不需要书写前后端交互的形式,而是直接写一个测试脚本即可测试环境的准备在测试文件中书写下面内容这内容其......
  • 阿里云-零基础入门推荐系统 【排序模型+模型融合】
    文章目录学习过程赛题介绍评价方式理解赛题理解排序模型读取排序特征转化类型返回排序后的结果排序结果归一化LGB排序模型定义特征列排序模型分组排序模型定义排序模型训练lgb_ranker模型预测lgb_ranker预测结果重新排序及生成提交结果lgb_ranker五折交叉验证lgb_ranker......