Skip to content

Bug: 自学习插件能抓到用户消息,但没有获取Bot 回复并存入数据库,导致ExpressionPatternLearner 始终提取 0 个模式 #73

@Ewingsal

Description

@Ewingsal

Plugin Version

Next-2.0.6

AstrBot Version

v4.19.4

Database Type

SQLite (default)

Operating System

Linux

Bug Description

自学习插件目前可以正常抓取用户消息,但似乎不会把 Bot 的回复写入学习数据库。

这会直接导致 ExpressionPatternLearner 无法建立“用户 → Bot”的对话对,因此风格学习始终出现:

  • 提取 0 个模式
  • 没有对话风格结果
  • 没有情感模式结果
  • 没有语言特征结果
  • 没有话题偏好结果
  • 人格学习审查/更新建议始终为空或无实质变化

已经核实了用户消息确实被正常抓取、AstrBot 确实正常生成并发送了 Bot 回复、用户消息被存入了数据库但数据库中始终没有 Bot 回复记录、ExpressionPatternLearner 实际已经被调用,但结果始终为空

因此,当前实际表现是:

  • 用户消息会被抓取
  • Bot 回复会被正常发送
  • 但 Bot 回复不会进入学习数据库
  • ExpressionPatternLearner 被调用了,但拿不到有效样本
  • 风格学习始终提取 0 个模式

另外,我检查了save_bot_message函数的调用链发现
它只在这一条路径里会被调用:

  • 文件:services/response/intelligent_responder.py
  • 逻辑:在 直接生成 Bot 文本回复 的那条函数里
    先:
  • 调 llm_adapter.refine_chat_complet ion(...)
  • 拿到 response_text
  • 然后才:
  • await self.db_manager.save_bot_message (...)
  • await self._record_response(...)

但插件主入口 main.py 当前只明确注册了这些和消息相关的钩子:

  • @filter.event_message_type(...) → 只处理入站消息
  • @filter.on_llm_request() → 只在 LLM 请求前注入内容

没有看到:

  • @filter.on_decorating_result()
  • 发送后回调
  • 回复完成后的钩子
  • 专门记录 bot 出站消息的钩子

所以从主入口看,它没有一条稳定的“发完回复后落 bot 消息”的接线。

因此,现在看到的bot_messages = 0,感觉是代码逻辑造成的问题。

Steps to Reproduce

1.在群里发一条肯定会触发回复的话
2.确保 AstrBot 确实回了一句
3.立刻执行一次强制学习
4.用 sqlite3 查这三项:
sqlite3 /home/hm/.openclaw/workspace/data/self_learning_data/messages.db
5.然后执行:
SELECT COUNT(*) FROM bot_messages;

SELECT group_id, sender_id, sender_name, message
FROM raw_messages
ORDER BY id DESC
LIMIT 20;

SELECT COUNT(*) FROM expression_patterns;
6.看到提示无法提取风格即复现成功

Expected Behavior

bot消息也被存入数据苦,用户和bot消息对成功建立,ExpressionPatternLearner 成功提取风格

Error Logs

[2026-03-10 23:08:55.295] [Core] [INFO] [respond.stage:184]: Prepare to send - <USER_ID_SHORT>/<USER_ID_FULL>: 开始强制学习周期 for group <GROUP_ID>... 
[2026-03-10 23:08:55.300] [Plug] [INFO] [state.affection_manager:1059]: 开始处理消息交互: group_id=<GROUP_ID>, user_id=<USER_ID_SHORT>..., message_len=14 
[2026-03-10 23:08:55.695] [Plug] [INFO] [core_learning.progressive_learning:244]: 开始处理 33 条消息(relearn_mode=False) 
[2026-03-10 23:08:55.695] [Plug] [INFO] [core_learning.progressive_learning:651]: 对话风格学习模式:直接学习 33 条原始消息(跳过LLM筛选) 
[2026-03-10 23:08:55.803] [Plug] [INFO] [state.affection_manager:1063]: 交互类型分析结果: chat (group: <GROUP_ID>) 
[2026-03-10 23:08:55.836] [Plug] [INFO] [state.affection_manager:1068]: 好感度更新成功: 用户<USER_ID_SHORT>... 在群<GROUP_ID> 的好感度从 5 变为 5 (变化: 0) 
[2026-03-10 23:08:56.061] [Plug] [INFO] [integration.maibot_adapters:422]: 学习质量评估详情: prompt_improvement=0.000, pattern_improvement=0.000, memory_growth=0.000, knowledge_growth=0.000, overall_quality=0.000 
[2026-03-10 23:08:56.062] [Plug] [INFO] [integration.maibot_adapters:428]: Before prompt长度: 2106, After prompt长度: 2106 
[2026-03-10 23:08:56.062] [Plug] [INFO] [integration.maibot_adapters:433]: before和after完全相同 
[2026-03-10 23:08:56.084] [Plug] [INFO] [core_learning.progressive_learning:1134]: 对话风格学习记录已保存 (ID: 9),处理 33 条消息,提取 0 个模式 
[2026-03-10 23:08:56.087] [Plug] [INFO] [core_learning.progressive_learning:859]: 应用人格更新 for group <GROUP_ID>
[2026-03-10 23:08:56.107] [Plug] [INFO] [persona.persona_backup_manager:61]: 人格备份创建成功,备份ID: True 
[2026-03-10 23:08:56.124] [Plug] [INFO] [persona.persona_backup_manager:61]: 人格备份创建成功,备份ID: True 
[2026-03-10 23:08:56.125] [Plug] [INFO] [analysis.expression_pattern_learner:159]: 为群组 default 触发表达模式学习,消息数量: 33 
[2026-03-10 23:08:56.126] [Plug] [WARN] [v4.19.4] [analysis.expression_pattern_learner:180]: 群组 default 表达模式学习未获得有效结果 
[2026-03-10 23:08:56.129] [Plug] [INFO] [core_learning.progressive_learning:313]: 学习更新已应用(对话风格学习已完成,人格学习已加入审查),质量得分: 0.000 for group <GROUP_ID>
[2026-03-10 23:08:56.160] [Plug] [INFO] [core_learning.progressive_learning:363]: 学习批次完成,耗时: 0.47秒 
[2026-03-10 23:08:56.162] [Core] [INFO] [respond.stage:184]: Prepare to send - <USER_ID_SHORT>/<USER_ID_FULL>: 强制学习周期完成 for group <GROUP_ID>

Relevant Configuration

## 运行环境                                                                 
                                                                               
   - AstrBot: `v4.19.4`                                                        
   - 插件: `astrbot_plugin_self_learning (Next-2.0.6)`                         
   - 平台: 飞书 / Lark 群聊                                                    
   - WebUI: 已启用                                                             
   - 消息抓取: 已启用                                                          
   - 自动学习: 已启用                                                          
   - 实时学习: 未启用                                                                                                                                                                                                           
                                                                               
   ## 当前相关配置                                                             
                                                                               
                                                                        
   {                                                                           
   "enable_message_capture": true,                                             
   "enable_auto_learning": true,                                               
   "enable_realtime_learning": false,                                          
   "enable_web_interface": true                                                
   }

Additional Context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghelp wantedExtra attention is needed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions