Qbot3.加入内容审核功能
Posted zstar-_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qbot3.加入内容审核功能相关的知识,希望对你有一定的参考价值。
该项目计划长期进行维护更新,欢迎star:https://github.com/zstar1003/Qbot
前言
在ChatGPT上线Q群不久,不少人对其进行了测试,但随着时间的延续,测试话题逐渐走向失控,迫使我不得不紧急暂停。
对同胞素质的过高预期换来的往往是无下限的不断试探,因此加入内容审查功能变得至关重要。
本地内容审核
在Github上找到了这个可用项目speachless(https://github.com/keithsun80/speachless)
该方法是根据本地预先设定的词构建搜索树,然后将需要检测的内容进行匹配。
不过实测发现该方法当添加词汇过多时,会存在匹配不准确的问题。
第三方审核接口
由于需要审核的内容字典难以获取,因此另一种简单方式就是调用的第三方内容审核服务。
下面调研了三家平台服务。
阿里内容审核
网站:https://help.aliyun.com/document_detail/70439.htm?spm=a2c4g.11186623.0.0.2f0f3dc02liW2m#section-cic-j6w-c0s
看了下阿里的文档,申请入口一下子没找到,就没继续尝试。
网易易盾
网站:https://dun.163.com/trial/text
新用户似乎有7天的免费试用,不过申请之后,发现需要一天多的审核时间,并且会有人打电话来进行确认,比较麻烦。
百度内容审核平台
网站:https://ai.baidu.com/solution/censoring
百度这个平台的申请挺容易的,直接秒过,并且有总量5万次文本审核调用量,对于我这样的小应用来说足够使用。
并且,官网给出了详细的调用示例,兼容python2和python3:
import sys
import json
import base64
# 保证兼容python2以及python3
IS_PY3 = sys.version_info.major == 3
if IS_PY3:
from urllib.request import urlopen
from urllib.request import Request
from urllib.error import URLError
from urllib.parse import urlencode
from urllib.parse import quote_plus
else:
import urllib2
from urllib import quote_plus
from urllib2 import urlopen
from urllib2 import Request
from urllib2 import URLError
from urllib import urlencode
# 防止https证书校验不正确
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
API_KEY = '自己的API_KEY'
SECRET_KEY = '自己的SECRET_KEY '
IMAGE_CENSOR = "https://aip.baidubce.com/rest/2.0/solution/v1/img_censor/v2/user_defined"
TEXT_CENSOR = "https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined"
""" TOKEN start """
TOKEN_URL = 'https://aip.baidubce.com/oauth/2.0/token'
"""
获取token
"""
def fetch_token():
params = 'grant_type': 'client_credentials',
'client_id': API_KEY,
'client_secret': SECRET_KEY
post_data = urlencode(params)
if (IS_PY3):
post_data = post_data.encode('utf-8')
req = Request(TOKEN_URL, post_data)
try:
f = urlopen(req, timeout=5)
result_str = f.read()
except URLError as err:
print(err)
if (IS_PY3):
result_str = result_str.decode()
result = json.loads(result_str)
if ('access_token' in result.keys() and 'scope' in result.keys()):
if not 'brain_all_scope' in result['scope'].split(' '):
print('please ensure has check the ability')
exit()
return result['access_token']
else:
print('please overwrite the correct API_KEY and SECRET_KEY')
exit()
"""
读取文件
"""
def read_file(image_path):
f = None
try:
f = open(image_path, 'rb')
return f.read()
except:
print('read image file fail')
return None
finally:
if f:
f.close()
"""
调用远程服务
"""
def request(url, data):
req = Request(url, data.encode('utf-8'))
has_error = False
try:
f = urlopen(req)
result_str = f.read()
if (IS_PY3):
result_str = result_str.decode()
return result_str
except URLError as err:
print(err)
if __name__ == '__main__':
# 获取access token
token = fetch_token()
# 拼接图像审核url
image_url = IMAGE_CENSOR + "?access_token=" + token
# 拼接文本审核url
text_url = TEXT_CENSOR + "?access_token=" + token
file_content = read_file('./image_normal.jpg')
result = request(image_url, urlencode('image': base64.b64encode(file_content)))
print("----- 正常图调用结果 -----")
print(result)
file_content = read_file('./image_advertise.jpeg')
result = request(image_url, urlencode('image': base64.b64encode(file_content)))
print("----- 广告图调用结果 -----")
print(result)
text = "我们要热爱祖国"
result = request(text_url, urlencode('text': text))
print("----- 正常文本调用结果 -----")
print(result)
text = "我要爆粗口啦"
result = request(text_url, urlencode('text': text))
print("----- 粗俗文本调用结果 -----")
print(result)
上线实测一天下来,整体稳定性是不错的,基本不会出现“错杀”,“漏杀”的情况,省去了人工盯群的精力。
以上是关于Qbot3.加入内容审核功能的主要内容,如果未能解决你的问题,请参考以下文章