最近给自己的 QQ 群养了一个 AI 群友,用的是开源项目 MaiBot(麦麦),通过 NapCat 接入 QQ。人设是个喜欢木柜子的大二女生,会接话、会玩梗,还会偷群友的表情包。这篇记录部署过程里踩到的几个坑。
整体结构
- NapCat:负责登录 QQ,开一个 WebSocket 服务端
- MaiBot:主程序,通过 NapCat 适配器插件主动连过去收发消息
- 模型:回复、规划、工具、识图、嵌入分别配不同的模型,同一类任务挂好几家,坏一家自动换下一家
MaiBot 跑在一台 2 核小服务器上,用 systemd 托管,单独建了一个非 root 用户来跑,常驻内存大概 0.9G。
坑 1:它只发 QQ 自带的小黄脸,不发偷来的表情包
库里明明攒了四五百张偷来的表情包,它却总是发「[表情:捂脸]」那种 QQ 自带表情。
原因是表情包发送有两种模式:
- 新模式:让思考模型直接「看」表情包图片再挑,要求思考模型支持识图
- 旧模式:按入库时生成的文字描述(比如「无奈、敷衍、OK」)来挑
我的思考模型全是纯文本模型,开着新模式等于让它闭着眼挑图,它就退而求其次写小黄脸了。把配置里的 use_new_send_logic 关掉,改回按描述挑,偷来的表情包就用上了。
坑 2:某个模型一带 temperature 就 400
接了一个新的 GPT 线路,测试的时候报:
400 Upstream request failed一项项排除后发现:请求里只要带 temperature 参数就 400,不带就正常,工具调用也没问题。有些上游(尤其是转接官方账号的)不接受这个参数。MaiBot 里给这个模型设 send_temperature = false 就好了。
坑 3:Cloudflare 403,错误码 1010
同一个上游,用 curl 能通,用 Python 脚本就 403:
error code: 10101010 是 Cloudflare 的「浏览器特征被拦截」,Python 默认的 User-Agent 被当成机器人了。解决办法是在提供商配置里加默认请求头,带上一个正常浏览器的 UA:
[api_providers.default_headers]
User-Agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ..."坑 4:上游不稳定时,回复变得特别慢
回复模型配的是「按顺序优先」,第一个模型失败了才轮到下一个。问题是每次失败都会先重试 3 次,每次还要等几秒,结果群友 @ 它要等半分钟。
经验是:最稳的放第一个,便宜但不稳的放后面当备胎。不稳定的线路宁可只放在最后兜底,也别放第一位。
坑 5:表情包被自动清理掉了
我一次性从电脑里导了几百张 QQ 收藏表情进去,第二天少了一大半。原来 MaiBot 有缓存清理:没注册、且文件修改时间超过 30 天的表情会被删。导进去的老图片修改时间都是几年前的,正好被判定为「过期」。
导入前先 touch 一下刷新修改时间就行。
小结
- 思考模型不能识图,就别开「看图挑表情包」
- 某个模型报奇怪的 400,先试试去掉 temperature
- Cloudflare 1010 = 加个浏览器 UA
- 回复模型的顺序:稳的在前,不稳的在后
- 导表情包之前先
touch
现在它在群里已经很像一个正常群友了,就是有点太爱玩梗 (ノ>ω<)ノ