Skip to content

记忆系统

**本文引用的文件** - [[[[[bi-chat/bi_chat/src/services/long_term_memory.py]]]]](file/bi-chat/bi-chat/src/services/long-term-memory.py) - [[[[[bi-chat/bi_chat/src/core/config.py]]]]](file/bi-chat/bi-chat/src/core/config.py) - [[[[[bi-chat/bi_chat/src/core/vector_db.py]]]]](file/bi-chat/bi-chat/src/core/vector-db.py) - [[[[[bi-chat/bi_chat/src/ontology/retriever.py]]]]](file/bi-chat/bi-chat/src/ontology/retriever.py) - [[[[[bi-chat/bi_chat/src/agents/conversation_manager.py]]]]](file/bi-chat/bi-chat/src/agents/conversation-manager.py) - [[[[[bi-chat/docs/memory_architecture.md]]]]](file/bi-chat/docs/memory-architecture.md) - [[[[[bi-chat/docs/chat_v1_design.md]]]]](file/bi-chat/docs/chat-v1-design.md) - [[[[[_bmad/_memory/config.yaml]]]]](file/bmad/memory/config.yaml)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向BI分析平台的记忆系统,系统性阐述短期记忆与长期记忆的管理机制,涵盖存储结构、数据持久化、访问优化、向量数据库集成、记忆压缩与去重、检索策略、更新与删除机制、配置与性能调优以及安全性与隐私保护方案。文档以实际代码与设计文档为依据,提供可视化架构图与流程图,帮助读者快速理解并落地实施。

项目结构

记忆系统由三层组成:短期记忆(会话级)、长期记忆(用户级)与缓存层(Redis)。短期记忆负责会话内对话历史的快速读写与持久化;长期记忆负责跨会话的用户偏好与经验沉淀;缓存层提供LLM调用、向量检索、联网搜索与统计数据的缓存,降低延迟与成本。

图表来源

章节来源

核心组件

  • 长期记忆服务:按用户实例化Mem0长期记忆,提供去重检索与异步记录能力,并修复Milvus更新异常。
  • 配置中心:集中管理模型、嵌入维度、Milvus连接、Redis、压缩阈值等运行参数。
  • 向量数据库:封装Milvus集合创建、索引建立与插入/查询接口。
  • 本体检索器:基于DashScope生成嵌入,结合Milvus与Neo4j进行指标与实体的语义检索与图谱扩展。
  • 会话管理器:负责短期记忆的加载、压缩与持久化,避免触发压缩的智能加载策略。

章节来源

架构总览

短期记忆采用“内存 + 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淘汰与空闲超时清理;长期记忆实例按需移除或清空。

章节来源

配置与性能调优

  • 配置项(示例)
    • 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结构

章节来源