QQ聊天机器人(接入ChatGPT)

更新记录


V1.0

成功搭建QQ机器人,接入ChatGPT的API

机器人QQ号:2641924697

可以选择与机器人私聊或者在群中@机器人进行提问(tips:在群聊中@机器人提问时,转发消息中的@无效)

提问时直接输入想要提问的问题即可

V1.1

新增功能:

聊天过程机器人可以联系上下文作出回答

用户发送“再见”时或累计发送词数超过1024时自动清除聊天记录(之前发送的消息无法在之后的提问中进行复现)

漏洞修复:

修复了无法识别提问信息中“+”符号的bug


项目搭建过程


想法来源

事实上,在ChatGPT的整体使用过程中,对于稳定的科学上网渠道始终有着一定的要求,一些客观因素日益严苛的限制条件使得使用的体验与便捷度并不尽如人意。基于这样的考量,同时也是受到软件设计老师提供的公用ChatGPT对话脚本(现已无法使用)的启发,决定基于python并利用网上开源的go-cqhttp和OpenAI官网提供的API接口使用方法例程等资源搭建QQ端的接口,使得更多人能够更加便捷地享受这一空前的语言模型带来的巨大红利。

具体实施

在利用ChatGPT进行咨询学习的过程中,我也意识到网页端ChatGPT使用的繁琐与不稳定,同时其使用也具有一定的门槛。虽然随着API的开放,国内也有很多镜像资源以及免费的平台可以实现与AI的交流,但对于大多数人来说,许多黑心商家利用ChatGPT外接套壳赚钱的现状还是让大家对于ChatGPT望而生畏。对于我个人而言,也是为了让自己能够更加便捷地与ChatGPT沟通进行学习,希望通过python脚本,利用QQ平台搭建机器人接通ChatGPT的API,以实现与ChatGPT更加快捷方便的沟通,并进一步方便更多的人。

整体架构搭建思路如下图所示。

1

获取API-KEY

由于本人的账号没有免费额度,特地从淘宝购入了大额度的api-key(实测可用)以进行进一步的搭建。

Django服务端接口的搭建

结合OpenAI官网提供的接入api-key的相关代码样例,完成了这一部分的搭建,通过运行manage.py服务器脚本,实现了在全局代理的前提下利用api-key通过本地8000端口与ChatGPT实现通信。

接入noneBot机器人聊天逻辑

借助现成的noneBot机器人聊天逻辑框架,将其接入上述已连接ChatGPT API服务的Django服务器端口实现机器人进一步构建;运行bot.py脚本即可打开聊天机器人终端。

利用go-cqhttp工具连接QQ

借助开源的go-cqhttp程序工具,实现QQ账号的登入并接入以上利用noneBot创建的机器人,即可将ChatGPT语言模型顺利接入该QQ账号,并使用其他QQ账号通过该账号与ChatGPT实现沟通。

下图是与我们接入的聊天机器人进行沟通的部分聊天记录。

2

迭代与优化

通过上述流程,基本完成了接入ChatGPT的QQ聊天机器人的架构。在接入完成后,第一时间邀请了部分同学通过与机器人交流进行实际测试,反馈出了如下问题,并在当前的发行版本中予以修正。

该项目代码已在github中开源,并将根据进一步的测试结果不断迭代更新。

仓库地址:Asgard-Tim/ChatGPT-QQBOT: 重庆大学明月科创实验班个性化实践 (github.com)

提问关键词限制问题

出于安全性以及防止误操作等考量,在noneBot机器人聊天逻辑设置时,我们特地设置了需要通过在问题前键入关键字“ChatGPT”才能对于机器人进行提问,否则会提示“命令格式错误”;但在实际使用中,我们发现每次都需要进行这样的额外键入无疑给沟通带来了不必要的麻烦,并最终对于机器人聊天逻辑部分__init__.py内的代码进行了修改,删去了额外键入关键词的限制,可以直接对机器人进行提问。

联系上下文问题

在测试过程中,部分用户反馈,该机器人无法像正常的人类一样联系聊天过程中的上下文给出回答。针对这一问题,对代码进行修改,储存用于每一次问和答得记录并在下一次提问时一并向服务器发送,从而实现该功能。但是,这样的方式无疑加剧了服务器的处理压力,一旦累积的消息记录过多,会对机器人的回答效率造成很大影响,且对于接入账户的额度消耗较大。目前联系上下文功能已经实装,在消息记录达到一定数量后清空从而保证回答效率,但仍需进一步优化。

漏洞修复:“+”号的识别

在实际测试中,部分用户将运算式输入聊天框,希望通过ChatGPT得到正确的计算结果。但由于对于输入信息的编码存在漏洞,导致输入信息中的“+”号无法被识别并传输到服务器端发送给ChatGPT,从而输出了错误的结果。结合跟网页版ChatGPT的沟通学习后,修改了对应部分的代码,成功在noneBot聊天逻辑中改变了输入信息的编码方式,使得“+”号得以保留从而得到正确结果。

0730更新

新问题:无法正确识别消息换行之后的左右内容(待修正)

未来规划


机器人持续优化

未来打算将机器人推广到更大的测试范围,让更多的朋友能够便捷地用上ChatGPT进行交流学习,因此需要在输入信息处理等方面进行进一步的规范与优化以提高效率。短期内的优化目标是将不同QQ好友的信息分开在不同的服务器端口进行处理与储存,并设置一定的安全防护措施(如用户密码等)。

机器人远程部署

要实现QQ机器人的长期在线,目前还需要在本地电脑上运行脚本才能实现整体的构建以及与QQ客户端的连接;为减轻本地内存压力,计划将优化后的机器人放置至远程服务器中运行从而持续稳定地提供接入ChatGPT的聊天服务。

嵌入硬件实体

目前的聊天机器人仅仅是建立在QQ客户端上的,而在实际的运用当中ChatGPT可以在更为广泛的人机交互层面得到运用。因此,可以借助ChatGPT提供的现成模型,将聊天机器人接入硬件层面的机器人或产品实体中,从而进一步提升交互性与趣味性,增加附加值。

训练并使用自己的模型

事实上,在OpenAI的官方文档中,还给出了根据自身需求投喂数据样本进行训练的方法与对应代码。在未来的产品中,如果我们需要嵌入聊天机器人,可以通过这样的方式训练更加个性化与更具针对性的模型,根据不同的产品需求定制自己的接口与聊天机器人,使其更加灵活自然。

QQ聊天机器人(接入ChatGPT)

http://asgard-tim.github.io/2023/06/27/chatbot/

作者

明诚

发布于

2023-06-27

更新于

2023-08-04

许可协议

评论