@dqfe123 只是训练NLG的语言模型啊,不是对话机器人。
而且目的只是为了模仿群友说话,并非特定业务的问答和回复,每条信息都作为上一条的回答和下一条的问题即可,只不过训练效率会比较低。
Mitr-yuzr 发布的帖子
-
RE: 关于将QQ机器人与深度学习NLP结合的可能性
-
RE: 关于将QQ机器人与深度学习NLP结合的可能性
@Koreyoshi 想请教一下使用的是哪种模型,有没有使用预训练的模型和对聊天记录进行预处理呢?
个人感觉选群的影响也比较大,我个人觉得偶像或者主播的粉丝群一类的群能解决聊天比较杂和数据量过少的问题。抽象在现代聊天基本不可避免,太过抽象的话预处理确实可能会起到反效果,训练出来效果肯定也会变差,假如是完全端对端的模型不知道能不能解决这个问题。 -
RE: 关于将QQ机器人与深度学习NLP结合的可能性
@RainChan 就我那小服务器哪敢跑啊,想白嫖云端算力但是我还不知道怎么给飞桨、colab和kaggle之类的算力平台更新数据。感觉唯一能想到的方法就是定时推到云盘然后云端定时获取了orz
-
关于将QQ机器人与深度学习NLP结合的可能性
自动记录群友的消息,并在预训练语言模型的基础上迁移学习群友的聊天记录,训练语言模型并进行简单的文本生成
上面提到的只是个想法。
想法来源是最近在阅读NLP相关书籍的时候想到,群里每天聊天记录那么多,用QQ机器人可以很方便的收集信息,既然有那么多
法典优质语料,有没有办法让两者结合起来,训练一个模仿群友说话风格的AI呢?其实我第一反应是想到之前在论坛里见到过的Chat-Learning插件,结果我打开才发现并不是真正的机器学习。
大致了解了一下,之前也有大佬做过mirai的py的简单api项目myrai,正好功能完全足够了。
考虑到如果放在某偶像粉丝群或者虚拟主播粉丝群之类的地方,说话风格比较统一
(都载着理发店),一天也能有1000-2000条消息,过滤掉图片和一些不适合训练的消息的话,一段时间下来的数量也是可观的,模型可能大概15天~1个月就可以收敛了。大致需要实现的功能就是记录群友说话,然后定时同步到云端算力平台进行预处理和训练。如果数据量不大的话也可能可以直接用myrai写插件,然后插件定时直接在本地训练,因为是每天都训练一次,一次大概就两三个epoch,时间十分充裕,对算力要求也就没那么高。
个人感觉还是有可能实现的,但是由于数据量其实还是太少,模型也不可能多复杂,效果估计一般,假如能训练出来,模型生成的文本能正常对偶像和主播示爱就已经够逆天了,也不指望训练seq2seq之类的聊天机器人了
-
WhoIsSpy - 谁是卧底小游戏插件
谁是卧底
适用于 Mirai 的谁是卧底小游戏插件
Github Project
Release
说明
虽然其他大佬做过谁是卧底的插件了,但是问题实在太多,且游玩不便,因此自己重写了一个,已经测试过了能正常游玩。
本插件目的是为了方便发词条、流程控制、统计投票与判断输赢,具体游戏内容仍需玩家自己进行和维护。
进行游戏最少需要四名玩家,不需要权限和调用命令,请注意设置的命令不要重复或是与其他插件重复。
添加词库请自行在
\data\net.reincarnatey.spy\SpyData.yml
中追加。使用方法
使用前
请确保
SpyData.yml
词库内存在词条,否则无法正常开始游戏。可下载 Release 中附带的
data.zip
(从网络中收集的约500个词的词库),并将其解压到mcl根目录下。游戏规则
标准模式下,每个玩家会拿到自己的词条,其中卧底的词条与其他人的不一样!每个玩家需要轮流描述自己的词,描述不能重复,若出现自己的词则直接判输。之后进行投票选出卧底。票数最多的玩家将会被淘汰。一直重复下去,直到卧底被淘汰或卧底的人数占剩余玩家总数大于等于三分之一。
胜利目标
普通玩家: 将所有卧底淘汰
卧底: 存活到最后
白板: 存活到最后创建游戏
在聊天内发送
创建谁是卧底
即可,接下来进入准备流程。也可发送
谁是卧底规则
查看游戏规则,或发送结束谁是卧底
来强制结束游戏。准备流程
发送
加入
即可加入游戏中,可发送当前玩家
可查看已加入的玩家。发送
模式 编号
可以切换至对应的模式默认为标准模式,可通过"模式 1/2/3"切换至其他模式
1.标准模式: 仅有1个卧底
2.多卧底模式: 适用于人较多的情况,四分之一玩家为卧底
3.随机白板模式: 将随机一部分玩家为白板(不超过四分之一)特殊模式: 所有玩家均为白板。可输入114514切换至该模式,也会随机强制进入该模式(不提醒)。可通过设置配置项的specialModeOdds来修改概率,概率为0时为不启用该模式。
当 玩家人数 ≥ 4 时,可发送
开始
以开始游戏。词条分发
将会自动私聊每一位玩家发送该玩家的词条 (若为白板则无词条内容,但是会发送私聊提醒)。
为避免收不到消息的特殊情况,推荐所有玩家开始游戏前先添加好友。描述阶段
未被淘汰的每名玩家需要轮流用一句话描述自己的词语。
插件只会记录是否所有人都发言过了,需要玩家自觉按序描述,不推荐该阶段进行交流。
如果描述中包含有该玩家的词语,则会直接判为违反规则并立即结束游戏。当剩余所有玩家都描述后,由其中一名玩家发送
结束
以结束描述阶段。投票阶段
未被淘汰的每名玩家需要发送
投票 编号
进行投票。该阶段可进行交流分析和推理。
淘汰的玩家不可投票,玩家不可投给淘汰的玩家,玩家可以投给自己,当玩家投给编号0时表示弃票。最后获得票数最多的被淘汰,平票时不淘汰,剩余玩家回到描述阶段继续进行游戏,直到满足游戏结束条件。
剩余3名玩家、卧底被淘汰、卧底人数大于等于剩余玩家总数的三分之一
游戏结束
结束时会公开普通词条与卧底词条,并公开所有参与玩家的身份。
之后可再次通过创建谁是卧底
重新开始游戏。插件配置
位于
\config\net.reincarnatey.spy\SpyConfig.yml
# 创建触发器 createTriggers: - 创建谁是卧底 # 加入触发器 joinTriggers: - 加入 - 加入谁是卧底 # 当前玩家触发器 showTriggers: - 当前玩家 - 玩家列表 # 切换模式触发器 modeTriggers: - 模式 - 切换模式 # 开始触发器 startTriggers: - 开 - 开始 - go # 描述结束触发器 nextTriggers: - 结束 # 投票触发器 voteTriggers: - 投票 - vote - 投 # 强制结束触发器 stopTriggers: - 结束谁是卧底 # 规则触发器 ruleTriggers: - 谁是卧底规则 # 创建消息 createMessage: "创建成功~\n请输入\"加入\"加入游戏!\n人数大于三人后可输入\"开始\"开始游戏!" # 重复创建消息 alreadyCreateMessage: "游戏已存在!当前玩家{num}人,可\n请输入\"加入\"加入游戏!输入\"谁是卧底规则\"查看规则,\n人数大于三人后可输入\"开始\"开始游戏!" # 加入消息 joinMessage: "加入成功~\n当前玩家{num}人" # 重复加入消息 alreadyJoinMessage: "你已经加入过了!\n当前玩家{num}人" # 游戏进行中消息 inGamingMessage: 游戏正在进行中! # 当前玩家消息 showMessage: '当前玩家: {player_list}' # 词条消息 wordMessage: '你的词条: {word}' # 白板消息 whiteMessage: 你的词条——欸?!你没有词条呢,多观察一下他人的发言并模仿吧! # 强制结束消息 stopMessage: 游戏已结束! # 模式提醒消息 modeMessage: "默认为标准模式,可通过\"模式 1/2/3\"切换至其他模式\n1.标准模式: 仅有1个卧底\n2.多卧底模式: 适用于人较多的情况,四分之一玩家为卧底\n3.随机白板模式: 将随机一部分玩家为白板(不超过四分之一)" # 切换模式消息 switchModeMessage: '已切换至{mode}!' # 模式不存在消息 noModeMessage: 该模式不存在! # 特殊模式消息 specialModeMessage: 游戏模式好像变得奇怪了! # 卧底胜利消息 spyWinMessage: 游戏结束啦!卧底获得胜利! # 卧底失败消息 spyLostMessage: 游戏结束啦!卧底输了! # 特殊模式结束消息 specialModeEndMessage: 游戏结束啦!本轮没有玩家获胜,因为本轮为【特殊模式】,全部玩家都是白板! # 不知道谁赢消息 normalEndMessage: "游戏结束啦!以下玩家获得胜利:\n{win_list}" # 描述阶段消息 descriptionMessage: "描述阶段!请按照以下顺序轮流用一句话描述自己的词语(但不可以包含自己的词语),所有人均描述完毕后发送\"{nextTriggers}\"进入下一阶段。\n{player_list}" # 投票消息 voteMessage: "投票阶段!请输入\"投票 编号\"进行投票,所有人均描述完毕后自动进入下一回合。\n0. 弃票\n{player_list}" # 规则 rule: 标准模式下,每个玩家会拿到自己的词条,其中卧底的词条与其他人的不一样!每个玩家需要轮流描述自己的词,描述不能重复,若出现自己的词则直接判输。之后进行投票选出卧底。票数最多的玩家将会被淘汰。一直重复下去,直到卧底被淘汰或卧底的人数占剩余玩家总数大于等于三分之一。 # 强制进入特殊模式(不通知)的概率,可填0-100,对应0%-100%的概率,为0时就是禁用特殊模式 。特殊模式: 所有玩家均为白板,只剩下3名玩家时结束。该模式也可通过"切换模式 114514"进入。 specialModeOdds: 5 # 私聊发送消息间隔时间 (防被封) delay: 1000
声明
本开源插件仅为个人使用而编写,遵循
Apache Licence2.0
开源协议,发布至 MiraiForum ,禁止用于任何违法法律法规、社区规定、网站规则的行为,若出现问题本人概不负责。qwq
本项目开源,需要功能建议自行修改并编译
如果有bug的话可以回复或者提issue -
RE: TimerRequestor - 用于每日签到、打卡等功能的定时自动GET请求插件
@RainChan 我一开始本来想设计成直接复制raw进去的,发现解析写起来费脑子,就改成这样一个一个问可以复用代码
-
RE: TimerRequestor - 用于每日签到、打卡等功能的定时自动GET请求插件
要注意配置的触发命令不要重复或者跟其他插件重复
如果装了什么AI对话插件的话建议关掉私聊的对话或者加屏蔽词,不然也会被回应 -
TimerRequestor - 用于每日签到、打卡等功能的定时自动GET请求插件
Timer Requester
适用于 Mirai 的用于签到、打卡等功能的定时GET请求插件
Github Project
Release
功能
目前实现的功能
- 每天定时自动进行GET请求并通知
- 允许私聊Bot进行增加、查询、删除、停用、启用请求
- 适配多Bot账号功能,可多人使用
- 管理员命令,可查询、停用、启用所有人的全部或指定请求
- 聊天命令触发器以及内容均可在Config中修改
尚未实现且懒得做但很实用的功能
- 支持其他类型的请求(POST、PUT、DELETE等)
- 允许在添加请求时设定正则表达式判断是否请求成功
- 将请求改为有序,并允许设定正则表达式匹配变量,并将前一个请求获取结果中的变量作为下一个请求的参数(用于带有token的签到)
- 在请求完毕后会根据响应的内容自动更新Cookie
- 每个请求单独设定请求时间、间隔
- 更精细的时间设定
一般使用方法
添加请求:
查询请求:
停用&启用请求:
删除请求:
命令
注意:
若想在聊天环境中使用管命令,请确保安装了Chat-Command 插件命令均应以
/timerRequester <子命令> [参数...]
或使用缩写别名/tr <子命令> [参数...]
。大部分命令均有两个及以上别名 (包括中文别名),以下只介绍一种,更多可以通过
/tr
查看命令列表管理员命令
命令 描述 /timerRequester addAdmin <user>
添加管理员 /timerRequester removeAdmin <user>
移除管理员 参数 类型 描述 备注 user
Long 要修改的管理员对应的QQ号 无 注意: 本命令仅供控制台使用
配置修改命令
命令 描述 /timerRequester sendMessage <enable>
修改自动请求后是否发送通知 /timerRequester callWhenAdd <enable>
修改是否在添加和启用后立即进行一次请求 /timerRequester whitelist [enable]
启用/停用白名单,若不带参数则为查询白名单 /timerRequester addWhitelist <user>
添加白名单 /timerRequester requestTime <time>
修改定时请求的时间 /timerRequester requestLimit <limit>
修改请求上限 /timerRequester requestDelay <delay>
修改请求间隔 参数 类型 描述 备注 enable
Boolean 是否启用对应项目 为true或false user
Long 对应的QQ号 无 time
Int 定时修改的时间 单位为小时,应为0-23的整数 limit
Int 请求上限数量 小于等于0则为不设上限 delay
Long 请求间隔时间 最低为50,建议500 管理请求命令
命令 描述 /timerRequester list [user] [name]
列出请求 /timerRequester delete <user> [name] [sendMessage]
删除请求 /timerRequester start <user> [name] [sendMessage]
启用请求 /timerRequester stop <user> [name] [sendMessage]
停用请求 参数 类型 描述 备注 user
Long 要修改的对应的QQ号 作为可选时,若为空则代表全部 name
String 请求的名字 作为可选时,若为空则代表全部 sendMessage
Boolean 是否通知该用户 默认为true 注意:
除不带任何参数的list
命令外,其余命令均无法在控制台使用。
[]
的参数表示可选,<>
的参数表示必选
插件配置
位于
\config\net.reincarnatey.timer-requester\RequesterConfig.yml
# 每日自动请求的时间,目前只能统一进行请求且一天一次,范围为0~23 requestTime: 7 # 是否启用白名单 enableWhitelist: false # 白名单,启用后不在白名单上不会回应 whitelist: [] # 是否在用户添加和启用后立即调用一次(管理员启用时不调用)并通知结果 callWhenAdd: true # 可添加请求数量上限,小于等于0则为无限 requestLimit: 0 # 请求间隔时间,单位为毫秒,不建议间隔太短,最低50 requestDelay: 500 # 到达添加上限时的回应消息 limitedMessage: '哎呀,你已经达到上限 {limit} 个了,不可以继续添加了!' # 在自动请求后是否会私聊通知对应用户 sendMessage: true # 请求状态码为200时发送的通知 successMessage: '{name} 请求已发送成功!' # 请求状态码异常时发送的通知 errorMessage: '诶呀,{name} 请求返回了 {code} 呢……' # 成功添加新请求时的回应消息 addMessage: '{name} 请求添加成功!' # 停用请求时的回应消息 disableMessage: '{name} 请求已停用!' # 启用请求时的回应消息 enableMessage: '{name} 请求已重新启用!' # 删除请求时的回应消息 deleteMessage: '{name} 请求已删除!' # 管理员停用请求时的通知 adminDisableMessage: '你的 {name} 请求已被管理员 @{adminId} 禁用!' # 管理员启用请求时的通知 adminEnableMessage: '你的 {name} 请求已被管理员 @{adminId} 重新启用!' # 管理员删除请求时的通知 adminDeleteMessage: '你的 {name} 请求已被管理员 @{adminId} 删除!' # 添加请求的命令 addTriggers: - 添加请求 - 增加请求 # 查看自己请求的命令 viewTriggers: - 查看请求 - 我的请求 - 查看我的请求 # 查看自己请求的输入 viewInput: '请输入"{allTriggers}" 或 要查看的请求的名称:' # 查看自己请求的命令 allTriggers: - 全部 - 全部请求 - 所有 # 查询不到的提示 noDataTip: 数据不存在?! # 停用请求的命令 disableTriggers: - 停用请求 - 关闭请求 - 禁用请求 - 停止请求 # 查看自己请求的输入 disableInput: '请输入"{allTriggers}" 或 要禁用的请求的名称:' # 启用请求的命令 enableTriggers: - 启用请求 - 开启请求 # 查看自己请求的输入 enableInput: '请输入"{allTriggers}" 或 要启用的请求的名称:' # 删除请求的命令 deleteTriggers: - 删除请求 - 移除请求 # 查看自己请求的输入 deleteInput: '请输入"{allTriggers}" 或 要删除的请求的名称:' # 开始添加请求时的提示 addTip: '开始添加请求,你可以随时输入"{cancelTriggers}"来取消本次添加' # 重复开始添加请求时的提示 inAddTip: '已经开始添加了哦!你可以随时输入"{cancelTriggers}"来取消本次添加' # 添加请求时的名称输入 nameInput: '请输入名字:' # 添加请求时的非法输入的提示 errorInputTips: 非法输入,请修改并重新发送 # 添加请求时的目标输入 urlInput: '请输入(完整的带参数的)目标URL:' # 添加请求时添加请求头提示 headerTip: '添加成功!请输入"{headerTriggers}"继续添加请求头(如Cookie),或是输入"{finishTriggers}"完成添加' # 添加请求时添加请求头输入 headerTriggers: - 添加 - 添加请求头 # 添加请求头时的键提示 headerKeyInput: '请输入请求头的键:' # 添加请求头时的值提示 headerValueInput: '请输入请求头的值:' # 添加请求时完成命令 finishTriggers: - 完成 - 完成添加 # 添加请求时取消命令 cancelTriggers: - 取消 - 停止添加 # 取消添加请求时的回应消息 cancelMessage: 已取消本次添加!
声明
本开源插件仅为个人使用而编写,遵循
Apache Licence2.0
开源协议,发布至 MiraiForum ,禁止用于任何违法法律法规、社区规定、网站规则的行为,若出现问题本人概不负责。qwq
本项目的实现参考了其他大佬的插件的代码(比如定时器和匹配触发器之类的)
如果有bug的话可以回复或者提issue