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: Structured-sh
定价
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 installed
Maintenance
Related MCP Servers
- AlicenseNot gradedqualityCmaintenancePersistent memory for AI agents. Store and semantically search memories via REST API or MCP. Free tier available.MIT

Structured-shofficial
AlicenseNot gradedqualityDmaintenanceMCP server providing managed persistent memory for AI agents. Read and write structured state across sessions, tools, and restarts at 1000+ requests per second, with no infrastructure to self-host or operate.2Apache 2.0- 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.12MIT
Related MCP Connectors
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Persistent memory for AI agents — verbatim conversations, searchable by meaning.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/deepmemteam/deepmem'
If you have feedback or need assistance with the MCP directory API, please join our Discord server