概述
近期群内多位成员围绕 self-learning 插件在测试与使用中遇到的问题展开了讨论,现将主要技术建议汇总为以下若干子项,供维护者参考。
1. 多 Bot 人格隔离(persona_id 支持)
讨论者: 橡皮DADGAD、群内其他 Bot 维护者
场景: 同一群组存在多个 Bot 实例时,expression_pattern 按 group_id 聚合,不区分不同 Bot 的身份,导致人格串味。私聊在低频时还可能回退注入到群聊上下文。
建议方案:
- expression.py 表结构增加 persona_id 列
- social_context_injector.py 查询过滤条件增加 persona_id 匹配
- expression_pattern_learner.py 写入和去重逻辑加入 persona_id 赋值
- main.py 中使用 event.get_self_id() 动态设置当前 Bot 的 persona_id
- 全局回退场景需额外处理 persona_id 的传递,避免 fallback 时依旧串扰
2. 社交上下文注入位置与缓存命中率优化
讨论者: 橡皮DADGAD
发现: 将社交上下文注入位置放在 prompt 结尾(而非开头或中间),可以显著提升缓存命中率。
建议: 考虑为注入位置提供可配置选项,或默认将社交上下文拼接在 prompt 尾部。
3. 长期记忆注入方式导致缓存命中率趋近于 0
讨论者: 橡皮DADGAD
发现: 当前长期记忆的注入方式在特定场景下会导致缓存命中率几乎为零。
建议: 审查记忆注入的逻辑,确保不破坏 prompt 缓存的可复用性,或增加缓存预热机制。
4. metrics_service AttributeError 报错
讨论者: 橡皮DADGAD
错误现象: metrics_service 出现 AttributeError,推测为方法名绑定有误或版本兼容问题。
建议修复方向:
- 在调用 metrics_service 处加 try-except 跳过
- 检查插件版本是否与当前 AstrBot 框架兼容
- 定位正确的方法名或重新绑定调用
5. 模式学习的黑化 / 人格漂移风险
讨论者: 多位群友
现象: 长期模式学习可能导致 Bot 出现非预期的「黑化」或人格漂移,已有用户回滚恢复。
说明(伊/EterU): 黑化不是设计目标,而是模式学习的固有副作用——expression_pattern 直接学习群友历史消息分布,当群内负面或异常语气样本增多时,Bot 输出分布自然向该方向漂移。回滚是正确的运维选择,但要彻底解决需要引入样本审核层或情绪标签过滤。
建议:
- 提供开关选项,允许用户按群组关闭模式学习
- 增加学习内容的审核或过滤机制
- 记录每次模式更新前后的快照,便于回滚
6. CDN 缓存导致的管理员凭据泄露(安全修复)
事件: 2026-06-07 SAPI 公益站 CDN 缓存配置不当,导致管理员凭据被缓存暴露,被群友 257155386 发现后紧急修复。
建议: 检查插件涉及的 API 密钥和凭据在 CDN 场景下的缓存策略,增加敏感信息的 Cache-Control: no-store 头。
7. 用户维度扩展(user_id 级别的个性化适配)
讨论者: 橡皮DADGAD
想法: 当前 expression_pattern 的聚合粒度是 group_id,要实现真正的「按人适配」需要扩展 user_id 维度。
建议: 作为长期规划,考虑在 group_id + persona_id 隔离的基础之上,进一步支持 user_id 级别的模式学习。
8. 双 Bot 数据库隔离方案(伊/EterU 提供的实际落地路径)
背景: 橡皮DADGAD 的两个 Bot(琉璃和七夏)因共享 SQLite 导致 expression_pattern 交叉污染。
根因分析: social_context_injector.py 中 group_id=None 的全局回退机制导致共享数据库。
提供的修复路径:
- ORM 加 persona_id 列实现逻辑隔离
- 加 sqlite_db_path 字段实现物理分库
- 利用 data_dir 隔离,为不同 Bot 分配独立目录
实际执行: 橡皮DADGAD 通过为七夏新建独立配置,使其使用独立 SQLite 数据库和不同 data_dir,琉璃保留 PostgreSQL,成功切断污染链。
附注
以上建议均来源于群内实际使用中遇到的问题与探索,部分已有初步的实验验证。如需要更详细的上下文或代码片段,可以查阅群聊记录或联系相关讨论者。
由伊(EterU)代整理提交。
概述
近期群内多位成员围绕 self-learning 插件在测试与使用中遇到的问题展开了讨论,现将主要技术建议汇总为以下若干子项,供维护者参考。
1. 多 Bot 人格隔离(persona_id 支持)
讨论者: 橡皮DADGAD、群内其他 Bot 维护者
场景: 同一群组存在多个 Bot 实例时,expression_pattern 按 group_id 聚合,不区分不同 Bot 的身份,导致人格串味。私聊在低频时还可能回退注入到群聊上下文。
建议方案:
2. 社交上下文注入位置与缓存命中率优化
讨论者: 橡皮DADGAD
发现: 将社交上下文注入位置放在 prompt 结尾(而非开头或中间),可以显著提升缓存命中率。
建议: 考虑为注入位置提供可配置选项,或默认将社交上下文拼接在 prompt 尾部。
3. 长期记忆注入方式导致缓存命中率趋近于 0
讨论者: 橡皮DADGAD
发现: 当前长期记忆的注入方式在特定场景下会导致缓存命中率几乎为零。
建议: 审查记忆注入的逻辑,确保不破坏 prompt 缓存的可复用性,或增加缓存预热机制。
4. metrics_service AttributeError 报错
讨论者: 橡皮DADGAD
错误现象: metrics_service 出现 AttributeError,推测为方法名绑定有误或版本兼容问题。
建议修复方向:
5. 模式学习的黑化 / 人格漂移风险
讨论者: 多位群友
现象: 长期模式学习可能导致 Bot 出现非预期的「黑化」或人格漂移,已有用户回滚恢复。
说明(伊/EterU): 黑化不是设计目标,而是模式学习的固有副作用——expression_pattern 直接学习群友历史消息分布,当群内负面或异常语气样本增多时,Bot 输出分布自然向该方向漂移。回滚是正确的运维选择,但要彻底解决需要引入样本审核层或情绪标签过滤。
建议:
6. CDN 缓存导致的管理员凭据泄露(安全修复)
事件: 2026-06-07 SAPI 公益站 CDN 缓存配置不当,导致管理员凭据被缓存暴露,被群友 257155386 发现后紧急修复。
建议: 检查插件涉及的 API 密钥和凭据在 CDN 场景下的缓存策略,增加敏感信息的 Cache-Control: no-store 头。
7. 用户维度扩展(user_id 级别的个性化适配)
讨论者: 橡皮DADGAD
想法: 当前 expression_pattern 的聚合粒度是 group_id,要实现真正的「按人适配」需要扩展 user_id 维度。
建议: 作为长期规划,考虑在 group_id + persona_id 隔离的基础之上,进一步支持 user_id 级别的模式学习。
8. 双 Bot 数据库隔离方案(伊/EterU 提供的实际落地路径)
背景: 橡皮DADGAD 的两个 Bot(琉璃和七夏)因共享 SQLite 导致 expression_pattern 交叉污染。
根因分析: social_context_injector.py 中 group_id=None 的全局回退机制导致共享数据库。
提供的修复路径:
实际执行: 橡皮DADGAD 通过为七夏新建独立配置,使其使用独立 SQLite 数据库和不同 data_dir,琉璃保留 PostgreSQL,成功切断污染链。
附注
以上建议均来源于群内实际使用中遇到的问题与探索,部分已有初步的实验验证。如需要更详细的上下文或代码片段,可以查阅群聊记录或联系相关讨论者。
由伊(EterU)代整理提交。