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

news2025/1/31 8:21:15

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python百日进阶-数据分析】Day134 - plotly饼图:go.pie()实例

文章目录4.2 go.Pie() 的基本饼图4.2.1 基本饼图4.2.2 样式饼图4.2.3 使用 uniformtext 控制文本字体大小4.2.4 控制饼图中的文本方向4.2.5 甜甜圈图4.2.6 从中心拉出扇区4.2.7 子图中的饼图4.2.8 自定义颜色集的子图4.2.9 绘制面积与总计数成比例的图表4.2.10 旭日图4.2.11 Da…

电脑软件、微信多开

因为办公需要在电脑上登录 2 个微信,但是直接双击微信图标只有 1 个登录界面,无法是现实登录 2 个微信。那么怎么才能在 1 个电脑上打开 2 个微信,方法有四种:1、安装;2、Enter;3、连续点击;4、…

『 canvas 特效』一文教你绘制绚丽的星空背景 TS + ES6

介绍 很久没有写关于 canvas 效果的文章了,刚好最近又学到了一个新的特效,使用 canvas 绘制多层次动态星空背景,今天就分享给大家。首先我们依旧来看一下最终实现的效果,如图所示: 由于录制 GIF 造成失帧,…

实战三十三:STAMP算法实现商品推荐实战 代码+数据

1.案例知识点 推荐系统任务描述:通过用户的历史行为(比如浏览记录、购买记录等等)准确的预测出用户未来的行为;好的推荐系统不仅如此,而且能够拓展用户的视野,帮助他们发现可能感兴趣的却不容易发现的item;同时将埋没在长尾中的好商品推荐给可能感兴趣的用户。STAMP推荐…

记录Win7系统下的node版本升级过程及后续项目启动所遇问题

目录 Windows7系统如何“安装”高版本Node 后续项目运行启动时遇到的问题 Bug : 背景 : 银行内网开发,接到一个新的项目开发,但前提因为开发所使用的云桌面更换了,由原来的Windows10系统降到了现在的Windows7系统&am…

【自媒体必备】AI文字转语音,支持多种人声选择,在线生成一键导出【电脑永久版】

AI文字转语音,支持多种人声选择,在线生成一键导出 软件是电脑版安装版本,大家根据自己安软件的习惯进行安装即可,安装后打开软件即可,且完全免费。语音选择方面就有晓晓、云扬、云希等等常用选择。点击后面的播放按钮…

腾讯大佬告诉你,写Python到底用什么IDE合适

不管你是 Python 新手还是老鸟,肯定纠结过一个问题: 到底用什么编辑器写 Python 代码好? 为此,我们调查了数十位鹅厂程序猿们爱用的 Python IDE,从他们对每款编辑器的看法中,也许能给你一点启示&#xff1…

我对程序员做副业有这几点建议

疫情这几年,“副业”的概念非常火。各大平台上都在说“副业赚钱”、“副业是刚需”等相关的内容、视频,有免费的,还有付费观看的。 其实在2020年疫情之前,大家对于“副业”并没有很关心。 从百度指数上可以明显看出,…

【笔记】Pade Approximations

1 pade approximations是什么? Pad Approximations是一种对pure delay使用常规传函进行近似替换的方法,matlab提供了的一个库函数pade。 在传递函数中,用e−τse^{-\tau s}e−τs表示纯延时pure delay环节,它对信号的幅值不会有任…

微服务框架 SpringCloud微服务架构 微服务面试篇 54 微服务篇 54.2 Nacos的服务注册表结构是怎样的? 54.2.1 多级存储模型

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务面试篇 文章目录微服务框架微服务面试篇54 微服务篇54.2 Nacos的服务注册表结构是怎样的?54.2.1 多级存储模型54 微服务篇…

《Redis实战篇》四、分布式锁

文章目录4.1 基本原理和实现方式对比4.2 Redis分布式锁的实现核心思路4.3 实现分布式锁版本一4.4 Redis分布式锁误删情况说明4.5 解决Redis分布式锁误删问题4.6 分布式锁的原子性问题4.7 Lua脚本解决多条命令原子性问题4.8 利用Java代码调用Lua脚本改造分布式锁4.1 基本原理和实…

Oracle时间函数

Oracle 时间函数INTERVAL间隔一年间隔一天间隔一小时间隔一分钟NUMTODSINTERVAL间隔一天间隔一小时间隔一分钟MyBatis xml 中计算时间间隔需要处理的问题INTERVAL 函数整合到 MyBatis$ 符号拼接 sql 源码追踪NUMTODSINTERVAL 函数整合到 MyBatisOracle 时间间隔函数有INTERVAL、…

%25 express 中的中间件

1、express 中的中间件 (1)、当客户端的请求到达 express 服务器后,会连续调用多个中间件,对请求进行预处理 (2)、本质是一个 function 处理函数(与普通路由函数相比,形参中多了 next 参数&…

深入分析广告和电商结合的逻辑,针对性推出一套广告电商方案

大家好,我是林工,本期林工给大家深入分析广告和电商结合的逻辑,针对性推出一套广告电商方案。 对于消费者来说,广告要发挥引导、刺激并满足消费者需求的作用,首先要使广告传播的信息引人注意,激发消费者购…

掌握Qt构造系统

1. 前言 ​对于日常在Qt或者Visual Studio等**集成开发环境(即IDE)**中编码的开发者来说,构造系统通常是比较容易被忽略的部分。集成开发环境配置简单,界面友好,可以提高开发效率。 ​随着对开发环境的深度使用&…

2.0、Hibernate-级联关系

2.0、Hibernate-级联关系 级联关系 中 最为常见的就是 -> 1、一对多关系 :一个消费者可以购买多个商品 -> 生成多个订单; 消费者是1,订单是多 那么在数据库中,1 的一方是主表,多的一方是从表,通过主外键关系去维…

C# Winform 三层架构

一、介绍 三层架构是 C# 桌面开发中比较常用的框架,是由 表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构组成,目的是为了 “高内聚,低耦合”。开发人员分工更明…

深度学习入门(六十五)循环神经网络——序列到序列学习(seq2seq)

深度学习入门(六十五)循环神经网络——序列到序列学习(seq2seq)前言循环神经网络——序列到序列学习(seq2seq)课件机器翻译seq2seq编码器-解码器细节训练衡量生成序列的好坏的BLEU总结教材1 编码器2 解码器…

为什么世界500强企业都要求员工必须学Python编程语言?

行业的更迭与进化并非虚无缥缈,它就发生在我们每天的生活中。当代最具竞争力的技能是什么?高盛、JP 摩根、麦肯锡等顶级公司纷纷给出了答案——编程。 今年新加入摩根大通的全部资产管理分析师必须强制学习编程语言,Python。 摩根大通资产管…

【Java异常】处理异常

一:异常的处理:抓抛处理 过程一:"抛":程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象并将此对象抛出一旦抛出对象以后,其后的代码不再执行 过程二:&…