来源:拆分自 #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_livingmemory、livingmemory_plugin_name、disable_local_memory_when_delegated、memory_engine、llm_hook_injection_target 等配置。
services/response/intelligent_responder.py:仍存在构建 enhanced system/prompt 的旧路径,可能与 hook 路径并存。
services/learning/remember_service.py 与 services/integration/mem0_memory_manager.py 涉及记忆写入/检索集成。
tests/unit/test_config.py、tests/unit/test_config_service.py 已覆盖部分 LivingMemory/LightRAG 配置警告。
本 issue 不假设所有路径都有问题;目标是把长期记忆注入的 cache-friendly 行为补成可验证契约。
范围
审查并约束长期记忆相关的注入路径:V2 本地记忆、LivingMemory 委托、mem0 集成、legacy intelligent responder prompt 构建。优先小修和测试,不做记忆系统重构。
独立验收标准
列出现有长期记忆注入路径,并在代码注释、测试名或文档中标明哪条路径负责最终注入,避免本地记忆与 LivingMemory 重复注入。
当 delegate_memory_to_livingmemory=True 且 disable_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:继续覆盖高成本组合警告与默认安全配置。
来源:拆分自 #207 第 3 项「长期记忆注入方式导致缓存命中率趋近于 0」。
当前证据 / 背景
mainHEAD:2d85684c。services/hooks/llm_hook_handler.py:_fetch_v2(req.prompt, group_id)获取 V2 记忆上下文;_memory_delegated()检测 LivingMemory 委托;_inject(...)统一注入动态上下文。config.py:存在delegate_memory_to_livingmemory、livingmemory_plugin_name、disable_local_memory_when_delegated、memory_engine、llm_hook_injection_target等配置。services/response/intelligent_responder.py:仍存在构建 enhanced system/prompt 的旧路径,可能与 hook 路径并存。services/learning/remember_service.py与services/integration/mem0_memory_manager.py涉及记忆写入/检索集成。tests/unit/test_config.py、tests/unit/test_config_service.py已覆盖部分 LivingMemory/LightRAG 配置警告。本 issue 不假设所有路径都有问题;目标是把长期记忆注入的 cache-friendly 行为补成可验证契约。
范围
审查并约束长期记忆相关的注入路径:V2 本地记忆、LivingMemory 委托、mem0 集成、legacy intelligent responder prompt 构建。优先小修和测试,不做记忆系统重构。
独立验收标准
delegate_memory_to_livingmemory=True且disable_local_memory_when_delegated=True时,本地长期记忆内容不得再次注入 LLM prompt;相关行为有单测覆盖。extra_user_content_parts或等价 late user/content part;不得无条件拼入稳定 persona/system prompt 前缀。非目标
建议测试覆盖
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:继续覆盖高成本组合警告与默认安全配置。