开源精选 Mem0记忆Agent向量数据库RAG
云
云铭
进化之路 · 扫码阅读
微信 · 浏览器扫码
在手机上获得更好的阅读体验
Mem0深度解析:AI Agent的通用记忆层
“你叫什么名字?""我叫小明。""好的。""……三分钟后……""你叫什么名字?""……”——没有记忆的Agent就像失忆的朋友。Mem0的出现,终于解决了Agent的”健忘症”。
项目速览
| 维度 | 详情 |
|---|---|
| GitHub | mem0ai/mem0 |
| Stars | ~58K |
| 语言 | Python |
| 许可证 | Apache 2.0 |
| 定位 | AI Agent的通用记忆层 |
为什么Agent需要专门的记忆层
传统方案的局限
方案1:全放Prompt里 → 上下文窗口再大也有上限,成本随对话长度线性增长
方案2:存数据库自己管理 → 每个Agent都要重复造轮子
方案3:RAG检索 → 只能做语义搜索,缺乏结构化的记忆更新逻辑
Mem0 的答案:用LLM来管理记忆——让AI自己决定什么值得记住、什么时候更新、什么时候遗忘。
Mem0的三大记忆类型
┌─────────────────────────────────────────────┐
│ Mem0 记忆系统 │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 用户记忆 │ │ 会话记
忆 │ │
│ │ (User) │ │ (Session) │ │
│ │ 跨会话持久化 │ │ 单次对话 │ │
│ │ 用户偏好/事实 │ │ 对话上下文 │ │
│ └─────────────┘ └─────────────┘ │
│ ┌─────────────────────────────┐ │
│ │ Agent记忆 (Agent) │ │
│ │ Agent学到的知识和模式 │ │
│ │ "遇到X情况用Y方法" │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────────────┘
核心架构
记忆的生命周期
用户消息进入
↓
记忆提取器(用LLM分析消息)
↓
┌─ 需要记住的信息?
│ ├─ 用户偏好:"用户喜欢简洁的回答"
│ ├─ 用户事实:"用户是Python开发者"
│ ├─ 历史事件:"上次我们讨论了X"
│ └─ 行为模式:"用户通常在早上问技术问题"
│
├─ 与已有记忆冲突?
│ ├─ 是 → 更新或合并
│ └─ 否 → 新增
│
├─ 旧的记忆是否过时?
│ └─ 是 → 衰减或删除
│
└─ 存储(向量化 + 结构化元数据)
↓
下次对话时语义检索
关键代码示例
from mem0 import Memory
# 初始化记忆
m = Memory()
# 添加记忆
m.add(
"用户偏好用中文回复,喜欢代码示例,在开发一个电商平台",
user_id="alice",
metadata={"category": "user_preferences"}
)
m.add(
"用户正在用React+Python FastAPI开发电商项目,遇到支付集成问题",
user_id="alice",
metadata={"category": "project_context"}
)
m.add(
"上次建议使用Stripe API处理支付,用户选择先用支付宝沙箱测试",
user_id="alice",
metadata={"category": "decision_history"}
)
# 智能检索(记忆冲突和更新自动处理)
memories = m.search(
"支付功能怎么做?",
user_id="alice",
limit=5
)
for memory in memories:
print(f"[{memory['metadata']['category']}] {memory['memory']}")
# 自动返回最相关的记忆:
# [project_context] 用户正在用React+Python FastAPI开发电商项目...
# [decision_history] 上次建议使用Stripe API处理支付...
# [user_preferences] 用户偏好用中文回复...
记忆的自动更新
# Mem0会智能处理记忆冲突
m.add("用户现在偏好用英文回复了", user_id="alice")
# Mem0自动检测到与之前的"偏好中文"冲突
# → 更新记忆为"偏好英文"
# → 保留更新历史
m.add("用户电商项目已上线,目前在做移动端适配", user_id="alice")
# Mem0检测到项目阶段的变化
# → 更新project_context记忆
# → 但保留"支付集成用支付宝"这个关键决策
记忆的智能处理
1. 自动去重与合并
# 当你添加类似的信息时,Mem0不会创建重复记忆
m.add("用户叫张三",
user_id="user1")
# 创建记忆:姓名=张三
m.add("用户的名字是张三,在北京工作", user_id="user1")
# 不会创建"姓名=张三",而是合并为:
# 记忆:姓名=张三,工作地=北京
2. 记忆冲突解决
# LLM驱动的冲突检测
conflict_check_prompt = """
已有记忆:{existing_memory}
新信息:{new_information}
判断:
1. 是否与已有记忆冲突?
2. 如果冲突,哪个更可信?(新信息通常更可信)
3. 如果不冲突,如何合并?
输出:
{
"action": "merge/update/keep_existing/flag_for_review",
"merged_memory": "...",
"reasoning": "..."
}
"""
3. 记忆衰减
m = Memory(
config={
"memory_decay": {
"enabled": True,
"half_life_days": 30, # 30天后记忆权重减半
"min_weight": 0.1 # 最低保留0.1的权重(不完全删除)
}
}
)
集成方式
与LangChain集成
from langchain.memory import Mem0Memory
from langchain.agents import create_openai_functions_agent
memory = Mem0Memory(
user_id="user_123",
memory_client=m_client
)
agent = create_openai_functions_agent(
llm=llm,
tools=tools,
prompt=prompt,
memory=memory # Agent自动获得记忆能力
)
与CrewAI集成
from crewai import Crew, Agent, Task
agent = Agent(
role="客服代表",
goal="提供个性化的客户支持",
backstory="...",
memory=True, # CrewAI内置Mem0集成
memory_config={
"provider": "mem0",
"user_id": "customer_service_agent"
}
)
REST API
# 通过HTTP API使用
import requests
# 添加记忆
requests.post("https://api.mem0.ai/v1/memories/", json={
"messages": [
{"role": "user", "content": "我喜欢用TypeScript开发"}
],
"user_id": "dev_001"
})
# 搜索记忆
response = requests.get("https://api.mem0.ai/v1/memories/", params={
"user_id": "dev_001",
"query": "用户喜欢什么编程语言"
})
部署方案
开发/测试:Mem0 Cloud (免费额度足够)
↓
中小规模:自托管 Mem0 OSS + ChromaDB
↓
企业级:自托管 Mem0 OSS + PostgreSQL + pgvector
为什么Mem0如此重要
它解决了Agent的”灵魂”问题
没有记忆的Agent → 工具(每次都是新的开始)
有记忆的Agent → 伙伴(越用越懂你)
有智能记忆的Agent → 真正的个人助手(主动预测需求)
记忆能力是Agent从”Chatbot”进化为”AI助手”的关键一步。Mem0把这个能力做成了即插即用的基础设施,让每个Agent开发者不用从零实现记忆系统。
Mem0可能是Agent生态中最被低估的基础设施项目。它不是最闪耀的那个(不能生成代码,不能编排Agent),但它是让Agent”有灵魂”的那个——有了记忆,Agent才能真正成为一个”谁”,而不是一个”什么”。
GitHub: https://github.com/mem0ai/mem0