mcpField
D
DeepMem

DeepMem

远程服务
deepmem.dev记忆与知识11410 周前更新

关于 DeepMem

DeepMem 是与 Mem0 API 兼容的持久化记忆层,可为 AI Agent 存储事实并按语义召回。它可自托管且无需认证,也提供托管云版本,适合希望控制数据与成本的开发者。

主要功能

  1. 01兼容 Mem0 的 MemoryClient 接口
  2. 02混合检索:向量、BM25、实体提升与时间衰减
  3. 03异步批量提取事实,减少 LLM 调用
  4. 04语义缓存与按 user_id 隔离
  5. 05支持 GDPR 相关的删除与导出
  6. 06内置 MCP 服务,提供写入与检索工具

适用场景

  1. 01为 Agent 保存用户偏好与项目背景
  2. 02从 Mem0 迁移且仅修改导入语句
  3. 03在本地或自有基础设施中自托管记忆服务

MCP 相关

DeepMem 内置 MCP 服务,暴露 deepmem_write、deepmem_search 和 deepmem_delete 工具,Claude Desktop、Cursor 等客户端可直接读写记忆。托管云也提供远程 MCP 端点。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://deepmem.dev/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://deepmem.dev/mcp需要授权

工具

2
参数类型必填说明
inferboolean否
run_idany否
api_keystring否
user_idstring否
agent_idany否
messagesarray是

详细介绍

DeepMem

即插即用的 AI 记忆层,响应速度提升 2 倍,成本降低 10 倍。
完全兼容 Mem0 API。5 分钟即可迁移,只需更改一行导入语句。

可自托管。无需身份验证、无需付费、没有供应商锁定。也可以使用托管云服务:deepmem.dev。

Docker 镜像 DeepMem 云服务 许可证:MIT

云服务 · 自托管 · 基准测试 · 复现测试

DeepMem 快速入门演示


只需一行即可从 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.dev
pip install deepmem-client

将对话转化为可搜索的长期记忆:在 Qdrant 向量存储前端提供 FastAPI HTTP API,并支持大模型事实提取、混合检索(向量 + BM25 + 实体加权 + 时间衰减)、语义缓存、异步批量蒸馏、GDPR 控制,以及内置 MCP 服务。它以开放模式运行——无需 API 密钥,无需用户注册——因此几分钟内即可为你自己的 Agent 部署。多租户隔离由请求正文中的 user_id 控制。

不想自托管? DeepMem Cloud 是这一引擎的托管版本,位于 deepmem.dev——API 相同,无需管理基础设施。注册并获取密钥(dm_live_...),将基础 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"})
行为说明
  • DeepMem 云服务中的 add(infer=True)(默认值)是异步的——它会返回 pending=True 和 results=[],提取出的事实会在几秒后写入。(Mem0 云服务的 add 也是异步的——会返回 PENDING。)传入 infer=False 可同步存储原始文本,并立即进行搜索。
  • 没有图关系——DeepMem 使用混合向量检索(向量 + BM25 + 时间衰减),因此 relations 始终为 []。不会复现 Mem0 的图功能。
  • reset 的行为不同——Mem0 的 reset 会重置整个账户;DeepMem 的则针对单个 user_id,并带有确认保护。

定价

DeepMem Cloud 每个付费档位的价格都比 Mem0 低 10 倍——套餐结构相同,价格仅为十分之一。

档位DeepMemMem0 云服务
爱好者免费免费
入门版$1.9/mo$19/mo
成长版$7.9/mo$79/mo
专业版$24.9/mo$249/mo

选择自托管,费用就是 $0——你只需支付自己的大模型/嵌入服务提供商费用(这也是 Mem0 在套餐价格之外收取的大模型费用),无需支付记忆服务加价。批量蒸馏还能减少约 80% 的大模型调用,因此你的服务提供商账单也会低于逐条消息提取的方案。

套餐和限额:deepmem.dev · mem0.ai。

基准测试

不挑选亮眼数据。脚本和工作负载都在 /benchmarks 中,可自行运行。以下是我们的测量结果和生成这些结果的确切配置:

指标DeepMem 可自托管 ¹DeepMem 云端Mem0 云端
搜索 p5073 ms643 ms653 ms
搜索 p9586 ms811 ms710 ms
搜索命中数(40 次查询)-19584
添加 p50(原始存储)899 ms ²792 ms695 ms ³

¹ 在 GTX 1070 GPU(2016 年左右)上运行 BGE-M3,使用本地文件 Qdrant、infer=False、100 次操作、并发数为 1。² 耗时主要来自本地文件 Qdrant 的 I/O;使用 Qdrant 服务可大幅降低耗时。³ Mem0 没有原始存储模式;add 始终会运行 LLM 抽取,因此这一行并非同类对比。

  • 自托管时才能体现内在延迟——没有互联网往返时延,使用你自己的嵌入模型和 Qdrant。在旧款消费级 GPU 上,搜索 p50 为 73 ms。
  • DeepMem 云端的搜索 p50 优于 Mem0 云端(643 ms 对比 653 ms),且每次搜索返回的候选项约多 2.3 倍(40 次查询中命中数为 195 对比 84)。
  • 云端延迟主要由往返时延决定——两个云端数据都是通过代理从中国大陆测得的;不同运行之间的抖动约为 ±10%。如需获取自己的数据,可在往返时延较低的位置运行 /benchmarks。

为什么选择 DeepMem

Agent 框架不断重新发现它们需要持久、可检索的记忆。托管服务按调用计费,并将你的数据发送到别人的云端。DeepMem 是可自托管的替代方案:提供可直接接入的同款 Mem0 风格 API,但运行在你的设备上,使用你的嵌入模型、LLM 密钥和 Qdrant;代码也在这里,可供查验。

DeepMem 与其他 Mem0 替代方案相比如何? 大多数方案只能托管使用,或是在别人的向量数据库之上构建记忆功能。DeepMem 将三者合而为一:可自托管(数据留在你的设备上——除你自己的 LLM 密钥外,费用为 0 美元)、原生支持 MCP(Claude Desktop / Cursor 可直接以工具形式读取和写入记忆),并且完全开源——托管云端运行的也是完全相同的引擎,因此云端和自托管共用同一个 API,而非两个产品。

没有 DeepMem使用 DeepMem
每次会话都要重新说明你是谁以及正在做什么Agent 会自动回忆你的身份、项目和偏好
会话之间丢失调试和研究上下文可回忆过去的根本原因、走过的弯路和发现,避免重复劳动
每次会话都要手动重述偏好偏好会在不同会话、Agent 和项目之间持久保留
使用按调用计费并保管你数据的托管记忆服务在自己的基础设施上自托管,或使用云端——由你选择,API 相同
它是什么(如实说明)
  • 混合检索,而非知识图谱。 搜索融合了向量相似度、BM25 关键词匹配、实体加权和时间衰减评分。它没有时序图层;如果你需要这一功能,可以看看 Zep。
  • 存储偏好,而非代码倾倒内容。 LLM 抽取前会剥离大型围栏代码块,因此存储内容是持久的用户/项目事实,而不是粘贴的实现代码。
  • 自带密钥,支持多家提供商。 使用你自己的 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(事实提取)OpenAI · Anthropic(原生 SDK)· 任意兼容 OpenAI 的服务(DeepSeek / vLLM / Ollama / Groq / LM Studio)LLM_PROVIDER + LLM_API_KEY / ANTHROPIC_API_KEY / DEEPSEEK_API_KEY
EmbeddingsBGE-M3(本地、GPU/CPU)· Google Gemini · 任意兼容 OpenAI 的服务EMBEDDING_PROVIDER + BGE_M3_PATH / GOOGLE_API_KEY / OPENAI_API_KEY

BGE_DEVICE=auto|cpu|cuda 会在 GPU 可用时选用 GPU,否则使用 CPU(小显存显卡上请强制设为 cpu,以避免多进程争用)。BYOK 可按请求覆盖 LLM。

混合检索。 将向量相似度、BM25 关键词、实体加权和时间衰减融合为一个分数。先过量获取,再重新排序,最后返回结果。

异步批量蒸馏。 写入会在静默窗口后进入队列,并以批次形式提取事实,相较于逐条消息提取,可减少约 80% 的 LLM 调用。

语义缓存。 重复的添加和搜索请求会命中相似度门控缓存,并直接返回缓存的事实,无需重新生成嵌入或再次查询 Qdrant。

存储偏好,而非代码。 extraction_filter 会在 LLM 提取前移除较大的围栏代码块,因此存储中会积累持久事实,而不是粘贴的实现代码。

MCP 服务。 为 Claude Desktop、Cursor 和任意 MCP 客户端提供 deepmem_write / deepmem_search / deepmem_delete 工具。

GDPR。 支持带保留期限的软删除、硬删除 reset、日志中的 SHA-256 ID 脱敏,以及用于迁移的导出/导入。

API

方法路径描述
POST/v1/memories写入消息;由 LLM 提取事实(infer=false 时存储原始内容)
POST/v1/memories/search语义搜索(向量 + BM25 + 实体 + 时间衰减)
GET/v1/memories列出指定 user_id 的所有记录(分页)
GET/v1/memories/{id}按 ID 获取单条记录
PUT/v1/memories/{id}更新单条记忆的文本
DELETE/v1/memories/{id}软删除单条记录
DELETE/v1/memories软删除指定 user_id 的所有记录(GDPR)
GET/v1/memories/{id}/historyADD/UPDATE/DELETE 审计日志
POST/v1/reset硬删除所有记录及历史(需要 confirm_user_id)
GET/v1/export · POST /v1/import可移植 JSON 导出 / 导入
GET/health · /ready存活 / 就绪探针

agent_id / run_id 可用于限定写入/读取范围(与 Mem0 的三级隔离方式一致:user -> agent -> run)。交互式文档位于 /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@deepmem

Cursor → Settings → MCP → Add new MCP server,或编辑 ~/.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 中打开此仓库,并在 Settings → 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 负载进行严格筛选。 TenantValidator 会对 user_id 执行 NFC 规范化,并强制其符合 [A-Za-z0-9._:-]{1,256} 字符集——切勿信任原始请求值。

配置

配置只从环境变量(.env,自动加载)> config.json > 默认值中加载一次。 关键变量:

变量必需描述
DEEPSEEK_API_KEY / LLM_API_KEY / ANTHROPIC_API_KEY一个 LLM 密钥用于事实提取的大模型
LLM_PROVIDER否auto / openai / anthropic / openai_compatible(默认 auto)
EMBEDDING_PROVIDER否bge-m3 / google / openai(默认 bge-m3)
BGE_M3_PATH否本地 BGE-M3 目录或 HF 模型 ID(默认 BAAI/bge-m3)
BGE_DEVICE否auto / cpu / cuda(默认 auto)
QDRANT_URL / QDRANT_API_KEY否远程 Qdrant;省略则使用本地文件存储
CORS_ORIGINS是以逗号分隔的允许来源(生产环境中不能使用 *)
RATE_LIMIT_ADD / RATE_LIMIT_SEARCH否每分钟限制(默认 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 可添加 Agent 和会话范围。

可以用于生产环境吗? 已通过 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.

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。