qqbot开发

这篇文章上次修改于 11 个月前,可能部分内容已经不适用,如有疑问可询问作者。

qqbot开发

这里使用的koishi 它的界面和文档都让俺很满意 而且整体架构也好优雅,拓展性很强! 以及它的社区也很活跃,有啥问题基本都能找到解决方案

koishi的下载和安装这里就不赘述了

基础知识

配置本地同步化

koishi的配置文件是存在本地的,所有的配置信息都在koishi.yml里面,它在这个基础上提供了一个非常详尽的可视化配置界面

配置文件存在本地有两点我们需要注意:

  1. 每次编辑完之后要进行保存,与本地文件想同步
  2. 当我们需要进行迁移的时候,将配置文件一起迁移即可。

服务器本地开发

当我们在云服务器跑这个服务的时候 会把它跑在127.0.0.1:5140端口上 然而在本地就可以通过访问相同域名来实现开发,编辑远程服务器的内容 采用的应该是ssh隧道,将本地的5140端口映射到远程服务器的5140端口上

qq接入

一开始想使用adapter-qq,由于需要使用qq开发者平台提供的机器人的一套系统 其实还可以,而且功能提示相当友好,但是机器人上线需要进行审核,所以放弃了 于是使用了adapter-onebot

napcat

koishi-adapter-onebot 现在只提供了koishi的适配,它并没有提供qq的登录态和信息价接受 我们这里通过napcat来登录qq,获取到聊天记录信息,并把消息转发到相应的ws端口上,供koishi-adapter-onebot使用

安装

参照文档 linux直接执行脚本就好了,下面这个脚本会自动帮我们安装linuxQQ、napcat、xvfb

BASH
curl -o napcat.sh https://nclatest.znin.net/NapNeko/NapCat-Installer/main/script/install.sh && sudo bash napcat.sh
Copy

安装好了之后,我们再利用指令来启动napcat

BASH
 xvfb-run -a qq --no-sandbox -q [自己的qq号]
Copy

ai接入

这里使用的事chatluna

ChatLuna 是一款强大的语言模型聊天服务插件,基于 LangChain 开发,目前作为 Koishi 上的插件存在。ChatLuna 支持与多种主流大语言模型进行交互,如 OpenAI、Google Gemini 和 Claude 等。

ChatLuna 不仅为用户提供了模型聊天功能,还为其他 Koishi 插件开发者提供了便捷的 LangChain Model 接口,方便他们与大语言模型进行交互和扩展开发。

接入

在插件广场先搜索下载好chatluna插件 下载好之后,koishi有一个非常反直觉的点就是,下载安装好后插件配置里找不到刚刚下载的插件 这里需要点击全局配置,然后在右上方点击 “添加插件” 按钮来添加

在chatluna插件的基础上我们还需要配置几个基础插件。

数据库服务

这里采用最简单的sqlite,koishi事自带的 启用即可

模型介接入

chatluna插件支持多种模型接入,这里使用的是ds 我们前往插件市场,搜索 chatluna-deepseek-adapter 但是我这边搜索不到,是因为官方插件源没有正常更新。 前往 market 插件设置为其他源即可: 我使用的事https://koishi-registry.yumetsuki.moe/index.json

使用deepseek的模型需要申请key 到deepseek的开放平台去注册一个账号,再充点钱 在apikeys页面创建apikey,将得到的apikey填入chatluna-deepseek-adapter插件的配置信息中 配置好了重载设置,chatluna-deepseek-adapter插件就会尝试开始加载模型 然后就可以在chatluna插件的配置信息中看到可以选择deepseek的模型了

astrbot

后来因为社区维护问题,转战了astrbot,这边有着更详细的文档和更活跃的社区。 因为为文档写的非常全,参照文档就可以启动了 消息平台仍然使用的napcat 利用uv来管理python的包管理,利用pnpm来进行dashboard的调试,由于前后端的完全隔离,利用vsc的ssh隧道转发,可以在本地启动前端,再连接服务器的后端进行联调~

踩坑

submodule问题

开发的时候误将src/external/里面的东西作为git仓库了 解决方案是先拷贝该文件夹 然后将里面的.git文件删除

BASH
rm -rf .git
Copy

然后再压缩复制到原来项目的地方 最后执行git add . 来导入不带有git信息的子模块