Skip to content

[Feature] 拆分 #207:长期记忆注入不破坏 prompt 缓存 #220

@EterUltimate

Description

@EterUltimate

来源:拆分自 #207 第 3 项「长期记忆注入方式导致缓存命中率趋近于 0」。

当前证据 / 背景

  • 综合:近期群内技术讨论汇总 —— 人格隔离、缓存优化、注入位置与安全修复 #207 明确记录:当前长期记忆注入在特定场景下可能导致 prompt 缓存命中率接近 0,需要审查记忆注入方式。
  • 当前 main HEAD:2d85684c
  • 现有相关路径:
    • services/hooks/llm_hook_handler.py_fetch_v2(req.prompt, group_id) 获取 V2 记忆上下文;_memory_delegated() 检测 LivingMemory 委托;_inject(...) 统一注入动态上下文。
    • config.py:存在 delegate_memory_to_livingmemorylivingmemory_plugin_namedisable_local_memory_when_delegatedmemory_enginellm_hook_injection_target 等配置。
    • services/response/intelligent_responder.py:仍存在构建 enhanced system/prompt 的旧路径,可能与 hook 路径并存。
    • services/learning/remember_service.pyservices/integration/mem0_memory_manager.py 涉及记忆写入/检索集成。
    • tests/unit/test_config.pytests/unit/test_config_service.py 已覆盖部分 LivingMemory/LightRAG 配置警告。

本 issue 不假设所有路径都有问题;目标是把长期记忆注入的 cache-friendly 行为补成可验证契约。

范围

审查并约束长期记忆相关的注入路径:V2 本地记忆、LivingMemory 委托、mem0 集成、legacy intelligent responder prompt 构建。优先小修和测试,不做记忆系统重构。

独立验收标准

  • 列出现有长期记忆注入路径,并在代码注释、测试名或文档中标明哪条路径负责最终注入,避免本地记忆与 LivingMemory 重复注入。
  • delegate_memory_to_livingmemory=Truedisable_local_memory_when_delegated=True 时,本地长期记忆内容不得再次注入 LLM prompt;相关行为有单测覆盖。
  • 记忆内容尽量进入动态 late section,例如 extra_user_content_parts 或等价 late user/content part;不得无条件拼入稳定 persona/system prompt 前缀。
  • no-memory、stable-memory、changed-memory 三种场景都有测试:稳定 system prompt/base prompt 前缀保持一致,变化只出现在记忆动态段。
  • 记忆动态段的排序可预测,例如按相关度/时间/id 的明确规则排序;同一输入重复构建不会改变顺序。
  • 原始记忆文本不得被永久写回 persona/system prompt;若需要学习为人格变更,必须走现有审查/快照机制。
  • 兼容旧版 AstrBot fallback:不支持 late part API 时,可以回退,但必须有日志或测试说明其 cache 影响。

非目标

  • 不要求实现 cache 预热,除非后续有实测数据证明收益。
  • 不要求替换 LivingMemory、LightRAG 或 mem0。
  • 不要求改变记忆检索算法,只约束注入位置、重复注入和可测试行为。

建议测试覆盖

  • services/hooks/llm_hook_handler.py 的 hook 单测:覆盖 LivingMemory 委托、本地 V2 记忆存在/不存在、fallback 注入。
  • services/response/intelligent_responder.py 回归测试:确认旧路径不会把短期/长期动态记忆永久混进 persona prompt。
  • tests/unit/test_config.py / tests/unit/test_config_service.py:继续覆盖高成本组合警告与默认安全配置。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is needed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions