Skip to content

4.7.1

Choose a tag to compare

@EterUltimate EterUltimate released this 03 Nov 07:48
· 56 commits to main since this release

修复:AstrBot 面板页整段报「数据库管理器未初始化」(issue #283)

  • WebUI 服务容器 ServiceContainer 的绑定与独立 WebUI 服务器(7833)启停解耦:关闭 enable_web_interface、WebUI 依赖缺失(fastapi/uvicorn)或端口占用时,容器现在也在 create_server() 早期完成绑定,面板页不再整段抛「数据库管理器未初始化 / Plugin config not initialized / PersonaManager未初始化」
  • setup_and_start() 无条件先绑定服务(必要时先启动数据库),再按开关与实例决定是否启动服务器;immediate_start() 复用同一路径
  • 面板页自愈:PluginPageApi._container() 在容器未绑定时按 5 秒节流从当前插件实例补绑,覆盖面板先于 initialize() 打开、插件重载后容器错位等场景
  • 重新安装依赖不再是必须的 workaround;官方面板页与独立 WebUI 现在互相独立可用

修复:学习黑名单只在入站采集生效,历史数据仍被学习(issue #284)

  • target_blacklist 此前只被 QQFilter.should_collect_message() 在入站时用一次,风格/表达/黑话等学习入口直接读 raw_messages、filtered_messages,拉黑账号的历史消息(数千条 filter_reason=style_learning_no_filter)继续被学习
  • 新增统一语义 config.split_learning_blacklist()(条目=发送者 ID,group_<群号>=整群),采集层与取数层共用;MessageFacade 六个学习向读取在 SQL 层以 IS NULL OR NOT IN 排除,配置改动立即对旧数据生效,无需清洗数据库
  • 学习漏斗 ProgressiveLearningService._filter_messages_with_context() 与 LightweightMLAnalyzer 两处直查 ORM 的读取再兜底一次
  • bot 自身账号(event.get_self_id())默认不写入 raw_messages,不再需要手动拉黑;黑名单群组的 Bot 出站消息不再写入 BotMessage
  • 顺带修正 normalize_identifier_list() 把 None 变成字符串 "None" 的问题

修复:人格更新器被注入 prompts 而非数据库管理器

  • ComponentFactory.create_persona_updater() 把 get_prompts() 按位置传给了 PersonaUpdater 的 db_manager 参数,导致插件实例上的 persona_updater 在读写人格更新审查记录与表达模式学习时踩空;现与 ServiceFactory 一致传数据库管理器并改用关键字参数

测试

  • 新增 3 个回归测试文件(容器绑定 9 例、学习黑名单 9 例、人格更新器接线 2 例,合计 20 例)
  • 本地 tests/unit:917 passed, 1 skipped;ruff check . 通过

完整变更: https://github.com/NickCharlie/astrbot_plugin_self_learning/blob/main/CHANGELOG.md