文章目录
- 📄 文档概述
- 🔧 技术栈详解
- 版本兼容性说明
- Python
- LangChain
- mem0
- ChromaDB
- 技术栈协作关系
- 技术选型理由
- 🎯 核心内容
- 📚 一、记忆的本质:大模型如何拥有长期记忆
- 短期记忆(Short-term Memory)
- 长期记忆(Long-term Memory)
- 二、核心问题与解决方案
- 🤔 核心问题
- 💡 解决方案
- 📁 二、项目架构:从短期到长期的记忆系统设计
- 🔧 二、短期记忆实现 - ChatHistoryManager
- 🎯 功能概述
- 二、核心技术点
- 三、代码实现
- 1. ChatHistoryManager类
- 📝 使用示例
- 📊 运行结果
- 🚀 三、长期记忆实现 - MemoryManager
- 🧠 mem0核心介绍
- ⚙️ mem0配置实现
- 1. memory_config.py - 配置管理
- 2. 环境变量配置(.env)
- 🏗️ MemoryManager类实现
- 📝 使用示例
- 🧪 完整示例(example.py)
- 六、运行结果示例
- 🔗 第五部分:短期与长期记忆的融合实践
- 一、融合架构设计
- 二、完整实现示例
- 三、融合策略建议
- 🧪 第六部分:测试实现
- 一、ChatHistoryManager测试
- 二、MemoryManager测试(模拟测试)
- 三、运行测试
- 📊 第七部分:技术对比与选型
- 一、短期记忆 vs 长期记忆
- 二、mem0的优缺点
- 优点
- 缺点
- 三、项目特色
- 💡 第八部分:学习建议与最佳实践
- 一、存储扩展建议
- 二、性能优化建议
- 三、安全与隐私建议
- 四、功能增强建议
- 五、工程实践建议
- 📚 第九部分:相关资源
- LangChain相关
- mem0相关
- 向量数据库
- 其他资源
- 🎯 总结
- 🤔 思考题
- 📝 附录:快速开始
- 安装依赖
- 配置环境变量
- 运行示例
- 快速使用
📄 文档概述
- 创建时间:2026-01-25
- 作者:zuozewei
- 功能:AI应用记忆管理完整指南
- 技术栈:Python、LangChain、mem0、ChromaDB、OpenAI API、DeepSeek
- 项目路径:
https://github.com/zuozewei/blog-example/tree/master/AI-LLM/
🔧 技术栈详解
版本兼容性说明
本文采用以下经过验证的版本组合:
- Python 3.10+
- LangChain v0.2.10
- mem0 v1.1.2
- ChromaDB v0.5.11
Python
定义:AI/ML领域的主流开发语言,生态系统成熟完善。
在本项目中的作用:
- 作为主要开发语言,实现记忆管理逻辑
- 丰富的AI/ML生态系统支持
- 简洁易读的语法,便于快速开发
关键特性:
- 动态类型系统
- 强大的标准库
- 跨平台支持
- 活跃的社区支持
LangChain
定义:一个用于构建大模型应用的框架,提供模块化组件和工具链。
在本项目中的作用:
- 提供聊天历史管理接口(BaseChatMessageHistory)
- 实现文件持久化存储(FileChatMessageHistory)
- 集成大模型调用(ChatOpenAI)
- 提供提示词模板(ChatPromptTemplate)
核心组件:
- ChatMessageHistories:管理对话历史记录
- Chat Models:与大模型交互的接口
- Prompts:提示词模板管理
- Chains:将多个组件串联成工作流
优势:
- 模块化设计,易于组合
- 丰富的预构建组件
- 支持多种大模型提供商
- 活跃的社区和文档
mem0
定义:为大模型应用提供的可自我改进的记忆层框架,基于RAG架构改造而来。
在本项目中的作用:
- 实现长期记忆的存储和检索
- 自动从对话中提取关键信息
- 支持语义搜索和向量检索
- 提供多用户隔离机制
核心功能:
- 记忆存储:将信息持久化到向量数据库
- 记忆检索:基于语义相似度检索相关记忆
- 记忆提取:自动从对话中提取事实信息
- 记忆管理:支持增删改查操作
工作原理:
- 接收用户输入和对话历史
- 调用LLM提取关键事实(自动去重、合并相似记忆)
- 将事实转换为向量嵌入
- 存储到向量数据库(ChromaDB)
- 查询时进行语义检索(支持多模态检索)
- 返回相关记忆作为上下文
与传统RAG的差异:
| 维度 | 传统RAG | mem0 |
|---|---|---|
| 数据来源 | 手动上传文档 | 自动从对话中提取 |
| 记忆更新 | 静态文档 | 动态学习用户偏好 |
| 检索方式 | 关键词匹配 | 语义相似度检索 |
| 用户隔离 | 无原生支持 | 内置多用户隔离机制 |
优势:
- API简洁,易于集成
- 支持多种向量数据库
- 自动记忆提取,减少人工干预
- 支持多用户隔离
- 可扩展性强
- 内置记忆去重与融合机制
ChromaDB
定义:一个开源的向量数据库,专为AI应用设计,支持语义搜索和相似度检索。
在本项目中的作用:
- 作为mem0的向量存储后端
- 存储记忆的向量嵌入
- 支持高效的语义检索
- 提供本地持久化存储
核心特性:
- 向量存储:存储高维向量数据
- 语义检索:基于向量相似度搜索
- 元数据过滤:支持按元数据筛选
- 本地优先:支持本地部署,无需云服务
- 轻量级:易于集成和部署
工作原理:
- 将文本转换为向量嵌入(Embedding)
- 存储向量和元数据
- 查询时将查询文本转换为向量
- 计算向量相似度(如余弦相似度)
- 返回最相似的记录
优势:
- 开源免费,无成本压力
- 本地部署,数据隐私可控
- 简单易用,快速上手
- 支持多种嵌入模型
- 良好的Python集成
技术栈协作关系
┌─────────────────────────────────────────────────────────┐ │ 应用层(Python) │ │ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │ │ │ChatHistory │ │MemoryManager │ │ Example │ │ │ │ Manager │ │ │ │ │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬──────┘ │ └─────────┼──────────────────┼──────────────────┼────────┘ │ │ │ │ │ │ ┌─────────┴──────────────────┴──────────────────┴────────┐ │ 框架层(LangChain + mem0) │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ FileChatMessage │ │ mem0 Memory │ │ │ │ History │ │ │ │ │ └────────┬─────────┘ └────────┬─────────┘ │ └───────────┼────────────────────┼───────────────────────┘ │ │ │ │ ┌───────────┴────────────────────┴───────────────────────┐ │ 存储层(ChromaDB + SQLite) │ │ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │ │ │ ChromaDB │ │ SQLite │ │ JSON Files │ │ │ │ 向量数据库 │ │ 历史数据库 │ │ 聊天历史 │ │ │ └──────────────┘ └──────────────┘ └─────────────┘ │ └──────────────────────────────────────────────────────────┘数据流说明:
- 用户输入 → Python应用层
- 短期记忆 → LangChain的FileChatMessageHistory → JSON文件
- 长期记忆 → mem0 → ChromaDB向量数据库
- 对话历史 → mem0 → SQLite数据库
- 检索时 → mem0从ChromaDB检索 → 返回相关记忆
技术选型理由
| 技术 | 选型理由 | 适用场景 |
|---|---|---|
| Python | AI/ML领域主流语言,生态丰富 | 快速开发、原型验证 |
| LangChain | 提供标准化组件,降低开发复杂度 | 大模型应用开发 |
| mem0 | 专注记忆管理,API简洁 | 长期记忆实现 |
| ChromaDB | 开源免费,本地部署,隐私可控 | 向量存储和检索 |
🎯 核心内容
本指南全面介绍AI应用中的记忆管理技术,涵盖:
- 短期记忆:基于LangChain的聊天历史管理(ChatHistoryManager)
- 长期记忆:基于mem0的持久化记忆存储(MemoryManager)
- 记忆融合:短期与长期记忆的协同使用
- 工程实践:完整的项目结构、配置、测试和示例
📚 一、记忆的本质:大模型如何拥有长期记忆
大模型天生是"鱼的记忆"——每次对话都是全新的开始。要让AI记住用户的偏好和历史交互,我们需要通过两种方式实现记忆:
短期记忆(Short-term Memory)
- 将聊天历史放入提示词
- 仅能记住"近期"内容
- 受上下文窗口限制
- 适合单次会话的连续对话
- 实现方式:基于LangChain的FileChatMessageHistory
长期记忆(Long-term Memory)
- 突破上下文窗口限制
- 持久存储用户信息、偏好等
- 通过检索相关内容复用
- 适合跨会话的个性化服务
- 实现方式:基于mem0 + ChromaDB向量数据库
二、核心问题与解决方案
🤔 核心问题
- 大模型上下文窗口大小有限,无法承载无限历史
- 过大上下文会导致Token成本飙升
- 传输与计算效率低
💡 解决方案
借鉴RAG(检索增强生成)思路:
- 将需记忆内容存入向量数据库(ChromaDB)
- 生成时先检索相关内容
- 拼接上下文给大模型
- 解决信息存储、检索、深度挖掘问题
📁 二、项目架构:从短期到长期的记忆系统设计
src/mem0长期记忆/ ├── chat_history_manager.py # 短期记忆管理器 ├── memory_manager.py # 长期记忆管理器 ├── memory_config.py # mem0配置 ├── example.py # 使用示例 ├── .env # 环境变量配置 ├── history.db # SQLite历史数据库 ├── mem0db/ # ChromaDB向量数据库目录 │ ├── chroma.sqlite3 │ └── [uuid]/ # 向量数据文件 ├── tests/ # 测试目录 │ ├── __init__.py │ ├── test_chat_history_manager.py │ └── test_memory_manager.py └── README.md # 项目说明文档🔧 二、短期记忆实现 - ChatHistoryManager
🎯 功能概述
ChatHistoryManager为对话系统提供短期记忆能力,主要特点包括:
- 支持按会话ID管理不同用户的聊天历史
- 内存缓存与文件持久化相结合
- 基于LangChain的
FileChatMessageHistory - 会话隔离机制
- 类封装,易于扩展
二、核心技术点
- 会话历史管理:使用session_id隔离不同会话
- 内存缓存机制:mem_store字典缓存会话历史
- 文件持久化存储:JSON格式存储到本地文件
- LangChain集成:基于BaseChatMessageHistory接口
- 会话隔离:每个session_id独立存储
三、代码实现
1. ChatHistoryManager类
# -*- coding: utf-8 -*-""" @Time : 2025/12/14 04:33 @Author : zuozewei @File : chat_history_manager.py @Desc : 聊天历史管理 - 基于文件持久化+内存缓存,支持多会话隔离,实现对话历史的保存、读取和管理 """fromlangchain_community.chat_message_historiesimportFileChatMessageHistoryfromlangchain_core.chat_historyimportBaseChatMessageHistoryclassChatHistoryManager:"""聊天历史管理器类"""def__init__(self):"""初始化聊天历史管理器"""self.mem_store={}defget_session_history(self,session_id:str)->BaseChatMessageHistory:""" 获取会话历史 :param session_id: 会话ID :return: 会话历史 """ifsession_idnotinself.mem_store:self.mem_store[session_id]=FileChatMessageHistory(file_path=f"./history_{session_id}.json")returnself.mem_store[session_id]核心设计:
- 使用类封装,避免全局变量
mem_store字典缓存会话历史对象- 首次访问时创建
FileChatMessageHistory对象 - 后续访问直接返回缓存对象
- 文件路径格式:
history_{session_id}.json
📝 使用示例
fromchat_history_managerimportChatHistoryManagerfromlangchain_core.messagesimportHumanMessage,AIMessage# 创建管理器实例manager=ChatHistoryManager()# 获取或创建会话历史history=manager.get_session_history("user123")# 添加消息history.add_message(HumanMessage(content="你好,请问今天天气怎么样?"))history.add_message(AIMessage(content="今天天气晴朗,温度适宜。"))# 获取所有消息messages=history.messagesprint(f"会话历史包含{len(messages)}条消息")formsginmessages:print(f"{msg.type}:{msg.content}")# 清除历史记录history.clear()📊 运行结果
会话历史包含 2 条消息 human: 你好,请问今天天气怎么样? ai: 今天天气晴朗,温度适宜。🚀 三、长期记忆实现 - MemoryManager
🧠 mem0核心介绍
定义:为大模型应用提供的可自我改进的记忆层,由RAG框架改造而来,替代传统RAG,统一短期+长期记忆。
优势:
- API简洁易懂、功能强大
- 能满足长期记忆核心需求
- 工程化友好
- 支持语义检索,记忆提取精准
- 支持多用户隔离
⚙️ mem0配置实现
1. memory_config.py - 配置管理
# -*- coding: utf-8 -*-""" @Time : 2025/12/14 04:33 @Author : zuozewei @File : memory_config.py @Desc : mem0长期记忆配置 - 基于向量存储的持久化记忆系统 """importosimportwarningsfromdotenvimportload_dotenv load_dotenv()api_base=os.getenv("OPENAI_BASE_URL")oros.getenv("OPENAI_API_BASE")os.environ["OPENAI_API_KEY"]=os.getenv("OPENAI_API_KEY")os.environ["OPENAI_BASE_URL"]=api_basefrommem0importMemorydefcreate_memory():""" 创建Memory实例 :return: Memory实例 """returnMemory.from_config({"version":"v1.1","llm":{"provider":"openai","config":{"model":os.getenv("AI_MODEL","deepseek-v3.2"),"temperature":0,"max_tokens":1500,}},"embedder":{"provider":"openai","config":{"model":"text-embedding-v4"}},"vector_store":{"provider":"chroma","config":{"collection_name":"mem0db","path":"mem0db",}},"history_db_path":"history.db",})配置说明:
- 使用环境变量管理API密钥和模型配置
- 支持自定义OpenAI兼容API(如DeepSeek)
- 使用ChromaDB作为向量存储
- SQLite存储历史记录
- 版本:v1.1(支持图记忆)
2. 环境变量配置(.env)
# OpenAI API配置OPENAI_API_KEY=your_api_key_hereOPENAI_BASE_URL=https://api.openai.com/v1AI_MODEL=gpt-4o-mini# 或者使用DeepSeek# OPENAI_BASE_URL=https://api.deepseek.com/v1# AI_MODEL=deepseek-v3.2🏗️ MemoryManager类实现
# -*- coding: utf-8 -*-""" @Time : 2025/12/14 04:33 @Author : zuozewei @File : memory_manager.py @Desc : mem0长期记忆管理 - 基于向量存储的持久化记忆系统,支持多用户隔离和个性化回复 """importosfromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportChatPromptTemplatefrommemory_configimportcreate_memoryclassMemoryManager:"""记忆管理器类"""def__init__(self):"""初始化记忆管理器"""self.mem0=create_memory()api_base=os.getenv("OPENAI_BASE_URL")oros.getenv("OPENAI_API_BASE")self.llm=ChatOpenAI(model=os.getenv("AI_MODEL","deepseek-v3.2"),api_key=os.getenv("OPENAI_API_KEY"),base_url=api_base,temperature=0.7