Skip to main content
Glama
deepmemteam

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.dev
pip 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=Trueresults=[],提取的事实会在几秒后落地。(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)Dockerfiledocker-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)

LLM_PROVIDER + LLM_API_KEY / ANTHROPIC_API_KEY / DEEPSEEK_API_KEY

嵌入模型

BGE-M3(本地,GPU/CPU)· Google Gemini · 任何兼容 OpenAI 的

EMBEDDING_PROVIDER + BGE_M3_PATH / GOOGLE_API_KEY / OPENAI_API_KEY

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

/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}/history

ADD/UPDATE/DELETE 审计日志

POST

/v1/reset

硬删除全部 + 历史记录(需要 confirm_user_id

GET

/v1/export · POST /v1/import

可移植的 JSON 导出 / 导入

GET

/health · /ready

存活 / 就绪探针

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@deepmem

Cursor → 设置 → MCP → 添加新的 MCP 服务器,或编辑 ~/.cursor/mcp.json(全局)/ .cursor/mcp.json(按项目)。Cursor 会解析 urlheaders 中的 ${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 进行硬过滤。TenantValidatoruser_id 进行 NFC 规范化,并强制使用 [A-Za-z0-9._:-]{1,256} 字符集 - 永远不要信任原始请求值。

配置

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

变量

必需

描述

DEEPSEEK_API_KEY / LLM_API_KEY / ANTHROPIC_API_KEY

一个 LLM 密钥

用于事实提取的 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 增加代理和会话范围。

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

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP 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.
    2
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Self-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).
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Gives AI agents persistent memory with semantic search, automatic extraction, and memory decay, accessible via MCP protocol.
    12
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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