AI 记忆:短期 + 长期 动手 Demo

配套理论:content/03-rag/ai-memory-short-term-vs-long-term.md(译自 mem0.ai)

一组纯内存、可单文件运行的渐进式 demo,把「短期记忆 + 长期记忆 + 写穿透编排」从原理手搓一遍,最后对照 mem0 开源库(A 路线)。生产里换成 Redis / Qdrant 时,只有存储层实现要改,业务逻辑不变。

文件地图

文件对应译文章节是否需要 API/联网一句话
00_配置提供商.py测试连通性时需要统一 embed() / chat() / cosine_sim(),换提供商只改 .env
01_短期记忆_会话缓冲.py《短期记忆》❌ 纯逻辑,离线可跑滑动窗口 + token 预算;演示朴素截断如何引发「灾难性遗忘」
02_长期记忆_向量存储.py《长期记忆》✅ 调 embedding内存向量库:写入 / 检索 Top-K / 行级隔离 / 陈旧更新
03_写穿透_记忆编排.py《如何结合短期与长期》✅ 调 chat + embedding写穿透五步 + LLM 事实抽取整合,手搓一个记忆智能体
04_用mem0库.pyA 路线安装 mem0ai 后可跑同样的事,mem0 两行搞定(未装库则只打印说明)

快速开始

cd code/memory
pip install -r requirements.txt
cp .env.example .env          # 填入 API Key,选 PROVIDER
 
# 1) 短期记忆——离线即可看效果,最快入门
python 01_短期记忆_会话缓冲.py
 
# 2) 验证模型连通性(需要 .env)
python 00_配置提供商.py
 
# 3) 长期记忆 / 写穿透编排(需要 .env + 联网)
python 02_长期记忆_向量存储.py
python 03_写穿透_记忆编排.py
 
# 4) A 路线:直接用 mem0 开源库
pip install mem0ai
python 04_用mem0库.py

国内推荐用硅基流动(siliconflow):一个 key 同时给 embedding(BGE-M3)和 chat,有免费额度。

你会看到什么

  • 01:从对话头部砍消息 → 系统提示被删,模型忘记自己是谁;固定(pin)系统提示 + 滑动窗口 → 人设与红线始终在场。
  • 02:用户 A 检索不到用户 B 的记忆(行级隔离);用户搬家后若不更新 embedding,模型会自信地答出旧地址(数据陈旧)。
  • 03:第 1 轮说「我叫 Sarah、只写 Python」被整合进长期记忆;第 2 轮推荐框架时这些事实被检索回来注入上下文——跨轮、跨会话记忆生效

关于「A 路线 = 克隆 mem0」

mem0 是 Apache-2.0 开源,允许本地自建、修改、商用。04_用mem0库.py 演示把它的 llm / embedder 指向 OpenAI 兼容网关(如硅基流动)即可国内可用。

⚠️ 合规提醒:克隆代码自建合法;但若想做对外的官网/文档中文镜像站,会涉及文档版权与 “Mem0” 商标,需先取得授权——详见仓库根目录相关说明。本目录只做学习用途的自建与自用翻译。

从 Demo 到生产

这里(学习版)生产替换为
内存 list 当向量库Qdrant / Pinecone / pgvector
同步 consolidate()异步 worker(Celery / 队列)
token 预算用字符数估算真实 tokenizer(tiktoken 等)
进程内会话状态Redis 会话存储
手搓编排mem0 / LangMem 等记忆层