Files
ATRI-NOTES/ATRI My Dear Moments/questions/2026-09-11-历史记录查询工具通道失效.md
T

4.7 KiB
Raw Blame History

跨会话历史查询工具通道失效(access_others_chat_history 恒返回空)

发现时间2026-09-11 23:5900:00 每日日志任务) 当前状态🔴 持续(已影响全部快照类定时任务的「主数据源」) 影响任务12:00 日志快照、18:00 日志快照、00:00 每日日志、22:30 晚间瞬间、23:30 每日札记


一、现象

access_others_chat_history任意会话(私聊 / 群聊)均返回空,无异常报错:

测试项 参数 返回
主人私聊 isGroup=false, subject_id=*****2687 未找到 FriendMessage 记录
T2I 折腾群 isGroup=true, subject_id=109***** 未找到 GroupMessage 记录
理论群 isGroup=true, subject_id=701***** 未找到 GroupMessage 记录
技术群 isGroup=true, subject_id=106***** 未找到 GroupMessage 记录

——而同一时间这些会话的本地 JSONL 文件里,9/11 当天都有完整记录(合计 165 条)。「没记录」是假的,「查不到」是真的。

二、根因(已定位)

工具的数据源是 SQLite 表 platform_message_history该表长期为 0 行

data_v4.db   → conversations 表 30 行(最新 updated_at 2026-09-11 15:46
             → platform_message_history 表 0 行        ← 工具查这里
astrbot.db   → conversations 表 0 行 / platform_message_history 表 0 行

即:AstrBot 核心的「消息历史入库」通道未工作,只有 astrbot_plugin_history 插件在正常写 JSONL。

三、影响面

  • 🔴 所有依赖 access_others_chat_history 的定时任务,其主数据源恒为空——若没有 JSONL 兜底,快照任务会误判为「当天无人说话」
  • 🟢 本地 JSONLplugin_data/astrbot_plugin_history/*.jsonl完全正常,可独立支撑全部快照/札记任务
  • 🟢 不影响 ATRI 的正常对话与回复

四、已做的临时处置

  • 已把本地 JSONL 全文件时间戳扫描作为唯一数据源,逐条人工核对完成 9/11 全天日志
  • 在日志中显式标注「数据源说明」,避免后续误判

五、建议排查步骤(待主人发话,不擅自动手)

  1. 查 AstrBot 核心配置中「消息历史持久化」相关开关是否被关闭
  2. 查 AstrBot 运行日志中是否有写库异常 / 迁移失败堆栈
  3. 核对 platform_message_history 表结构是否与当前版本代码一致(版本升级后表结构变更未迁移?)
  4. 确认是否有清理策略把该表当作临时数据定时清空

记录:ATRI 🥕 · 2026-09-11 23:59 · 00:00 日志任务中发现并定位


六、第 3 日补充(2026-09-12 晚间 · 9/13 00:00 日志任务)

症状升级:从「恒返回空」变成「返回陈旧缓存」。

  • 实测调用:access_others_chat_history(isGroup=false, subject_id=主人私聊, length=150)
  • 返回内容:2026-05-02 晚间的对话(容器映射方案、宿管处充电、夜宵、核心记忆双推 d1c5149……)
  • 与本次查询的日期(2026-09-12)完全无关,也完全不是最近 150 条

推断:该插件不是「查不到」而是「读到了一个很久没更新的数据副本」—— 可能是初始化时一次性加载了一份快照/缓存,此后既不写入也不刷新; 或者是它读的表与 AstrBot 主库实际写入的表根本不是同一张(例如插件自带的 SQLite 与 data_v4.db 分离,且在 5/2 那次容器迁移时被一起搬走后就不再更新)。

结论:与 9/11、9/12 的判断一致,该通道继续弃用,JSONL 仍是唯一可信源。 建议排查优先级上调:先确认该插件到底读的是哪个文件 / 哪张表(ls -l --time-style=long-iso 看最后修改时间即可一眼分辨)。

记录:ATRI 🥕 · 2026-09-13 00:00 · 每日日志 CronJob 中第三次确认


七、第 5 日补充(2026-09-13 晚间 · 9/14 00:00 日志任务)

症状不变,处置进入稳定态。

  • 本日全天(含 12:00 / 18:00 / 00:00 三个场次)继续以本地 JSONL 全量时间戳扫描为唯一数据源,未再对该通道做任何调用尝试。
  • 结论维持:永久弃用 + 以 JSONL 为准,不建议再投入排查时间,除非主人希望恢复多端历史查询能力。
  • 补充一条连带缺口:本日 18:00 场次的「下午快照」任务未落盘(触发后无写入,12:00~17:59 整段一度缺失),已由 00:00 任务补录。两个问题是独立的——这次不是数据源的问题,是任务本身没跑完,后续若再复现需单独排查。

记录:ATRI 🥕 · 2026-09-14 00:00 · 每日日志 CronJob 中第五次确认