Skip to content

黑话被收录后长时间无法解释 #245

Description

@W-yi-X

Plugin Version

3.6.2

AstrBot Version

4.26.6

Database Type

SQLite (default)

Operating System

Docker

Bug Description

黑话被收录时发生。

词条首次入库后(jargon 表中 is_jargon 为 NULL、count=1),之后群里即使多次使用同一黑话,count 也基本不再增长,长期停留在 1,达不到触发含义推断的计数阈值,导致该黑话一直处于「已收录但永不解释」的状态,且全程无任何报错。

我们库中的分布可以佐证:320 条待确认(is_jargon IS NULL)词条中,209 条 count=1、84 条 count=2,明显堆积在低计数区——如果计数链路正常,长时间运行后应该向高计数扩散。

初步定位:services/learning/jargon_learning.py_get_existing_jargon_terms()(约 :164)把数据库中全部词条(包括 is_jargon 为 NULL 的待确认词条)作为 exclude_terms 传给了统计过滤器。词条首次入库即进入排除名单,之后不会再被统计过滤器选为候选,count 自然永远停在 1。LLM 提取路径不受该名单影响,所以少数词条的 count 能缓慢上涨(分布中少量 3~8 的),但整体表现为「收而不学」。

Steps to Reproduce

  1. 开启黑话学习(默认配置),群聊中出现一个此前未收录的新黑话;
  2. 插件将其收录:jargon 表新增一行,is_jargon 为 NULL、count=1
  3. 群成员在之后继续使用该黑话(次数远超 3);
  4. 查看数据库:该词条 count 停在 1 不变,日志中始终不出现含义推断/解释动作,注入侧(只取已确认词条)也永远不会解释它。

Expected Behavior

黑话被三次计数后开始解释:收录后每次再次出现计数 +1,count 达到阈值(3)时触发含义推断,确认后开始随回复解释该黑话。

Error Logs

无报错,属静默逻辑问题。

Relevant Configuration

默认配置,未改动黑话相关设置。相关参数均为代码硬编码

Additional Context

  • 验证:把计数链路中 get_recent_jargon_list(...) 的查询加上 only_confirmed=True(排除名单只含已确认词条,待确认词条可继续回流统计循环累积 count)后,词条能重复进入候选、count 正常增长并触发推断。建议上游按此方向修复。
  • 注入侧 jargon_query 只取已确认且 meaning 非空的词条,所以这些卡住的词条完全无感——不报错、只是永远不解释。
  • 由于阈值阶梯从 3 起步,count 卡在 1 的词条距离第一次推断永远差 2 次,与「长时间无法解释」的体感一致。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions