SD-switch(模型切换)在QQ公域机器人上无法正常使用的问题的一种解决办法

前文:
全koishi 最全的搭建ai绘画后端的教程收录!想用什么模型就下载什么模型! 中使用QQ官方公域机器人搭建基于SD-webui后端的AI绘画的相应教程中的模型切换功能。

SD-switch插件中9.16日我向开发者反馈的问题。

先说解决方案:
通过引入插件send-as-image(依赖插件为:puppeteer)来完成文本转图片的操作,从而实现sd-switch插件的正常运行。

解决方案的详细过程如下:

  1. 安装配置插件send-as-image
    在插件市场搜索send-as-image,并点击安装。
    image

在插件配置中,点击

会跳转到依赖插件puppeteer,依赖插件无需过多配置,直接启用即可。

send-as-image插件的详细配置如下:

  1. sd-switch插件源代码的修改

在状态栏中右键koishi的图标,依次选择高级-打开数据文件夹
image

安照路径,依次点击对应的文件夹 .\instances\default1\node_modules\koishi-plugin-sd-switch\lib并打开index.js文件(推荐使用vs-cord进行编辑

将代码54-69行修改如下

将代码83行、98行修改如下:

保存后,在任务栏右键koishi,并重启对应实例,即可正常使用模型切换功能。
image

报错排查及分析
提前说一下,本部分内容可能会令编程大佬们血压飙升,毕竟我是纯小白 :rofl:

这是2023.09.16的报错,在看到报错之前,当时我还傻乎乎的认为是我部署或QQGuild设置出现了问题(经典不看日志),看了日志后,我的第一反应是SD-switch插件报错了(QQGuild的报错被我当场正常运行的日志了),这肯定是这个插件的问题!于是我就来这里与作者进行了第一次交流。


随后,我个憨批在沙盒测试sd-switch插件正常运行后,就自认为是机器人部署的问题……同时,由于工作问题,暂时没有太多时间,于是暂时放弃了解决问题。

时间来到了2023年10月27日

在这天,对绘画bot进行维护(更新koishi及对应的依赖)后,突然想起还有个sd-switch插件的问题……
碰巧,QQguild插件升级为了QQ插件,同时增加了更多的日志,这时,我才发现,是QQ适配器首先传出报错后,才是sd-switch插件的报错。于是我调整了sd-switch配置选项中的“选择模型等待时间”,在QQ频道中进行测试,并且在抛出“发生未知错误”前,按照在沙盒模式中列出的模型列表菜单进行测试,发现能够正常切换模型,但报错依旧

于是我个憨憨,在思维惯性的情况下,认为是调用url过于频繁,导致暂时被服务器给ban了,于是兴冲冲的跑去问大佬:是不是回复速度过快的问题,大佬告诉我,目前没有发现由于回复速度过快导致功能异常的问题,同时提出 url not allowed是回复内容带非法链接,导致的被ban,并提供了一个能够自定义全局信息延时的插件,方便我验证。

而我在验证后,得出如下结论,并希望大佬能够增加对应的功能:



对于零基础的编程小白的我来说这太难了,完全看不懂……

随后,我通过修改vae列表的方式,测试我的想法能否成功……然而测试的结果一言难尽,是的,部分模型名称涉及非法字段也会被屏蔽掉,也就是说,通过代码去除后缀的想法不可行,无法解决全部问题。

这时候,突然想到了当时搞毕业论文的时候,整了一个3w字的图表,但查重出问题时,一个老师提供的建议你把这张表改为图片不行吗?(注:千万别学,否则算学术不端,我是通过其他方法过的)虽然这个建议被当场否决了,但在这里却 :grin:

于是经过一番检索后,我找到了插件send-as-image,在配置完成后,我发现了sd-switch插件能用了,能够正常反馈模型列表了!

但是,这时候,我查看日志,却发现在完成模型切换后,出现了相同的报错,而sd-switch插件在完成模型切换后的再次查询模型并未得到任何反馈。

在沙盒模式中发现,切换模型后的反馈行数为1,同时除了名字特别长的模型,字符数也未达到图片化的标准……

于是,通过查看源代码……额,看不懂……算了,直接看编译完成的代码,我看不懂代码,我还看不懂汉字?
于是找到了前文修改代码的地方,在一番测试后,发现 /n 是换行的意思,便增加了回复的文本的行数,同时为了好看,额外增加了一行提示语请不要过快的切换模型哦~,这时候,再此进行测试的时候,能够正常在QQ公域机器人上使用sd-switch的切换模型功能了。

4 个赞

很棒的解决方案,已合并至主线

4 个赞