为什么需要 LLM 记忆层?

上下文窗口的局限

  • 有限的 Token 数(128K ~ 2M)
  • 超出窗口后信息丢失
  • 跨会话无法保留用户信息
  • 长对话成本线性增长

记忆层的解决方案

  • 将重要信息持久化存储
  • 按需检索相关记忆注入上下文
  • 支持跨会话、跨项目的长期记忆
  • 智能管理记忆的生命周期

记忆类型

  • 短期记忆:当前对话窗口内
  • 长期记忆:跨会话持久化
  • 语义记忆:基于内容相似度检索
  • 情景记忆:基于时间和上下文
记忆架构概览

典型 Agent 记忆架构

┌──────────────────────────────────────────────────────────────────┐
│                        用户交互层                                   │
│                  (Input / Output / Tool Calls)                      │
└──────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌──────────────────────────────────────────────────────────────────┐
│                     LLM Memory Manager                              │
│              (记忆写入 / 检索 / 更新 / 遗忘)                         │
├──────────────────────────────────────────────────────────────────┤
│  ┌─────────────────┬─────────────────┬─────────────────┐          │
│  │  Working Memory │  Episodic Memory │ Semantic Memory │          │
│  │  (当前上下文)    │  (会话历史)       │  (知识图谱/向量)  │          │
│  └─────────────────┴─────────────────┴─────────────────┘          │
└──────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌──────────────────────────────────────────────────────────────────┐
│                     持久化存储层                                     │
│  ┌───────────┐  ┌───────────┐  ┌───────────┐  ┌───────────┐       │
│  │  SQLite   │  │  Postgres │  │  Vector DB │  │  Graph DB │       │
│  └───────────┘  └───────────┘  └───────────┘  └───────────┘       │
└──────────────────────────────────────────────────────────────────┘
核心记忆工具

1. Mem0 — 通用 LLM 记忆层

🟣
Mem0
开源 / 商业 · 通用记忆层

轻量级 LLM 记忆层,将记忆管理抽象为简单的 API,可嵌入到任何 LLM 应用中。支持语义检索、记忆更新和遗忘。

核心特性

  • ✨ 自动从对话中提取重要信息作为记忆
  • 🔍 基于语义相似度检索相关记忆
  • ♻️ 智能更新和合并已有记忆(避免重复)
  • 🗑️ 支持记忆删除和遗忘
  • 🔌 可作为 LangChain / LlamaIndex 的集成组件
  • 💾 支持多种存储后端(PostgreSQL / MongoDB / 向量数据库)

安装与使用

# 安装
pip install mem0ai

# 配置
from mem0 import Memory
memory = Memory.from_config({
    "vector_store": {
        "provider": "qdrant",
        "config": {"collection_name": "user_memory", "path": ":memory:"}
    },
    "llm": {
        "provider": "openai",
        "config": {"model": "gpt-4o", "api_key": "sk-xxx"}
    }
})

# 添加记忆
memory.add("我喜欢川菜,尤其是麻婆豆腐", user_id="user_123")

# 检索记忆
results = memory.search("用户喜欢什么菜?", user_id="user_123")
# → [{"memory": "用户喜欢川菜,尤其是麻婆豆腐", "score": 0.92}]

# 获取所有记忆
all_memories = memory.get_all(user_id="user_123")

# 删除记忆
memory.delete(memory_id="mem_001", user_id="user_123")

与 LangChain 集成

from mem0 import Memory
from mem0.configs import MemoryConfig

memory = Memory.from_config(MemoryConfig(...))

# 在对话中自动维护记忆
from langchain.memory import ConversationBufferMemory

class Mem0ConversationMemory(ConversationBufferMemory):
    def save_context(self, inputs, outputs):
        super().save_context(inputs, outputs)
        # 自动将对话内容存入 Mem0
        memory.add(
            f"User: {inputs['input']}
Assistant: {outputs['response']}",
            user_id=self.user_id
        )
• • •

2. Zep — 面向 Agent 的长期记忆

🔵
Zep
开源 · 专用记忆服务

为 LLM Agent 提供持久化记忆服务,侧重于会话历史的存储、检索和摘要。支持跨会话的长期记忆。

核心概念

Session(会话)
独立的对话上下文容器,对应单个用户会话
Memory(记忆)
从消息中自动提取的长期事实和偏好
Summary(摘要)
自动生成的会话摘要,节省 Token
User(用户)
跨会话的用户画像,存储持久偏好

部署与使用

# Docker 部署 Zep 服务
docker compose up -d

# Python 客户端
from zep_cloud.client import Zep

client = Zep(api_key="your-api-key")

# 添加消息到会话
client.add(
    session_id="session_001",
    messages=[
        {"role": "user", "content": "我叫小明,住在上海"},
        {"role": "assistant", "content": "好的,小明!有什么可以帮忙?"},
    ]
)

# 搜索记忆
memories = client.memory.search(
    session_id="session_001",
    query="用户叫什么名字?"
)

# 获取用户历史摘要
summary = client.memory.get_summary(session_id="session_001")
• • •

3. AgentMemory — 企业级记忆服务

🟢
AgentMemory
企业级 · 专注业务场景

面向企业 Agent 的记忆服务,强调业务记忆的结构化管理、权限控制和审计。

特点

  • 支持业务实体级别的记忆(客户、订单、产品等)
  • 多租户隔离和权限控制
  • 记忆操作的完整审计日志
  • 支持记忆共享和协作
  • 与主流 Agent 框架(LangChain、AutoGen 等)集成

使用示例

from agentmemory import AgentMemoryClient

client = AgentMemoryClient(
    project_id="enterprise_project",
    api_key="sk-xxx"
)

# 记录业务记忆
client.remember(
    agent_id="sales_agent_01",
    memory_type="customer_preference",
    content={
        "customer_id": "C12345",
        "preferred_contact": "email",
        "budget_range": "50k-100k",
        "interested_categories": ["SaaS", "AI"]
    }
)

# 根据业务上下文检索
memories = client.recall(
    agent_id="sales_agent_01",
    context="准备客户 C12345 的方案",
    memory_types=["customer_preference", "history"]
)
• • •

4. MemGPT — 对话式记忆管理

🔴
MemGPT
开源 · 长对话记忆

专为长对话场景设计的记忆管理系统,使用分层记忆架构(核心记忆 + 档案记忆 + 向量记忆)。

三层记忆架构

Core Memory(核心记忆)
存储:关键身份信息、长期偏好
容量:受上下文窗口限制(~25% 窗口)
示例:用户姓名、角色、核心目标
Recall Memory(档案记忆)
存储:完整的历史对话记录
容量:无限(存在磁盘/SQLite)
示例:过去所有的对话消息
Vector Memory(向量记忆)
存储:语义向量索引的信息片段
容量:无限(向量数据库)
示例:对话中提取的知识点

工作原理

  1. 接收到新消息后,LLM 判断是否需要更新记忆
  2. 如果是长期信息 → 写入 Core Memory
  3. 如果是情景信息 → 写入 Recall Memory
  4. 如果是知识信息 → 写入 Vector Memory
  5. 回复时按需从各层检索相关记忆注入上下文
其他记忆方案

其他记忆工具速查

🧩
LangGraph Memory
LangGraph 内置的记忆检查点,支持图状态持久化
💾
LlamaIndex ChatMemory
LlamaIndex 框架的内存/持久化聊天记忆
🎯
AutoGen Memory
微软 AutoGen 的多 Agent 共享记忆
🗂️
Vector Database 原生
Pinecone / Weaviate / Qdrant 直接作为记忆后端
🌲
Mem0 + 向量库组合
最灵活的方案,可按业务需求自由组合
🔗
MCP Memory Server
基于 MCP 协议的标准化记忆服务
记忆最佳实践

记忆系统的设计原则

1
分层存储

区分短期工作记忆和长期持久记忆,不同层级使用不同的存储方案

2
自动提取

不要手动指定什么该记忆,让 LLM 自动判断哪些信息值得持久化

3
智能更新

发现冲突信息时,自动更新旧记忆而非简单追加

4
按需检索

不要把所有记忆都塞给 LLM,而是根据当前上下文只检索最相关的

5
安全脱敏

敏感信息(密码、密钥)不要存入记忆层,或进行加密处理

6
可解释性

让用户可以查看、编辑和删除自己的记忆,增加透明度和可控性

• • •

记忆工具选型建议

💡
选型指南

快速集成 → Mem0(最简 API,10 分钟上手)
长对话场景 → MemGPT(分层记忆,适合客服/陪聊)
多会话管理 → Zep(会话为中心,支持摘要自动生成)
企业业务 → AgentMemory(结构化业务记忆,权限审计)
框架原生 → 使用 LangGraph/LlamaIndex 原生记忆(无需额外服务)
轻量定制 → Mem0 + 任意向量数据库组合