发布于 

搭建自己的QQ机器人——玩客云折腾篇(1)

谁不想拥有一个自己的QQ机器人呢?

拥有一个自己的机器人,你需要做一点准备:

  • 一个QQ账号作为机器人(当然是小号啦)
  • 一个能接收验证的邮箱
  • 一个能触类旁通脑子和良好的心态

安装前的准备

安装远程文件管理,比如WinSCPSSH客户端,为了与WinSCP联动可以选择Putty,但作为颜值党的我选择了Windows Terminal,可在微软商店下载

WinSCP下载界面
WinSCP下载界面
Windows Terminal下载界面
Windows Terminal下载界面

Mirai安装

因为玩客云无法使用iTXTech MCL Installer一键安装环境,因此以下为手动安装步骤,该步骤都在/root文件夹下进行操作

  1. 安装Java
    下载JDK17(版本需要大于或等于11),然后使用WinSCP将压缩包上传到服务器,然后依次输入以下命令

    1
    2
    3
    4
    5
    6
    7
    #解压文件到/usr/bin目录下
    tar -xvf zulu17.34.19-ca-jdk17.0.3-linux_aarch32hf.tar.gz -C /usr/bin
    #安装openjdk
    update-alternatives --install /usr/bin/javac javac /usr/bin/zulu17.34.19-ca-jdk17.0.3-linux_aarch32hf/bin/javac 1
    update-alternatives --install /usr/bin/java java /usr/bin/zulu17.34.19-ca-jdk17.0.3-linux_aarch32hf/bin/java 1
    #检查是否安装成功
    java -version&&javac -version

    若看到以下输出则安装成功

    安装成功
    安装成功
  2. 安装Mirai Console Loader
    Releases中下载最新版本的MCL,用WinSCP创建一个名为qq的文件夹,进入qq文件夹,将下载的文件拖进去,然后执行下面的命令

    1
    2
    3
    4
    5
    6
    #解压
    unzip mcl-1.2.2.zip
    #赋予mcl文件可执行权限
    chmod +x mcl
    #运行mcl
    ./mcl

    然后等待程序进行自动安装,成功安装的情况大致如下图

    安装成功
    安装成功
  3. 进行登录测试
    论坛上关于登录的题十分不建议在服务器上进行首次登录,如果你介意的话先阅读帖子里的相关事项再可进行下面的操作

    1
    2
    #模拟安卓手机进行临时登录
    /login QQ账号 QQ密码 ANDROID_PHONE

    如下图则为登录成功。红字部分为Slf4j相关,不影响使用,如果介意的话可以看下面的项目进行操作。

    登录测试成功
    登录测试成功
  4. 正式登录QQ账号

    1
    2
    3
    4
    #正式登录
    /autologin add QQ账号 密码
    #配置该账号自动的登陆设备
    /autologin setconfig QQ账号 protocol ANDROID_PHONE
    成功正式登录并配置
    成功正式登录并配置
  5. 权限管理
    为方便自己后续对插件的管理,建议给足自己权限,就像Linux中的root账户一样

    1
    /perm permit u你的QQ大号 *:*

    至此Mirai安装完毕,输入stop即可退出Mirai控制台

插件安装

注意

Mirai只是一个框架,需要通过安装插件以实现各种功能

该步骤都在/root/qq下进行,除了输入命令,其余操作均可通过WinSCP可视化操作

首先建议安装这两个插件,提供聊天时对机器人进行控制和其他编程语言的支持,插件会在下次启动MCL后完成安装

1
2
./mcl --update-package net.mamoe:chat-command --channel stable --type plugin
./mcl --update-package net.mamoe:mirai-api-http --channel stable-v2 --type plugin

对于其他插件,我以搭建群聊机器人为例子,下面的两个插件均来自Mirai论坛大佬@TSUDZUKI

先到茉莉云注册一个账号,注册只需要进行邮箱验证。免费账户只能创建一个机器人,一个知识库(只能添加100条词目且只支持文本内容),500次API调用次数。进入控制台创建一个机器人,然后根据自己的喜好填好相关资料,接着在Api一栏中获取自己的ApiKeyApiSecret

创建机器人
创建机器人
填写资料
填写资料
Api
Api

然后下载茉莉云聊天机器人插件,将jar文件上传到plugins文件夹中,然后运行一次MCL,退出,接着进入config/org.laolittle.plugin.molly.Molly文件夹,对MollyConfig.yml配置文件进行修改,将前面获取的相关Api信息填入,其余的根据自己的情况修改

修改配置文件
修改配置文件

现在一个基本的聊天机器人就搭建成功了。借助茉莉云,我们可以方便地在网页控制台对机器人的词库等进行设置

词库设置
词库设置

AutoGroup折磨群友插件的安装方法类似,我的建议是任何插件都需要停止后再进行配置,不然容易出现奇怪的问题

使用一段时间后会发现机器人有时会将你的聊天指令理解为聊天对话,机器人把本应该做出对应确定的行为变成了不可测的对话,为什么会出现这种回复不准确的结果呢?除了修改聊天指令,还可以设置知识库的权重和准确率,对于两者的区别,官方文档有提到

官方文档

知识库的权重设置有什么用?
用户的每个知识库都可以自己设置它的权重,一共有5个档,分别为极低、较低、正常、较高、极高,从左到右,权重依次升高,系统默认的知识库都是正常档。

知识库权重越高,此知识库对应的词库优先级也就越高。比如知识库A和知识库B,都设有一个提问:「你好啊」,假如知识库A比知识库B的权重高,那么机器人在引用了这两个知识库的情况下,会优先使用知识库A对应的回答。

注意:知识库权重高,就不一定此知识库的词库在任何情况下都会优先,还是得看具体都语义,只有语义相近的情况下,才会优先。

提示:知识库权重高不是设置的越高就会越好,请合理设置;

例如,设置系统默认知识库权重是较低档,自己添加一个知识库A是极高档,假如用户提问:你今天吃饭了嘛,默认库有一个词库是今天吃饭了没,知识库A有一个词库是今天不想吃饭,这个明显默认知识库的回复更合适,但是因为权重设置问题,可能会导致知识库A的词库加分高,机器人回复的是知识库A的回答;

所以闲聊库与默认库基本一致就行,不需要过多设置,当你的知识库是某垂直领域的问答,这时您才考虑适当调高知识库的权重。

知识库的精确度设置有什么用?

AI智能聊天插件在回答问题的时候,会计算词库和提问语义的匹配度,匹配度从0到100%,匹配度越高,语义相似度也就越高;

之前知识库没有这个设置,系统有一个默认的匹配度阈值,低于这个值,则不会被触发,当所有词库都没有达标,则机器人使用万金油回复;

现在这个设置加上之后,用户可以自己控制这个精确度(也就是匹配度阈值),精确度设置最低值为10%,最高为100%,100%表示知识库的词库和提问完全匹配才会触发,请谨慎设置,这将影响机器人的回复结果。

提示:知识库精确度不是设置的越高就会越好,请合理设置;

例如,设置知识库A的精确度为100%,假如用户提问:你今天吃饭了嘛,知识库A有一个词库是今天吃饭了没,这个匹配度大概有80%左右,但是小于知识库A的精确度设定,则不会被触发;

所以知识库一般情况精确度默认就行了,不需要过多设置,当你的知识库需要高精度匹配,甚至要求词库与提问语句完全相同时,这时您才考虑适当调高知识库的精确度。

进程守护

如果不需要查看控制台中的详细信息或者开机自启,可通过Systemd进行管理

1
2
# 编辑配置文件
vim /etc/systemd/system/qq.service

加入以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Unit]
Description=MCL
After=network.target
Wants=network.target

[Service]
WorkingDirectory=/root/qq
ExecStart=/root/qq/mcl
Restart=on-abnormal
RestartSec=5s
KillMode=mixed

StandardOutput=null
StandardError=syslog

[Install]
WantedBy=multi-user.target

启用服务

1
2
3
4
5
6
# 更新配置
systemctl daemon-reload
# 启动服务
systemctl start qq
# 设置开机启动
systemctl enable qq

管理命令

1
2
3
4
5
6
7
8
# 启动服务
systemctl start qq
# 停止服务
systemctl stop qq
# 重启服务
systemctl restart qq
# 查看状态
systemctl status qq

结尾

更多玩法和插件可以自己上Mirai论坛浏览探索,我这里只是简单介绍一下。另外因为机器人可以看到所有消息记录,即使玩客云在局域网中运行,也一定要做好基本服务器的安全防护!

参考资料

Arm-Linux设备安装JDK总结
Cloudreve进程守护
Mirai docs