CAIbot-连接ai乌托邦与qq聊天机器人
-
原本是针对Character.AI写的,但是遇到了我解决不了的问题相同的包只有用burpsuite发才有正常response,就改成现在这样了。
开源地址:https://github.com/Touch-Night/CAIbot
安装方法
1.进入Ai乌托邦,登录并挑选一个想做成机器人的角色,和ta聊一两句,保证ta出现在你的聊天列表中。
2.在登录后右键,检查,
选中应用程序选单中存储
一栏下的本地存储
,在里面可以得到你的ACCESS_TOKEN
这个可以先不管,后面可以直接扫二维码登录自动获取TOKEN
,之后,选中网络
一栏以开启网页监听,向角色发送一条消息,在下方记录的日志中找到名称
一栏,选择其中的sendChat
一项,在右边的预览
一栏中的第三行(开头为data:
),可以看到roleId:
,它后面的数字就是角色Id
3.在此处下载插件:release
4.将它放到plugins文件夹中
5.运行一遍生成配置文件,配置文件在Config文件夹中,文件名为CAIconf.properties
6.停止运行mirai,编辑好上述配置文件。其中,Authorization
为你的密钥
Id
为对应角色的ID
CommandPrefix
为指令前缀
InitAdmin
为唯一的初始超级管理员,拥有最高权限,且只能通过修改配置文件来变更
Admins
为指定的其他管理员,使用英文半角逗号分隔想要设为管理员的qq号
NoPower
为权限不足时的提示词7.重新运行mirai。
8.建议第一次使用时先/微信登录
指令
/重启对话
重置聊天,从头开始
/重设ID newID
将newID对应的角色与机器人连接,当角色不在前述聊天列表中时,机器人将会提醒你截图待更新
/重设密钥 newAuth
旧的密钥过期后,将密钥更新为newAuth自带防刷屏
/重设命令前缀 newPrefix
将指令前缀设为newPrefix之前坏掉了,原来是我变量名写错了,哈哈
/重发消息
重新生成一条回复
/微信登录
获得微信登录二维码,用微信通过摄像头扫描后自动获取TOKEN
/添加管理员 <member>
将<member>设为管理员,<member>的输入可以用@,也可以用qq号
/移除管理员 <member>
撤销<member>的管理员身份,<member>的输入可以用@,也可以用qq号
/重设权限不够时的回复 <String>
让机器人在权限不足的人使用指令时以<String>回复
其中重设ID、重设密钥、重设权限不够时的回复为管理员指令
重设命令前缀、添加管理员、移除管理员为超级管理员指令
使用方法
1.在聊天内容中包含提及机器人会使得这条消息被当成消息输入。当@在消息的开头时,它会被删去;当@在消息的中间时,它会被替换成当前角色ID对应的角色名。
2.在聊天内容中包含指令可执行对应指令。
Tips
0.1.0版本的用户在使用0.2.0版本时应删除配置文件,重新生成配置文件并配置。
未来计划
1.完全改成使用官方提供的api实现Ai乌托邦的消息获取 -
麻烦请问一下插件需要怎么编译?
-
@h7180705 用装了mirai开发插件的Idea打开pull到本地的项目,点击右上角的run with mirai console,之后就会编译运行一遍,再关闭程序,就可以在项目目录的build/mirai文件夹下找到编译完成的插件
-
@h7180705 没事了,我更新了配置文件,一会release
-
@Touch-Night 谢谢!
-
设置好ID并且登录了微信之后,第一次对话出现了这么个报错。
另外在设置ID的时候,机器人回复是这样的
没有出现设定的角色名 -
@h7180705 Id应当是一串较短的数字,例如1780对应的角色是酷霸王,1781对应的是Bowser
-
@Touch-Night 我这边点击分享链接不是数字,以库霸王为例,库霸王的selectedId=c0aa246b5fdc09c1aecdb7598b2f6ffd
-
@h7180705 诶等下,ai乌托邦出了api了但是通过网页抓包生造的api居然还能用,我再找找看在哪里能获取这个id
-
@Touch-Night 在 CAIbot-连接ai乌托邦与qq聊天机器人 中说:
@h7180705 诶等下,ai乌托邦出了api了但是通过网页抓包生造的api居然还能用,我再找找看在哪里能获取这个id
找到了,一会更新帖子
-
如何设置多个管理员
-
@lingyunytc 抱歉,我还没有添加这个功能。这个插件是我摸摸索索写出来的第一个插件,所以很多功能不够完善
-
@Touch-Night 期待后续的更新
-
@lingyunytc 现在好了
-
@Touch-Night 在 CAIbot-连接ai乌托邦与qq聊天机器人 中说:
在聊天内容中包含提及机器人
请问这个“提及”包不包括在普通聊天中提到角色名以及回复消息但不进行at?在消息尾部at是否会删除(在电脑用户中尾部at是很常见的情况)?
希望使用正则优化匹配,实现包括“亚——托——莉——”这样的匹配提及(可以使用正则中的匹配实现,如果不会正则的话可以私聊我我来提供)。
另外,希望参考实现类似于CaiyunAI插件的追答功能(在at或回复后连续一定条数消息在判断和过滤后直接当做连续的对话,而无需再次提及)以及定时自动重启对话(比如在8小时未进行聊天后自动重启对话)。
AI乌托邦对于实现自己oc或虚拟人物的AI对话很有帮助,拥有其他AI所无法超越的效果,大家互相帮助交流,希望本插件做的更好,也期待未来的更新。
-
@Mitr-yuzr 这个“提及”指的是at,在写这一部分说明的时候一开始遵循了mirai插件开发文档中的说法,但是后面又忘了把at、@等说法统一为“提及”了。关于删除消息末尾的at,我当时确实没有考虑到电脑用户,于是就没有添加这个。
不过,将这个“提及”的范围从at扩大到使用正则匹配角色名确实是一个不错的想法,但是现在这个插件对所有收到的消息都会进行处理,而且它会把所有不同qq用户的输入当成是同一个Ai乌托邦用户的输入。这样,当消息的发送者来自不同的群聊时,会打乱ai的回复。扩大触发范围可能会增加误触发的可能性;
连续对话功能则更加可能导致这个问题。由于没有分群聊设置机器人的功能,当连续对话在某一个群聊被开启后,机器人收到的所有消息都会被当成同一个Ai乌托邦用户的消息输入,进而导致对话的紊乱和群聊秩序的混乱。
但是上述问题都可以解决。首先需要实现给每个群聊都设一个机器人开关;此外,也可以给每个给Ai乌托邦的消息输入加上包含发送者qq昵称的前缀,Ai乌托邦的AI应该能够正确地进行回复。
关于连续对话的实现我早已想过,现在设想的方案是:设置一个随时间递减的变量来作为机器人的回复概率。每收到一条消息,这个变量增加随该变量变化而变化的一定值,而包含“提及”的消息会把这个变量直接置为一。这个变量对于不同的qq用户来说应该是不尽相同的。此外我也想让机器人的回复不全是引用回复,还想给机器人加入根据待回复文本长度来确定的一定量延迟时间来模拟真人的感觉......总之想法有很多,但是因为能力原因没办法一次性加入进去。
感谢你的关注和支持,这是我的第一个mirai插件,也是我第一次使用java语言,在程序中包含了很多不规范的写法和能够得到优化的代码。因为本人能力原因无法将其规范并优化,希望有能人可以完成一些工作并提交pr,当不甚感激。 -
@Touch-Night 群机器人开关建议更改为群白名单。而连续对话这个想法或许会有不错的效果,但实际上还是有办法进行一些简单的判断的,例如下一条对话如果在at或回复其他群成员则可以认为停止,如果在开头使用“你”则可以认为大概率在与ai对话。
关于使用正则对角色名进行匹配,确实基于乌托邦AI的聊天机制可能会导致问题,但该功能的价值应当是大于带来的问题的,至少在我一年来的CaiyunAI对话体验中是如此。
模拟真人的话,延迟发送消息是一个很好的主意,除此之外,还可以尝试添加别名/小名(请求时替换回角色名),对ai较长的回复分割成多条消息间隔一定时长发送等,对回复中关键词进行匹配并附上相应表情包图片等。
-
@Mitr-yuzr 很有道理,有些消息可以很明显地被判断出来不应被当做消息输入,收到这一类消息可以直接把概率变量置零;还有一部分消息具有明显的停止对话的意图,这一部分消息可以减少概率变量的值;另外还有一些消息很明显具有继续聊天的意图,它们可以更加显著地增加概率变量。
但是对一个消息使用简单的检测进行准确的判断比较困难,例如“你滚吧,我不想理你了”“你好,再见”这样同时包含两种不同的关键词的消息用简单匹配关键词的方式难以处理;“晚安”“我去洗澡了”之类的隐式地包含停止对话意图的消息则更加难以通过简单的方式来处理。
一个更好的方法是通过机器学习来判断,但我还没有学习过这方面的知识。
关于别名,Ai乌托邦已经实现了这个功能,我们只需要更改“提及”的包含范围即可。发送表情包的功能根据另外一个初创AI聊天应用“glow”的经验,会极大地影响体验,容易崩人设。 -
为啥我微信登录后还是提示密钥未填写或已过期 求解答
-
大佬,微信登陆后显示密匙未填写或已过期该怎么办,有说法吗