记忆系统
**本文引用的文件** - [[bi-chat/bi_chat/src/services/long_term_memory.py]](../ai/file/bi-chat/bi-chat/src/services/long-term-memory.py) - [[bi-chat/bi_chat/src/core/config.py]](../ai/file/bi-chat/bi-chat/src/core/config.py) - [[bi-chat/bi_chat/src/core/vector_db.py]](../ai/file/bi-chat/bi-chat/src/core/vector-db.py) - [[bi-chat/bi_chat/src/ontology/retriever.py]](../ai/file/bi-chat/bi-chat/src/ontology/retriever.py) - [[bi-chat/bi_chat/src/agents/conversation_manager.py]](../ai/file/bi-chat/bi-chat/src/agents/conversation-manager.py) - [[bi-chat/docs/memory_architecture.md]](../ai/file/bi-chat/docs/memory-architecture.md) - [[bi-chat/docs/chat_v1_design.md]](../ai/file/bi-chat/docs/chat-v1-design.md) - [[_bmad/_memory/config.yaml]](../ai/file/bmad/memory/config.yaml)
目录
简介
本文件面向BI分析平台的记忆系统,系统性阐述短期记忆与长期记忆的管理机制,涵盖存储结构、数据持久化、访问优化、向量数据库集成、记忆压缩与去重、检索策略、更新与删除机制、配置与性能调优以及安全性与隐私保护方案。文档以实际代码与设计文档为依据,提供可视化架构图与流程图,帮助读者快速理解并落地实施。
项目结构
记忆系统由三层组成:短期记忆(会话级)、长期记忆(用户级)与缓存层(Redis)。短期记忆负责会话内对话历史的快速读写与持久化;长期记忆负责跨会话的用户偏好与经验沉淀;缓存层提供LLM调用、向量检索、联网搜索与统计数据的缓存,降低延迟与成本。
图表来源
章节来源
核心组件
- 长期记忆服务:按用户实例化Mem0长期记忆,提供去重检索与异步记录能力,并修复Milvus更新异常。
- 配置中心:集中管理模型、嵌入维度、Milvus连接、Redis、压缩阈值等运行参数。
- 向量数据库:封装Milvus集合创建、索引建立与插入/查询接口。
- 本体检索器:基于DashScope生成嵌入,结合Milvus与Neo4j进行指标与实体的语义检索与图谱扩展。
- 会话管理器:负责短期记忆的加载、压缩与持久化,避免触发压缩的智能加载策略。
章节来源
- [bi-chat/bi_chat/src/services/long_term_memory.py]
- [bi-chat/bi_chat/src/core/config.py]
- [bi-chat/bi_chat/src/core/vector_db.py]
- [bi-chat/bi_chat/src/ontology/retriever.py]
- [bi-chat/bi_chat/src/agents/conversation_manager.py]
架构总览
短期记忆采用“内存 + PostgreSQL”的双写策略,支持基于Token阈值的压缩与LRU淘汰;长期记忆采用Mem0 + Milvus,按用户隔离实例,提供去重检索与异步记录,提升用户体验与系统吞吐。
图表来源
章节来源
详细组件分析
长期记忆服务(Mem0 + Milvus)
- 用户级实例管理:LongTermMemoryService按用户缓存实例,避免重复创建;提供统计接口与清理接口。
- 去重检索:BIMem0LongTermMemory重写检索方法,对关键词检索结果进行去重,避免重复记忆返回。
- 异步记录:record_to_memory异步触发,立即返回友好提示,后台完成分析、嵌入与存储。
- Milvus修复:FixedMilvusVectorStore包装vector_store的update方法,避免只更新metadata时传入None导致的错误。
图表来源
章节来源
向量数据库集成(Milvus)
- 集合与索引:MilvusHelper根据集合类型(指标/实体)创建集合,设置字段与索引参数(L2距离、IVF_FLAT),并建立向量索引。
- 插入与查询:提供插入接口flush确认持久化;检索接口返回TopK候选。
- 本体检索:OntologyRetriever基于DashScope生成查询向量,结合Milvus与Neo4j进行指标与实体的语义检索与图谱扩展。
图表来源
章节来源
短期记忆(会话级)
- 加载策略:ConversationManager从PostgreSQL按时间倒序加载消息,使用字符计数估算避免触发压缩;按轮次聚合消息,确保完整对话单元。
- 压缩与持久化:超过阈值自动压缩,保留最近若干轮;reply完成后增量保存新增消息至数据库。
- LRU与并发:最大会话数限制与空闲超时清理;会话级锁保证并发安全。
图表来源
章节来源
记忆检索策略
- 语义搜索:基于DashScope嵌入,Milvus向量检索,支持TopK返回与用户隔离过滤。
- 关键词匹配:对多个关键词并行检索,合并后去重,避免重复记忆。
- 上下文相关性:结合Neo4j图谱扩展业务域上下文与实体关系,增强检索质量。
章节来源
记忆更新与删除机制
- 增量更新:短期记忆reply后增量保存;长期记忆record_to_memory异步执行,立即返回。
- 版本控制:Mem0内部维护版本与元数据,支持更新与检索。
- 垃圾回收:短期记忆LRU淘汰与空闲超时清理;长期记忆实例按需移除或清空。
章节来源
- [bi-chat/bi_chat/src/services/long_term_memory.py]
- [bi-chat/bi_chat/src/agents/conversation_manager.py]
配置与性能调优
- 配置项(示例)
- LLM与嵌入:模型名、DashScope密钥、嵌入维度
- 数据库:StarRocks、PostgreSQL、Milvus、Redis、Neo4j
- 记忆压缩:开关、阈值、保留最近轮次
- 长期记忆模式:agent_control / static_control / both
- 缓存TTL建议:LLM缓存24h、向量检索1h、联网搜索2h、统计数据可配置
- 并发与容量:短期记忆最大会话数1000;根据QPS调整缓存容量与索引参数
章节来源
安全性与隐私保护
- 用户隔离:长期记忆按user_name实例化,Milvus检索增加用户过滤条件,避免跨用户数据泄露。
- 缓存与日志:敏感信息不缓存;日志记录遵循最小化原则,避免输出明文敏感数据。
- 外部依赖:DashScope与Milvus均通过配置中心统一管理密钥与地址,避免硬编码。
章节来源
依赖分析
- 组件耦合
- ConversationManager与InMemoryMemory/PostgreSQL耦合紧密,负责短期记忆的加载与持久化。
- LongTermMemoryService与BIMem0LongTermMemory/ Milvus耦合,提供用户级实例管理与检索增强。
- OntologyRetriever与MilvusHelper/Neo4j耦合,负责本体检索与图谱扩展。
- 外部依赖
- DashScope用于文本嵌入;Milvus用于向量检索;Neo4j用于业务域图谱扩展;Redis用于缓存;PostgreSQL用于短期记忆持久化。
图表来源
章节来源
性能考虑
- 向量检索优化:合理设置索引类型与nlist;控制查询top_k;缓存热点查询结果。
- 记忆压缩:短期记忆采用阈值与保留最近轮次策略;长期记忆采用异步记录减少主线程阻塞。
- 缓存策略:针对不同数据类型设置差异化TTL;监控命中率并动态调整。
- 并发与资源:短期记忆LRU与会话锁;长期记忆实例缓存与用户隔离,避免全局锁竞争。
故障排查指南
- Milvus更新异常:若出现“向量为空”错误,检查是否仅更新metadata;使用FixedMilvusVectorStore包装vector_store的update方法。
- 检索重复:若关键词较多导致重复记忆,确认已启用BIMem0LongTermMemory的去重逻辑。
- 缓存命中低:检查Redis连接与TTL设置;关注热点数据是否预热。
- 会话超时:确认max_idle_seconds与max_sessions配置;监控活跃会话数。
章节来源
结论
本记忆系统通过短期记忆与长期记忆的分层设计,结合缓存与向量数据库,实现了高可用、高性能的记忆管理。短期记忆保障会话内的即时响应与持久化,长期记忆提供跨会话的知识沉淀与语义检索。通过去重检索、异步记录、压缩与LRU等机制,系统在保证体验的同时兼顾成本与稳定性。建议持续监控关键指标,按业务场景调优缓存与索引参数,并完善安全与隐私保护措施。
附录
- 配置参考
- LLM与嵌入:模型名、DashScope密钥、嵌入维度
- 数据库:StarRocks、PostgreSQL、Milvus、Redis、Neo4j
- 记忆压缩:开关、阈值、保留最近轮次
- 长期记忆模式:agent_control / static_control / both
- 相关文档
- 记忆架构设计与监控告警
- Chat V1 设计与Agent结构
章节来源