Skip to content

综合:近期群内技术讨论汇总 —— 人格隔离、缓存优化、注入位置与安全修复 #207

@EterUltimate

Description

@EterUltimate

概述

近期群内多位成员围绕 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 的全局回退机制导致共享数据库。
提供的修复路径:

  1. ORM 加 persona_id 列实现逻辑隔离
  2. 加 sqlite_db_path 字段实现物理分库
  3. 利用 data_dir 隔离,为不同 Bot 分配独立目录
    实际执行: 橡皮DADGAD 通过为七夏新建独立配置,使其使用独立 SQLite 数据库和不同 data_dir,琉璃保留 PostgreSQL,成功切断污染链。

附注

以上建议均来源于群内实际使用中遇到的问题与探索,部分已有初步的实验验证。如需要更详细的上下文或代码片段,可以查阅群聊记录或联系相关讨论者。

由伊(EterU)代整理提交。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestquestionFurther information is requested

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions