基础用量
基本用法
相关源文件
以下文件为本 Wiki 页面的生成提供了上下文:
docs/cookbooks/essentials/building-ai-companion.mdxdocs/cookbooks/essentials/controlling-memory-ingestion.mdxdocs/cookbooks/essentials/entity-partitioning-playbook.mdxdocs/cookbooks/essentials/exporting-memories.mdxdocs/cookbooks/integrations/healthcare-google-adk.mdxdocs/cookbooks/integrations/openai-tool-calls.mdxdocs/cookbooks/overview.mdxdocs/core-concepts/memory-operations/add.mdxdocs/core-concepts/memory-operations/delete.mdxdocs/core-concepts/memory-operations/search.mdxdocs/core-concepts/memory-operations/update.mdxdocs/core-concepts/memory-types.mdxdocs/docs.jsondocs/llms.txtdocs/open-source/configuration.mdxdocs/open-source/overview.mdxdocs/open-source/python-quickstart.mdxdocs/platform/advanced-memory-operations.mdxdocs/platform/features/contextual-add.mdxdocs/platform/features/entity-scoped-memory.mdxdocs/platform/features/platform-overview.mdxdocs/platform/features/v2-memory-filters.mdxdocs/platform/overview.mdx
本页面提供 Mem0 的技术示例,涵盖简单的添加/搜索模式以及基本的 CRUD 操作。你将学习如何安装 Mem0、初始化客户端,以及在平台版和开源版(OSS)部署中管理记忆生命周期。
安装
Mem0 提供 Python 和 JavaScript/TypeScript 的 SDK。
Python
pip install mem0ai
JavaScript/TypeScript
npm install mem0ai
来源:docs/llms.txt:16-17、docs/open-source/python-quickstart.mdx:27-31
部署架构
Mem0 提供两种部署模型。虽然它们在概念模型上相似,但在基础设施和数据处理方式上有所不同。
系统流程:平台版 vs. 开源版
下图展示了自然语言操作在两种环境中对应的代码实体。
"自然语言空间到代码实体空间"
主要区别:
- 平台版:使用
MemoryClientdocs/llms.txt:27-32。基础设施(向量存储、图数据库、重排序器)由服务端管理docs/platform/overview.mdx:13-15。 - 开源版:使用
Memorydocs/llms.txt:87-92。通过Memory.from_config()控制整个技术栈docs/cookbooks/essentials/building-ai-companion.mdx:94-120。
来源:docs/llms.txt:3-12、docs/platform/overview.mdx:9-15、docs/open-source/overview.mdx:7-16
基本设置
平台版设置
MemoryClient 用于连接托管的 Mem0 API。
from mem0 import MemoryClient
client = MemoryClient(api_key="your-api-key")
来源:docs/llms.txt:30-32、docs/core-concepts/memory-operations/add.mdx:61-63
开源版设置
Memory 类在本地运行。默认情况下,它会查找 OPENAI_API_KEY 来驱动信息提取和嵌入向量生成。
from mem0 import Memory
# 默认配置:OpenAI LLM + Qdrant 向量存储
m = Memory()
默认开源版组件:
- 大语言模型(LLM):使用 OpenAI
gpt-4o-mini(部分文档中曾称为gpt-5-mini)进行事实提取docs/open-source/python-quickstart.mdx:82-82。 - 嵌入向量:使用 OpenAI
text-embedding-3-small(1536 维)docs/open-source/python-quickstart.mdx:83-83。 - 向量存储:Qdrant(磁盘存储,路径为
/tmp/qdrant)docs/open-source/python-quickstart.mdx:84-84。 - 历史记录:SQLite,路径为
~/.mem0/history.dbdocs/open-source/python-quickstart.mdx:85-85。
来源:docs/llms.txt:90-92、docs/open-source/python-quickstart.mdx:33-39、docs/open-source/overview.mdx:66-72
核心 CRUD 操作
1. 添加记忆
add() 方法会触发一个管线:信息提取 -> 冲突解决 -> 存储 docs/core-concepts/memory-operations/add.mdx:39-49。
"记忆入库的数据流"
示例(Python 开源版):
messages = [
{"role": "user", "content": "我是 Alex。我喜欢篮球和游戏。"},
{"role": "assistant", "content": "你好 Alex!我会记住这些信息。"}
]
m.add(messages, user_id="alex")
来源:docs/open-source/python-quickstart.mdx:42-49、docs/core-concepts/memory-operations/add.mdx:26-49
2. 搜索记忆
search() 将查询转换为向量并执行相似度搜索。
示例(Python 平台版):
# 使用元数据过滤器进行搜索
results = client.search(
"Alex 的兴趣爱好是什么?",
filters={"user_id": "alex"}
)
来源:docs/core-concepts/memory-operations/search.mdx:53-60、docs/open-source/python-quickstart.mdx:53-57
3. 更新与删除
可以通过 ID 更新记忆,也可以通过 ID 或过滤器删除记忆。
| 操作 | 方法 | 作用范围 |
|---|---|---|
| 更新 | update(memory_id, data) | 指定记忆 ID docs/llms.txt:46-46 |
| 删除 | delete(memory_id) | 单条记录 docs/core-concepts/memory-operations/delete.mdx:48-49 |
| 删除全部 | delete_all(user_id="alice") | 按用户/代理/运行过滤 docs/core-concepts/memory-operations/delete.mdx:108-116 |
警告:delete_all 现在需要显式指定过滤器。要清空整个项目,请使用通配符:client.delete_all(user_id="*", agent_id="*", app_id="*", run_id="*") docs/core-concepts/memory-operations/delete.mdx:135-157。
来源:docs/core-concepts/memory-operations/delete.mdx:10-24、docs/llms.txt:102-107
会话范围与过滤器
Mem0 使用标识符来隔离数据。在平台版中,这些标识符通过 filters 字典传递。在开源版中,它们通常是顶级关键字参数(不过 v3 版本正在与平台版语法对齐)。
| 参数 | 代码实体 | 描述 |
|---|---|---|
user_id | filters={"user_id": "..."} | 长期用户偏好 docs/core-concepts/memory-operations/add.mdx:24-24 |
agent_id | filters={"agent_id": "..."} | 特定 AI 代理的记忆 docs/core-concepts/memory-operations/delete.mdx:112-112 |
run_id | filters={"run_id": "..."} | 限定到特定执行或会话 docs/core-concepts/memory-operations/delete.mdx:115-115 |
metadata | metadata={"category": "..."} | 用于过滤的自定义键值对 docs/core-concepts/memory-operations/add.mdx:115-115 |
来源:docs/core-concepts/memory-operations/add.mdx:19-25、docs/core-concepts/memory-operations/search.mdx:75-82
实战示例:AI 伴侣循环
一个常见的模式是:在调用大语言模型(LLM)之前先搜索上下文,然后存储新的交互。
def chat(user_input, user_id):
# 1. 检索相关记忆
memories = client.search(user_input, filters={"user_id": user_id}, top_k=5)
context = "\n".join(m["memory"] for m in memories["results"])
# 2. 使用记忆上下文调用大语言模型(LLM)
response = openai_client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": f"你是一名教练。记忆信息:{context}"},
{"role": "user", "content": user_input}
]
).choices[0].message.content
# 3. 存储对话内容
client.add([
{"role": "user", "content": user_input},
{"role": "assistant", "content": response}
], user_id=user_id)
return response
来源:docs/cookbooks/essentials/building-ai-companion.mdx:63-84、docs/cookbooks/essentials/building-ai-companion.mdx:124-147