【Qbot】3.加入内容审核功能

该项目计划长期进行维护更新,欢迎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)

上线实测一天下来,整体稳定性是不错的,基本不会出现“错杀”,“漏杀”的情况,省去了人工盯群的精力。

猜你喜欢

转载自blog.csdn.net/qq1198768105/article/details/128382497