一、前言
为什么我们需要花大力气对用户输入的内容和模型生成的输出进行合规性检测,一方面是严格遵守各项法规要求,具体如下:互联网信息服务深度合成管理规定https://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