当前位置: 首页 > news >正文

零基础 | AI应用记忆管理:从短期到长期的完整实践指南

文章目录

    • 📄 文档概述
    • 🔧 技术栈详解
      • 版本兼容性说明
      • 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架构改造而来。

在本项目中的作用

  • 实现长期记忆的存储和检索
  • 自动从对话中提取关键信息
  • 支持语义搜索和向量检索
  • 提供多用户隔离机制

核心功能

  • 记忆存储:将信息持久化到向量数据库
  • 记忆检索:基于语义相似度检索相关记忆
  • 记忆提取:自动从对话中提取事实信息
  • 记忆管理:支持增删改查操作

工作原理

  1. 接收用户输入和对话历史
  2. 调用LLM提取关键事实(自动去重、合并相似记忆)
  3. 将事实转换为向量嵌入
  4. 存储到向量数据库(ChromaDB)
  5. 查询时进行语义检索(支持多模态检索)
  6. 返回相关记忆作为上下文

与传统RAG的差异

维度传统RAGmem0
数据来源手动上传文档自动从对话中提取
记忆更新静态文档动态学习用户偏好
检索方式关键词匹配语义相似度检索
用户隔离无原生支持内置多用户隔离机制

优势

  • API简洁,易于集成
  • 支持多种向量数据库
  • 自动记忆提取,减少人工干预
  • 支持多用户隔离
  • 可扩展性强
  • 内置记忆去重与融合机制

ChromaDB

定义:一个开源的向量数据库,专为AI应用设计,支持语义搜索和相似度检索。

在本项目中的作用

  • 作为mem0的向量存储后端
  • 存储记忆的向量嵌入
  • 支持高效的语义检索
  • 提供本地持久化存储

核心特性

  • 向量存储:存储高维向量数据
  • 语义检索:基于向量相似度搜索
  • 元数据过滤:支持按元数据筛选
  • 本地优先:支持本地部署,无需云服务
  • 轻量级:易于集成和部署

工作原理

  1. 将文本转换为向量嵌入(Embedding)
  2. 存储向量和元数据
  3. 查询时将查询文本转换为向量
  4. 计算向量相似度(如余弦相似度)
  5. 返回最相似的记录

优势

  • 开源免费,无成本压力
  • 本地部署,数据隐私可控
  • 简单易用,快速上手
  • 支持多种嵌入模型
  • 良好的Python集成

技术栈协作关系

┌─────────────────────────────────────────────────────────┐ │ 应用层(Python) │ │ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │ │ │ChatHistory │ │MemoryManager │ │ Example │ │ │ │ Manager │ │ │ │ │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬──────┘ │ └─────────┼──────────────────┼──────────────────┼────────┘ │ │ │ │ │ │ ┌─────────┴──────────────────┴──────────────────┴────────┐ │ 框架层(LangChain + mem0) │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ FileChatMessage │ │ mem0 Memory │ │ │ │ History │ │ │ │ │ └────────┬─────────┘ └────────┬─────────┘ │ └───────────┼────────────────────┼───────────────────────┘ │ │ │ │ ┌───────────┴────────────────────┴───────────────────────┐ │ 存储层(ChromaDB + SQLite) │ │ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │ │ │ ChromaDB │ │ SQLite │ │ JSON Files │ │ │ │ 向量数据库 │ │ 历史数据库 │ │ 聊天历史 │ │ │ └──────────────┘ └──────────────┘ └─────────────┘ │ └──────────────────────────────────────────────────────────┘

数据流说明

  1. 用户输入 → Python应用层
  2. 短期记忆 → LangChain的FileChatMessageHistory → JSON文件
  3. 长期记忆 → mem0 → ChromaDB向量数据库
  4. 对话历史 → mem0 → SQLite数据库
  5. 检索时 → mem0从ChromaDB检索 → 返回相关记忆

技术选型理由

技术选型理由适用场景
PythonAI/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
  • 会话隔离机制
  • 类封装,易于扩展

二、核心技术点

  1. 会话历史管理:使用session_id隔离不同会话
  2. 内存缓存机制:mem_store字典缓存会话历史
  3. 文件持久化存储:JSON格式存储到本地文件
  4. LangChain集成:基于BaseChatMessageHistory接口
  5. 会话隔离:每个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
http://www.jsqmd.com/news/1380843/

相关文章:

  • 2026年余姚市GEO服务商代理加盟怎么选?本地靠谱推荐与城市合伙人启动指南 - 科技快讯
  • Python进阶 - re模块的match方法 从字符串开头匹配
  • 计算机毕业设计之个人博客系统设计与实现
  • 新疆维吾尔自治区武校招生需要什么条件|和田地区、伊犁哈萨克自治州、塔城地区文武学校入 - 圣龙武术朱老师
  • Playwright自动化测试与数据抓取:从安装到实战的完整指南
  • 2026年山东省济宁、聊城、菏泽三城瓷砖**,贝索斯瓷砖实力领跑本地家装 - GrowthUME
  • mongos信息 - 小镇
  • 成都有实力的网站建设:拒绝套路,只做能帮企业真正赚钱的官网,这才是成都做网站公司的良心之选
  • 从猴子吃桃问题深入理解逆向递归与数学建模
  • 从“使用”到“编排”:Claude Code 进阶实战思路
  • 2026年嘉兴秀洲区GEO服务商代理加盟指南:本地靠谱推荐与城市合伙人模式全解析 - 科技快讯
  • Python编程能力跃迁:从NOJ作业到实战项目的解题思维与技能串联
  • Ubuntu 20.04搭建ARM交叉编译环境:从工具链配置到实战应用
  • 2026德阳市数码回收哪家靠谱?正规渠道避坑指南 - 新闻快传
  • 不是 AI 替代人,而是分工变了:一次真实项目的提效与收口复盘
  • UE4游戏安全实战:从线程发包到HOOK加密解密的逆向分析
  • InnoExtractor Plus
  • 2026年全域投流公司**:广东金袋鼠传媒科技有限公司实力领衔 - GrowthUME
  • 容器化部署Palworld专用服务器的技术实践与架构解析
  • 5分钟快速入门:如何使用RecastNavigation构建专业的游戏导航系统
  • 音乐扒谱不再困难:三步解锁专业级前端扒谱工具noteDigger
  • AI应用开发四大基石:RAG、Agent、MCP与Skill深度解析与实战架构
  • 【ORC】布隆过滤器的误判率如何设置?它对查询性能和存储开销的影响如何权衡?
  • Win11下VCRedist10安装失败解决方案
  • MaaS 服务商怎么选?一站式多模型聚合‑RAG‑网页解析全套方案 - 新闻快传
  • [SDXI(15)] SDXI PCIe、MMIO、Doorbell 与 PF/VF Mailbox
  • Linux进程管理:从kill命令到pgrep/pkill的精准进程终止指南
  • 通用智能体记忆系统设计:基于控制相关性的三层架构与实战
  • Python包管理革命:uv如何用Rust实现依赖安装速度的飞跃
  • 【ORC】如何通过调整 Stripe 大小来优化大表的查询性能?