deepmem
Official一行代码从 Mem0 迁移——相同的 MemoryClient,相同的方法签名:
# Before - Mem0
from mem0 import MemoryClient
client = MemoryClient(api_key="m0-...")
# After - DeepMem (only the import changes)
from deepmem import MemoryClient
client = MemoryClient(api_key="dm_live-...") # get a key at deepmem.devpip install deepmem-client将对话转化为可搜索的长期记忆:一个 FastAPI HTTP API,前端对接
Qdrant 向量存储,具备 LLM 事实提取、混合检索(向量 + BM25 + 实体加权 + 时间衰减)、语义缓存、异步批量蒸馏、GDPR 控制,以及内置的 MCP 服务器。它以开放模式运行——无需 API 密钥、无需用户注册——因此你可以在几分钟内为你的智能体部署它。多租户隔离由请求体中的 user_id 驱动。
不想自托管? DeepMem Cloud 是这套引擎的托管版本,位于 deepmem.dev——相同的 API,无需基础设施。注册、获取密钥(
dm_live_...)、将 base URL 指向https://deepmem.dev,搞定。云服务和开源服务器使用相同的 Mem0 兼容 API,因此客户端代码完全一致。
从 Mem0 迁移
已经在用 Mem0?一行代码切换到 DeepMem 云服务。deepmem-client 包镜像了 mem0.MemoryClient——相同的类名、相同的方法签名、相同的 filters={"user_id": ...} 风格——因此导入之后的所有代码都无需改动。
pip install deepmem-client# before (Mem0)
from mem0 import MemoryClient
client = MemoryClient(api_key="m0-...")
client.add(messages, user_id="alex")
client.search("What can Alex cook?", filters={"user_id": "alex"})
# after (DeepMem cloud) - change one import line
from deepmem import MemoryClient
client = MemoryClient(api_key="dm_live_...") # key at https://deepmem.dev
client.add(messages, user_id="alex") # identical calls
client.search("What can Alex cook?", filters={"user_id": "alex"})add(infer=True)(默认值)在 DeepMem 云上是异步的——它返回pending=True且results=[],提取的事实会在几秒后落地。(Mem0 云的add也是异步的——它返回PENDING。)传入infer=False可进行同步的原始文本存储,立即可搜索。无图关系——DeepMem 使用混合向量检索(向量 + BM25 * 时间衰减),因此
relations始终为[]。Mem0 的图功能未被复刻。reset有所不同——Mem0 的是账户级;DeepMem 的是按user_id级别,并带有确认保护。
Related MCP server: mesh-memory
定价
DeepMem Cloud 在每个付费层级都比 Mem0 便宜 10 倍——相同的套餐结构,十分之一的价格。
层级 | DeepMem | Mem0 云服务 |
爱好者 | 免费 | 免费 |
入门 | $1.9/月 | $19/月 |
成长 | $7.9/月 | $79/月 |
专业 | $24.9/月 | $249/月 |
选择自托管则**$0**——你只需支付自己的 LLM/嵌入提供商费用(即 Mem0 在套餐价格之外收取的相同 LLM 成本),没有记忆服务的加价。批量蒸馏还能将 LLM 调用减少约 80%,因此即使你的提供商账单也比逐条消息提取更便宜。
套餐与限制:deepmem.dev · mem0.ai。
基准测试
没有精心挑选的标题数据。脚本和工作负载都放在 /benchmarks 中——你可以自行运行。以下是我们测得的指标以及产生这些结果的确切配置:
指标 | DeepMem 自托管 ¹ | DeepMem 云服务 | Mem0 云服务 |
搜索 p50 | 73 ms | 643 ms | 653 ms |
搜索 p95 | 86 ms | 811 ms | 710 ms |
搜索命中数(40 个查询) | - | 195 | 84 |
添加 p50(原始存储) | 899 ms ² | 792 ms | 695 ms ³ |
¹ BGE-M3 在 GTX 1070 GPU(2016 年时代)上运行,本地文件 Qdrant,
infer=False,100 次操作,并发数 1。² 主要受本地文件 Qdrant I/O 影响——使用 Qdrant 服务器可大幅降低。³ Mem0 没有原始存储模式;add始终执行 LLM 提取,因此此行并非同类对比。
自托管才是固有延迟所在——没有互联网 RTT,使用你自己的嵌入模型、你自己的 Qdrant。在老旧消费级 GPU 上搜索 p50 为 73 ms。
DeepMem 云在搜索 p50 上优于 Mem0 云(643 ms 对比 653 ms),且每次搜索返回的候选结果多 约 2.3 倍(40 个查询中 195 次命中对比 84 次)。
云延迟以 RTT 为主——两个云列均通过中国大陆的代理测得;运行间抖动约为 ±10%。在低 RTT 位置运行
/benchmarks获取你自己的数据。
为什么选择 DeepMem
智能体框架一直在重新发现它们需要持久化、可检索的记忆。托管方案按调用计费,并将你的数据发送到别人的云端。DeepMem 是可自托管的替代方案:你可以直接接入的、与 Mem0 相同形态的 API,但它运行在你自己的机器上,使用你的嵌入模型、你的 LLM 密钥、你的 Qdrant——而且代码就在这里,你可以自行验证。
DeepMem 与其他 Mem0 替代方案相比如何? 大多数替代方案仅限托管,或在别人的向量数据库之上叠加记忆层。DeepMem 同时结合了三件事:可自托管(你的数据留在你的机器上——除自己的 LLM 密钥外零成本)、原生支持 MCP(Claude Desktop / Cursor 可直接将读写记忆作为工具使用)、并且完全开源——而托管云运行的是完全相同的引擎,因此云和自托管是同一个 API,而不是两个产品。
没有 DeepMem | 使用 DeepMem |
每次会话都要重新解释你是谁、你在做什么 | 智能体自动回忆身份、项目和偏好 |
在会话之间丢失调试和研究上下文 | 过去的根因、死胡同和发现都会被回忆起来,工作不会重复 |
每次会话都要手动重复偏好 | 偏好跨会话、跨智能体、跨项目持久保存 |
托管记忆服务按调用计费并持有你的数据 | 在你的基础设施上自托管,或使用云服务——由你决定,API 相同 |
它是什么(实话实说)
混合检索,而非知识图谱。 搜索融合了向量相似度、BM25 关键词匹配、实体加权和时间衰减评分。没有时间图层;如果你需要那种功能,请看看 Zep。
存储偏好,而非代码转储。 大型围栏代码块在 LLM 提取前会被剥离,因此存储中填充的是持久的用户/项目事实,而不是粘贴的实现代码。
BYOK,多提供商。 自带 LLM(OpenAI / Anthropic / 任何兼容 OpenAI 的端点)和嵌入模型(BGE-M3 / Google / 兼容 OpenAI 的)。
原生支持 MCP。 内置 MCP 服务器,Claude Desktop / Cursor 可以直接读写记忆。
快速入门
三种运行方式。全部使用相同的 Mem0 兼容 API。
1. 云服务(零运维)
export DEEPMEM_API_KEY=dm_live_... # from https://deepmem.dev
curl https://deepmem.dev/v1/memories \
-H "Authorization: Bearer $DEEPMEM_API_KEY" -H "Content-Type: application/json" \
-d '{"messages":[{"role":"user","content":"I am Pat, I live in Lisbon."}],"user_id":"pat","infer":false}'
curl https://deepmem.dev/v1/memories/search \
-H "Authorization: Bearer $DEEPMEM_API_KEY" -H "Content-Type: application/json" \
-d '{"query":"Where does Pat live?","user_id":"pat"}'2. Docker(一条命令)
cp .env.example .env # add an LLM key
docker compose up --build # DeepMem (HTTP :8000 + MCP :8001) + Qdrant sidecar
curl http://localhost:8000/health或拉取已发布的镜像:
docker pull langdeepmem/deepmem:latest
docker run -p 8000:8000 -p 8001:8001 -e DEEPSEEK_API_KEY=sk-... langdeepmem/deepmem:latest镜像暴露 :8000(HTTP) 和 :8001(MCP)。Dockerfile 和 docker-compose.yml 涵盖了 GPU 变体(CUDA torch + BGE_DEVICE=cuda)以及 BGE-M3 模型下载选项(HF 镜像、代理或本地挂载)。
3. 从源码运行
git clone https://github.com/deepmemteam/deepmem.git && cd deepmem
pip install -r requirements.txt
cp .env.example .env # add an LLM key + embedder config
python server/start.py # HTTP :8000 + MCP :8001三行代码完成写入和搜索:
import httpx
httpx.post("http://localhost:8000/v1/memories",
json={"messages":[{"role":"user","content":"I'm Pat, I live in Lisbon."}],
"user_id":"pat"})
print(httpx.post("http://localhost:8000/v1/memories/search",
json={"query":"Where does Pat live?","user_id":"pat"}).json()["results"])
user_id是可选的(默认为"default");发送不同的user_id可隔离终端用户。infer: false立即存储原始文本(便于测试);默认的infer: true会排队等待 LLM 事实提取。
功能亮点
通过配置而非代码实现多提供商。 两层都通过环境变量切换:
层 | 选项 | 选择器 |
LLM(事实提取) | OpenAI · Anthropic(原生 SDK)· 任何兼容 OpenAI 的(DeepSeek / vLLM / Ollama / Groq / LM Studio) |
|
嵌入模型 | BGE-M3(本地,GPU/CPU)· Google Gemini · 任何兼容 OpenAI 的 |
|
BGE_DEVICE=auto|cpu|cuda 在可用时选择 GPU,否则使用 CPU(在显存较小的显卡上强制使用 cpu 以避免多进程争用)。BYOK 可按请求覆盖 LLM。
混合检索。 向量相似度 + BM25 关键词 + 实体加权 + 时间衰减,融合为一个分数。过度获取、重新排序、返回结果。
异步批量蒸馏。 写入在静默窗口后排队,并批量提取——比逐条消息提取减少约 80% 的 LLM 调用。
语义缓存。 重复的添加/搜索会命中相似度门控缓存,无需重新嵌入或重新查询 Qdrant 即可返回缓存的事实。
存储偏好,而非代码。 extraction_filter 在 LLM 提取前剥离大型围栏代码块,因此存储中填充的是持久事实,而不是粘贴的实现代码。
MCP 服务器。 deepmem_write / deepmem_search / deepmem_delete 工具,适用于 Claude Desktop、Cursor 和任何 MCP 客户端。
GDPR。 带保留窗口的软删除、硬删除 reset、日志中的 SHA-256 ID 掩码、用于可移植性的导出/导入。
API
方法 | 路径 | 描述 |
POST |
| 写入消息;LLM 提取事实( |
POST |
| 语义搜索(向量 + BM25 + 实体 + 时间衰减) |
GET |
| 列出某个 |
GET |
| 按 ID 获取单条 |
PUT |
| 更新单条记忆的文本 |
DELETE |
| 软删除单条 |
DELETE |
| 软删除某个 |
GET |
| ADD/UPDATE/DELETE 审计日志 |
POST |
| 硬删除全部 + 历史记录(需要 |
GET |
| 可移植的 JSON 导出 / 导入 |
GET |
| 存活 / 就绪探针 |
agent_id / run_id 可选地限定写入/读取范围(镜像 Mem0 的三级隔离:用户 -> 智能体 -> 运行)。交互式文档位于 /docs。
MCP 集成
云端暴露了一个远程 MCP 端点(流式 HTTP):
URL: https://deepmem.dev/mcp
Auth: Authorization: Bearer dm_live_... (your deepmem.dev API key)
Tools: deepmem_write / deepmem_search适用于 Claude Code、Claude Desktop、Cursor 以及任何兼容 MCP 的客户端。
Claude Code - 一条命令:
claude mcp add --transport http deepmem https://deepmem.dev/mcp \
--header "Authorization: Bearer dm_live_..."或者安装插件(附带 /deepmem:setup 命令,用于引导 API 密钥配置):
/plugin marketplace add deepmemteam/deepmem-claude-plugin
/plugin install deepmem@deepmemCursor → 设置 → MCP → 添加新的 MCP 服务器,或编辑 ~/.cursor/mcp.json(全局)/ .cursor/mcp.json(按项目)。Cursor 会解析 url 和 headers 中的 ${env:NAME} 变量,因此密钥可以放在环境变量中,而不必放在配置文件里:
{
"mcpServers": {
"deepmem": {
"url": "https://deepmem.dev/mcp",
"headers": { "Authorization": "Bearer ${env:DEEPMEM_API_KEY}" }
}
}
}(在 shell 中导出 DEEPMEM_API_KEY=dm_live_...,或者如果你愿意,也可以直接粘贴密钥本身)。社区 MCP 列表支持一键"添加到 Cursor",位于 cursor.directory;官方插件则在 Cursor Marketplace 中发布。
DeepSeek Harness (dsh) - 一个 overlay 文件,无需 dsh 插件(dsh 通过其通用 dsh-mcp-client 桥接器连接任何 MCP 服务器):
export DEEPMEM_API_KEY=dm_live_...
dsh web --patch "$PWD/examples/dsh/deepmem.cordis.yml"详见 examples/dsh,了解详情和自托管变体。
自托管(stdio,内置服务器,开放模式下无需密钥):
{
"mcpServers": {
"deepmem": {
"command": "python",
"args": ["server/mcp_server.py"],
"env": { "DEEPMEMORY_BASE_URL": "http://localhost:8000" }
}
}
}此仓库附带一个为自托管服务器预配置的 .cursor/mcp.json - 在 Cursor 中打开仓库,然后在 设置 → MCP 下启用。
架构
client (HTTP / MCP)
-> FastAPI (:8000)
-> rate-limit middleware (per-IP token bucket on add/search)
-> SemanticCache.check (return cached facts on similarity hit)
-> AsyncBatchDistiller.enqueue (POST /v1/memories, infer=true)
↳ silence-window or max_batch triggers on_batch_ready
↳ VectorStore.process_batch (LLM extraction -> Qdrant upsert)
-> VectorStore.search (vector + BM25 + entity + time-decay)
-> LLM: OpenAI / Anthropic / OpenAI-compatible (fact extraction)
-> BGE-M3 / Gemini / OpenAI-compatible (embeddings)
-> Qdrant (vectors) + SQLite (audit history)
-> MCP server (:8001) deepmem_write / deepmem_search / deepmem_delete单个 Qdrant 集合(memories),通过 user_id payload 进行硬过滤。TenantValidator 对 user_id 进行 NFC 规范化,并强制使用 [A-Za-z0-9._:-]{1,256} 字符集 - 永远不要信任原始请求值。
配置
配置从环境变量(.env,自动加载)> config.json > 默认值 一次性加载。关键变量:
变量 | 必需 | 描述 |
| 一个 LLM 密钥 | 用于事实提取的 LLM |
| 否 |
|
| 否 |
|
| 否 | 本地 BGE-M3 目录或 HF 模型 ID(默认 |
| 否 |
|
| 否 | 远程 Qdrant;本地文件存储时省略 |
| 是 | 逗号分隔的允许来源(生产环境不允许 |
| 否 | 每分钟限制(默认 30 / 60) |
后端根据环境变量自动切换 - 无需修改代码:
设置
QDRANT_URL-> 远程 Qdrant;未设置 ->./data/qdrant下的本地文件 Qdrant。除非设置
DEEPMEMORY_DEBUG=1,否则启动时会拒绝CORS_ORIGINS=*。
生产环境(systemd)
systemctl restart deepmem.service # scripts/start.sh -> uvicorn :8000
journalctl -u deepmem -f对于 HTTPS,将 Caddy 或 Nginx 放在前面;scripts/start.sh 在 systemd 或任何进程管理器下运行。
基准测试
两个可复现的脚本位于 /benchmarks:
云端对比云端 - DeepMem 云端对比 Mem0 云端。在 deepmem.dev + mem0.ai 注册密钥,然后运行
python benchmarks/benchmark_cloud.py。自托管 - 你自己的 DeepMem,你自己的硬件(无需密钥,无需外部服务):
python benchmarks/run_benchmark.py。
两个脚本都附带自包含的工作负载,并报告 P50/P95/P99 + 吞吐量。本 README 顶部的数字由这些脚本生成 - 重新运行它们,查看你自己的百分位数。
常见问题
我需要云端吗? 不需要。开源服务器本身功能完整。云端(deepmem.dev)是零运维选项 - API 相同。
可以离线工作吗? 检索和原始存储(infer=false)无需网络即可工作。LLM 事实提取(infer=true)需要 LLM 密钥 - 或者运行本地 OpenAI 兼容模型(Ollama / vLLM / LM Studio),并将 LLM_BASE_URL 指向它。
我的数据在哪里? 在你的 Qdrant(本地文件或服务器)+ SQLite 审计日志中。除了你配置的 LLM/嵌入调用外,没有任何数据离开你的机器。
支持多租户吗? 支持 - 单个 Qdrant 集合通过 user_id 硬过滤。agent_id / run_id 增加代理和会话范围。
可以用于生产环境吗? 已在 systemd 下与远程 Qdrant 一起用于生产。本地文件 Qdrant 适合开发/单工作进程;多工作进程或高吞吐量请使用 Qdrant 服务器。
开发
pip install -r requirements.txt
DEEPMEMORY_DEBUG=1 python -m uvicorn server.main:app --reload --host 0.0.0.0 --port 8000
pytest tests/ -x -v许可证
MIT。
This server cannot be deployed
Maintenance
Related MCP Connectors
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
Persistent, portable memory for AI assistants — your private memory graph, from any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenancePersistent memory for AI agents. Store and semantically search memories via REST API or MCP. Free tier available.MIT
- AlicenseNot gradedqualityDmaintenanceSelf-hosted semantic memory for AI agents. Save worklogs, decisions, and notes via MCP, then recall them across sessions by meaning rather than keyword. Backed by Postgres + pgvector with local embeddings (multilingual-e5-base).1MIT
- AlicenseNot gradedqualityDmaintenanceGives AI agents persistent memory with semantic search, automatic extraction, and memory decay, accessible via MCP protocol.10 npmMIT
- FlicenseNot gradedqualityBmaintenanceA persistent memory server for AI agents using MCP protocol, enabling semantic storage and retrieval of dialogues, documents, and agent states.-