948 字
2 分钟
跨群感知插件修复:模型下拉泄露与自动刷新问题

今天把跨群感知插件里一个挺烦的配置问题彻底处理了一遍:别人下载安装插件后,会看到我本机已经配置过的模型列表;而且模型下拉经常要重启 AstrBot 才会刷新出来。

这两个问题本质上是连在一起的。

问题一:插件包把本机模型配置一起带出去了#

最开始为了让配置页里的模型下拉自动出现可选项,我在插件启动时读取 AstrBot 当前 provider 列表,然后把它写回插件目录下的 _conf_schema.json

这样做短期看很方便:

  • 配置页能直接看到模型下拉
  • 不需要手动输入 provider id

但副作用也很明显:

  • _conf_schema.json 被污染成了“当前机器的本地状态”
  • 一旦把插件目录打包、上传 GitHub、或者别人直接从仓库拉取
  • 这些模型名就会跟着插件一起发出去

结果就是:别人下载插件后,会直接看到我本地已经配置过的模型列表。

这显然不对。

问题二:模型下拉只能重启后刷新#

把模型列表改成只在运行时刷新、不再写回磁盘之后,泄露问题是解决了,但新的问题又暴露出来:

  • AstrBot 整体启动时,模型下拉能刷新
  • 但只是安装/重载插件时,经常还是不刷新
  • 最后还得重启整个 AstrBot,体验很差

一开始我把刷新逻辑挂在 on_astrbot_loaded,后来测试区日志证明了一个关键事实:

on_astrbot_loaded 只会在 AstrBot 整体启动完成时触发,不会在单独重载插件时再次触发。

这就是为什么“删掉模型后重载插件没反应,只有重启 AstrBot 才恢复”的根因。

最终修法#

这次正式版做了三件事:

1)不再把运行时模型列表写回 _conf_schema.json#

彻底去掉了把 provider 列表落盘的逻辑。

也就是说,插件运行时可以知道当前有哪些模型,但这些信息只存在于运行时内存里,不会再写回插件目录。

这样别人下载插件时,拿到的就是干净版本,不会再看到我本机的模型配置。

2)把仓库里的 _conf_schema.json 清回默认值#

把这两个字段的 options 都清回了默认空值:

  • summarize_provider_id
  • vision_provider_id

这样 GitHub 仓库本身也恢复成了“干净包”。

3)把自动刷新时机补到插件加载/重载#

除了保留 on_astrbot_loaded,又补上了:

  • on_plugin_loaded
  • 延迟 5 秒再补刷一次

这样现在的行为变成:

  • AstrBot 整体启动时会自动刷新
  • 插件安装完成时会自动刷新
  • 插件重载时也会自动刷新
  • 如果 provider 初始化稍慢,延迟补刷还能兜底一次

这个版本在测试区实测已经可用。

这次修复后的结果#

现在正式版已经具备下面这些特性:

  • 下载插件时不会再携带本机模型列表
  • 模型下拉不再依赖把 schema 写回磁盘
  • 插件安装/重载后,大多数情况下不需要重启整个 AstrBot 就能刷新模型选项

这类问题本质上不是功能难,而是很容易把“运行时状态”和“发布包内容”混在一起。开发时图省事写回文件,发布时就会把本地环境一起带出去。

这次算是把这个坑填平了。

仓库地址: astrbot_plugin_cross_session_awareness

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

跨群感知插件修复:模型下拉泄露与自动刷新问题
https://xn--jpra6118a.xn--6qq986b3xl/posts/cross-session-awareness-provider-refresh-fix-2026-04-08/
作者
TaiLaaa
发布于
2026-04-08
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时