基于PaddleHub的QQ聊天机器人

一. 项目背景

本项目是参加【AI达人特训营】的作品。
当你在和朋友在QQ群里划水摸鱼时,你是否会感到有一丝枯燥,没事别担心。为了增加群友们的划水乐趣,提高群友的文化水平。笔者在这里简单搭建了一个QQ聊天机器人,这个bot的功能包括但不限于实时聊天,自由问答,百度百科,对联生成等。

二. 项目方案

本项目是基于go-cqhttp和PaddleHub以及flask实现的QQ机器人项目
go-cqhttp是用来模拟QQ登录并获取QQ信息的开源软件

PaddleHub我选择了Plato-mini预训练模型,生成对话,还有ernie_zeus大模型实现对联生成和自由问答

Flask是一个轻量级的基于python的web框架,我们使用它来搭建机器人的后端系统

三. Plato-mini预训练模型的介绍和本地安装

近年来,人机对话系统受到了学术界和产业界的广泛关注并取得了不错的发展。开放域对话系统旨在建立一个开放域的多轮对话系统,使得机器可以流畅自然地与人进行语言交互,既可以进行日常问候类的闲聊,又可以完成特定功能,以使得开放域对话系统具有实际应用价值。
plato-mini包含6层的transformer结构,头数为12,隐藏层参数为768,参数量为89M。该模型在十亿级别的中文对话数据上进行预训练,通过PaddleHub加载后可直接用于对话任务。

#安装paddlepaddle 和 paddlehub
#在本地安装需要去掉!哟
!pip install --upgrade paddlepaddle -i https://mirror.baidu.com/pypi/simple
!pip install --upgrade paddlehub -i https://mirror.baidu.com/pypi/simple
#先来在体验一下安装plato-mini模型
!hub install plato-mini==1.0.0
# 进入交互模式
# 第一次进入可能会比较慢,需要下载参数文件。
import paddlehub as hubmodel = hub.Module(name='plato-mini')
with model.interactive_mode(max_turn=3):while True:human_utterance = input("[Human]: ").strip()robot_utterance = model.predict(human_utterance)[0]print("[Bot]: %s"%robot_utterance)

四. 关于go-cqhttp

1. 下载go-cqhttp

首先我们去官网下载go-cqhttp,官网地址在这点击

进入官网后我们可以看到,发行下载这个选项,点击进入。

接着我们进来了go-cqhttp的储存库向下划即可看到各种各样版本的go-cqhttp。

下载这个go-cqhttp_windows_amd64.zip文件就行,如果想部署到服务器上就下载linux版本的。

2. 安装go-cqhttp

下载到本地后我们解压文件并进入文件夹,

点击exe文件后会弹出这个提示选择确定,然后再确定。

完成上述的操作后会生成go-cqhttp.bat文件,我们点击这个文件:

点击bat文件进入后,会弹出命令行窗口,我们输入0在按回车,选择http通信

3. 配置go-cqhttp文件

接下来会看见文件夹下有config.yml的文件生成,我们点击进入修改配置:

进入config.yml文件后我们需要修改一下配置:

uin是机器人的QQ号password是QQ号的密码
下滑倒配置文件最下面去掉-url和secret前的#。(注意要持缩进一致,如果缩进不一致会导致配置文件不合法,无法生效,这里推荐用VScode自动提示缩进对齐。)


基本配置已经完成接下来直接打开go-cqhttp.bat就行了,
进去是这样的效果。

五. Flask搭建后端监听平台

当我们安装好go-cqhttp和plato后,我们可以继续在电脑上搭建一个后端的监听平台来获取信息调用以及调用模型

首先导入我们需要的库
如果没有可以选择pip安装

关于下面url发送群消息使用send_group_msg,group_id则对应发送的QQ群号
发送私聊消息使用send_private_msg,user_id则对应发送的QQ号
requests.get(url=‘http://127.0.0.1:5700/send_group_msg?group_id=761150083&message=’ + robot_utterance )

from flask import Flask,request
import requests
import paddlehub as hub
app = Flask(__name__)
model = hub.Module(name='plato-mini')
@app.route('/', methods=["POST"])
def post_data():message = ' 'if request.get_json().get('message_type') == 'group':uid  = request.get_json().get('sender').get('user_id')message = request.get_json().get('raw_message')print(message)if  message.split(' ')[0] =='聊天':with model.interactive_mode(max_turn=3):human_utterance = message.split(' ')[1]robot_utterance = model.predict(human_utterance)[0]requests.get(url='http://127.0.0.1:5700/send_group_msg?group_id=761150083&message=' + robot_utterance )return "OK"
if __name__ == '__main__':pp.run(debug=True, host='127.0.0.1', port=5701)

运行我们的后端平台,就可以开始聊天了

六. 调用ernie_zeus模型

这里先简单介绍一下ernie_zeus模型

ERNIE 3.0 Zeus 是 ERNIE 3.0 系列模型的最新升级。其除了对无标注数据和知识图谱的学习之外,还通过持续学习对百余种不同形式的任务数据学习。实现了任务知识增强,显著提升了模型的零样本/小样本学习能力。
ERNIE 3.0 Zeus提供很多API接口写作文,写文案,对联等功能。读者如果有兴趣的话可以去这个项目了解PaddleHub:使用 ERNIE 3.0 Zeus 大模型进行高质量文本生成。
我们简单介绍一下API的调用。

申请API的ak和sk

首先点击链接进入官网:
文心大模型官网
点击开放API下的ERNIE 3.0 文本理解与创作

然后,点击右上角的登录,使用百度账号等即可登录,登录后可以看到查看AK/SK这个选项点击即可

可以看到有创建API key这个选项,点击就会生成API Key 和 Secret key这就是我们所需的ak和sk了。

调用作文创作API

作文创作
请设置 ‘ak’ 和 ‘sk’ 参数
ak和sk的参数可以去文心的官网申请https://wenxin.baidu.com/

import paddlehub as hub
model = hub.Module(name='ernie_zeus',ak ='' ,sk  ='')
result = model.composition_generation(
text="论诚信")
print(result)

调用对联生成API

调用对联生成的API ak和sk同上

import paddlehub as hub
model = hub.Module(name='ernie_zeus',ak ='' ,sk  ='')
result = model.couplet_continuation(
text='年年岁岁花相似')
print(result)

将调用的API接入我们的后端框架

model1 = hub.Module(name=‘ernie_zeus’,ak =‘’ ,sk =‘’)
调用对联生成,为了方便我将模型初始化放在了开头

if request.get_json().get(‘message_type’) == ‘group’:
用来判断是否为群聊信息,
如果需要判断是否为好友信息可以将’group’替换’private’
这个if语句是为了打印出我们在后台监听的消息

if message.split(’ ')[0] ==‘聊天’:
此处我们将收到的消息进行分割,并判断获取聊天内容,通过模型预测发送预测结果

from flask import Flask,request
import requests
import paddlehub as hub
app = Flask(__name__)
model = hub.Module(name='plato-mini')
model1 = hub.Module(name='ernie_zeus',ak ='' ,sk  ='')@app.route('/', methods=["POST"])
def post_data():message = ' 'if request.get_json().get('message_type') == 'group':uid  = request.get_json().get('sender').get('user_id')message = request.get_json().get('raw_message')print(message)if  message.split(' ')[0] =='聊天':with model.interactive_mode(max_turn=3):human_utterance = message.split(' ')[1]robot_utterance = model.predict(human_utterance)[0]requests.get(url='http://127.0.0.1:5700/send_group_msg?group_id=761150083&message=' + robot_utterance )if message.split(' ')[0] == '对联':result = model1.couplet_continuation(text=message.split(' ')[1])requests.get(url='http://127.0.0.1:5700/send_private_msg?user_id=1018875507&message='+result)if message.split(' ')[0] == '作文':result1 = model1.composition_generation(text=message.split(' ')[1])requests.get(url='http://127.0.0.1:5700/send_private_msg?user_id=1018875507&message='+result1)return "OK"
if __name__ == '__main__':app.run(debug=True, host='127.0.0.1', port=5701)

后台启动后效果如下:

我们前端QQ界面的效果如下:

当然了我们也可以加入一点其他东西,比如百度百科的爬虫

#爬虫
import urllib.request
import urllib.parse
from lxml import etree
import requestsdef query(content):# 请求地址url = 'https://baike.baidu.com/item/' + urllib.parse.quote(content)# 请求头部headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}# 利用请求地址和请求头部构造请求对象req = urllib.request.Request(url=url, headers=headers, method='GET')# 发送请求,获得响应response = urllib.request.urlopen(req)# 读取响应,获得文本text = response.read().decode('utf-8')# 构造 _Element 对象html = etree.HTML(text)# 使用 xpath 匹配数据,得到匹配字符串列表sen_list = html.xpath('//div[contains(@class,"lemma-summary") or contains(@class,"lemmaWgt-lemmaSummary")]//text()')# 过滤数据,去掉空白sen_list_after_filter = [item.strip('\n') for item in sen_list]# 将字符串列表连成字符串并返回result = ''.join(sen_list_after_filter)requests.get(url='http://127.0.0.1:5700/send_private_msg?user_id=1018875507&message=' + str(result))

效果如下

七. 项目总结

本项目只是在本地搭建了一个QQ机器人,实现了人机对话的能力,整个项目的源码已经放在目录work的bot文件夹下了。当然也有百度百科,写作文这些趣味性的能力,但是对话模型较小,聊天内容有些单调和重复,相信这些功能可以在你平常娱乐时增添几分不一样的色彩,如果感兴趣的话,可以在上述内容中接入天气预报API,接入文心模型的绘画API。当然你也可以把机器人部署到服务器上,这样就能24小时与机器人快乐的学习了。

关于作者

项目作者: 姓名:李俊 AI Studio昵称:封刀隐没 个人主页

飞桨导师: 姓名: 黄灿桦 AI Studio昵称:炼丹师233 个人主页

传说中的飞桨社区最菜代码人,让我们一起努力!
记住:封刀隐没出品必是精品 (不要脸系列)

此文章为搬运
原项目链接

基于PaddleHub的QQ聊天机器人相关推荐

  1. 基于Nonebot2实现QQ聊天机器人商品查询【Nonebot插件教程】

    文章目录 前言 商品页面分析 插件编写 彩蛋 前言 本插件是基于Nonebot2 的QQ聊天机器人.通过集成京东商品爬虫,将京东网站中的优质产品推荐给用户,本文对京东官网源码信息进行了分析,并附上了完 ...

  2. python环境-基于go-cqhttp-简易qq聊天机器人

    目录 一.准备 1.python环境 2.go-cqhttp插件 二.配置 1.go-cqhttp配置 3.使用 sanic 来启动 Websocket 服务 三.启动 1.win端 四.linux服 ...

  3. 部署一个基于ChatGPT的微信聊天机器人以及产生的思考

    文章目录 前言 功能 反响 思考 这篇文章主要展示了基于ChatGPT的微信聊天机器人的效果,以及在部署过程中我产生的一些思考.部署一个这样的机器人的具体方法我过两天会单独写一篇文章. 前言 最近几个 ...

  4. 机器人聊天软件c#_C#制作简易QQ聊天机器人

    最近对QQ聊天机器人比较感兴趣,奈何一直没找到C#的源码,就自己摸索,好了废话不多说了,开始正题. 首先我们要准备的是C# 的SDK下载地址:http://pan.baidu.com/s/1geW0X ...

  5. 我用 tensorflow 实现的“一个神经聊天模型”:一个基于深度学习的聊天机器人

    我用 tensorflow 实现的"一个神经聊天模型":一个基于深度学习的聊天机器人 个工作尝试重现这个论文的结果A Neural Conversational Model(aka ...

  6. 【NLP实战】如何基于Tensorflow搭建一个聊天机器人

    实战是学习一门技术最好的方式,也是深入了解一门技术唯一的方式.因此,NLP专栏计划推出一个实战专栏,让有兴趣的同学在看文章之余也可以自动动手试一试. 本篇介绍如何基于tensorflow快速搭建一个基 ...

  7. webqq2协议分析和qq聊天机器人简单实现(转)

    webqq2协议分析和qq聊天机器人简单实现 转之http://hfutxf.javaeye.com/blog/800866 通过webqq接口,可以实现发送qq消息接收qq消息等,这样,想实现一个q ...

  8. python qq聊天机器人_Python QQBot库的QQ聊天机器人

    本文实例为大家分享了Python QQBot库的QQ聊天机器人的具体代码,供大家参考,具体内容如下 1.安装 pip install qqbot 2.主动发出消息 from qqbot import ...

  9. aiml php,chatbot:基于 AIML 的 PHP 聊天机器人

    原标题:chatbot:基于 AIML 的 PHP 聊天机器人 紧跟技术风向标,不迷失但也绝不落后,Go技术大全公众号正式开启,欢迎关注. 基于AIML的PHP聊天天机器人 0. 介绍 该聊天机器人是 ...

最新文章

  1. 收藏吧!产品再要求实现这个功能,就把这篇转给他!
  2. 正则表达式全部符号详解
  3. 音视频技术开发周刊 80期
  4. C++ 线程安全的单例模式
  5. 椭圆极点极线性质_笔记:关于极点极线的一些思考
  6. mysql workbench for ubuntu测试
  7. 打造数据中心的软实力
  8. Kotlin学习笔记17 反射Part1
  9. java中创建类的时候有没有分配内存,你必须了解的java内存管理机制(一)-内存分配...
  10. vs binsum
  11. 恒压板框过滤实验数据处理_中学少见、高考常考的化学实验仪器
  12. (Oracle、SqlServer、Access)数据库开发代码生成工具SharpCode2.0
  13. 生鲜APP软件功能开发
  14. 个人博客管理系统详解
  15. sed 替换文件中的字符串
  16. 速卖通尺寸表 html源码,最新!速卖通尺码表功能上线
  17. (predicted == labels).sum().item()
  18. Google Guava 的 5 个鲜为人知的特性
  19. 5G智慧灯杆网关的行业应用与前景
  20. 斐波那契数列 python 高阶解法

热门文章

  1. libtorch模型推理例程
  2. 打卡机的设计——基本功能
  3. 如何登录锐捷设备(智慧教室篇)
  4. ArcGIS教程:制作风或水流速流向图
  5. python通过ssh连接linux,执行命令
  6. Python基础教程(第3版)中文版 第一章 快速上手:基础知识(笔记)
  7. Matlab二维热传导方程求解
  8. IDEA抛出No bean named ‘cacheManager‘ available解决方法
  9. 泡泡机器人SLAM公开课链接(实时更新中)
  10. Ubuntu学习 wc