DeepMem について
DeepMem は、Mem0 互換 API を備えた AI エージェント向けの永続メモリレイヤーで、事実を保存しセマンティックに呼び出します。オープンモードでセルフホストするか、マネージドクラウドとして利用でき、データとコストを管理したい開発者を対象としています。
主な機能
- 01Mem0 互換の MemoryClient インターフェース
- 02ベクトル・BM25・時間減衰を組み合わせたハイブリッド検索
- 03バッチ処理による事実抽出と LLM 呼び出しの削減
- 04セマンティックキャッシュと user_id 単位の分離
- 05GDPR に関連する削除・リセット・エクスポート
- 06書き込みと検索のツールを提供する内蔵 MCP サーバー
活用シーン
- 01エージェント向けにユーザーの好みやプロジェクト背景を保存
- 02インポート行の変更のみによる Mem0 からの移行
- 03自社インフラでのメモリサービスのセルフホスト
MCP 対応
DeepMem は deepmem_write、deepmem_search、deepmem_delete ツールを公開する MCP サーバーを内蔵しており、Claude Desktop や Cursor などのクライアントから直接メモリを読み書きできます。クラウド版もリモート MCP エンドポイントを提供しています。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://deepmem.dev/mcpclaude mcp add --transport http deepmemteam-deepmem https://deepmem.dev/mcp{"mcpServers":{"deepmemteam-deepmem":{"type":"http","url":"https://deepmem.dev/mcp"}}}Cursor で開く{"servers":{"deepmemteam-deepmem":{"type":"http","url":"https://deepmem.dev/mcp"}}}VS Code で開く{"mcpServers":{"deepmemteam-deepmem":{"type":"http","url":"https://deepmem.dev/mcp"}}}{"mcpServers":{"deepmemteam-deepmem":{"serverUrl":"https://deepmem.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://deepmem.dev/mcp認証が必要ツール
2| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| infer | boolean | いいえ | |
| run_id | any | いいえ | |
| api_key | string | いいえ | |
| user_id | string | いいえ | |
| agent_id | any | いいえ | |
| messages | array | はい |
詳細
DeepMem
すぐに導入できる AI メモリレイヤー。応答速度は 2 倍、コストは 10 分の 1。
Mem0 API と完全互換。5 分で移行できます。インポート行を 1 行変更するだけです。
セルフホスト可能。認証も支払いも不要で、ロックインもありません。または、deepmem.dev のマネージドクラウドをご利用ください。
Mem0 から 1 行で移行できます - 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 を配置し、LLM による事実抽出、ハイブリッド検索(ベクトル + BM25 + エンティティブースト + 時間減衰)、セマンティックキャッシュ、非同期バッチ蒸留、GDPR 制御、組み込みの MCP サーバーを備えています。オープンモードで動作するため、API キーもユーザー登録も不要です。独自のエージェント向けに数分でデプロイできます。マルチテナントの分離は、リクエスト本文の user_id によって行われます。
セルフホストを避けたい場合は? DeepMem Cloud は、このエンジンそのものをマネージド版として提供します。deepmem.dev でご利用いただけます。API は同じで、インフラ管理は不要です。登録してキー(
dm_live_...)を取得し、ベース URL をhttps://deepmem.devに設定すれば完了です。クラウド版とオープンソースサーバーは同じ Mem0 互換 API を使用するため、クライアントコードは同一です。
Mem0 からの移行
すでに Mem0 をお使いですか? 1 行で 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ごとに実行されます。
料金
DeepMem Cloud は、有料プランのすべての段階で Mem0 より 10 倍安価です。プランの構成は同じで、価格は 10 分の 1 です。
| プラン | DeepMem | Mem0 クラウド |
|---|---|---|
| ホビー | 無料 | 無料 |
| スターター | $1.9/mo | $19/mo |
| グロース | $7.9/mo | $79/mo |
| プロフェッショナル | $24.9/mo | $249/mo |
セルフホストすれば $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 ³ |
¹ GTX 1070 GPU(2016 年世代)での BGE-M3、ローカルファイルの Qdrant、
infer=False、 100 オペレーション、並行数 1。² ローカルファイルの Qdrant I/O が大部分を占めています。Qdrant サーバーを使えば大幅に短縮できます。³ Mem0 には生ストアモードがありません。addは常に LLM による抽出を実行するため、この行は同条件での比較ではありません。
- 本来のレイテンシーがわかるのはセルフホストです。インターネットの RTT がなく、使うのはご自身の 埋め込みモデルと Qdrant です。古いコンシューマー向け GPU でも、検索 p50 は 73 ms です。
- 検索 p50 では DeepMem クラウドが Mem0 クラウドを上回ります(643 ms 対 653 ms)。また、 検索ごとに約 2.3 倍多くの候補を返します(40 件のクエリで 195 件対 84 件のヒット)。
- クラウドのレイテンシーは RTT に左右されます。両方のクラウド列は中国本土からプロキシ経由で測定しており、
実行ごとのばらつきは約 ±10% です。ご自身の数値を確認するには、RTT の低い場所から
/benchmarksを実行してください。
DeepMem を選ぶ理由
エージェントのフレームワークでは、永続的で取得可能なメモリが必要だと繰り返し認識されています。ホスト型の選択肢は呼び出しごとに課金し、データを他社のクラウドに送ります。DeepMem はセルフホスト可能な代替手段です。すぐに導入できる、Mem0 と同じ形状の API を備えていますが、ご自身のマシンで、ご自身の埋め込みモデルと LLM キー、Qdrant を使って動作し、コードもここで確認できます。
DeepMem はほかの Mem0 代替製品とどう違いますか? ほとんどはホスト型のみであるか、他社のベクトルデータベース上にメモリ機能を追加しています。DeepMem は 3 つの特長を兼ね備えています。セルフホスト可能(データはご自身のマシンに保存され、ご自身の 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 がメモリを直接読み書きできます。
クイックスタート
実行方法は 3 通りあります。どれも同じ 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(1 コマンド)
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
次の3行で書き込みと検索を行います。
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 |
| Embeddings | BGE-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 を選択します(複数プロセスの競合を避けるため、VRAM の少ないカードでは cpu を指定してください)。BYOK を指定すると、リクエストごとに LLM が上書きされます。
ハイブリッド検索。 ベクトル類似度、BM25 キーワード、エンティティブースト、時間減衰を統合スコアにまとめます。候補を多めに取得して再ランク付けし、結果を返します。
非同期バッチ蒸留。 書き込みは無処理期間の後にキューへ追加され、まとめて抽出されます。メッセージごとに抽出する場合と比べて、LLM の呼び出しを約80%削減します。
セマンティックキャッシュ。 繰り返しの追加や検索では、類似度ゲート付きのキャッシュを使用し、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 を指定して1件を取得します。 |
| PUT | /v1/memories/{id} | 1件のメモリーのテキストを更新します。 |
| DELETE | /v1/memories/{id} | 1件を論理削除します。 |
| DELETE | /v1/memories | user_id に属するすべての項目を論理削除します(GDPR)。 |
| GET | /v1/memories/{id}/history | 追加/更新/削除の監査ログ |
| POST | /v1/reset | すべての項目と履歴を完全削除します(confirm_user_id が必要です)。 |
| GET | /v1/export · POST /v1/import | 移行可能な JSON のエクスポート/インポート |
| GET | /health · /ready | 稼働状態/準備状態のプローブ |
agent_id / run_id を指定すると、書き込み/読み取りの範囲を絞り込めます(Mem0 の3段階の分離を踏襲しています:ユーザー -> エージェント -> 実行)。インタラクティブなドキュメントは /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 - 1 つのコマンドで設定できます。
claude mcp add --transport http deepmem https://deepmem.dev/mcp \
--header "Authorization: Bearer dm_live_..."
または、プラグインをインストールします(API キーの設定を案内する /deepmem:setup コマンドが含まれています)。
/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}" }
}
}
}
(シェルで DEEPMEM_API_KEY=dm_live_... をエクスポートするか、必要に応じてキーを直接貼り付けてください)。ワンクリックで「Add to Cursor」を実行できるコミュニティの MCP リストは cursor.directory にあり、公式プラグインは Cursor Marketplace で提供されています。
DeepSeek Harness(dsh) - オーバーレイファイル 1 つで設定できます。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)は 1 つだけで、user_id ペイロードによって厳密にフィルタリングされます。TenantValidator は NFC 正規化を行い、user_id が [A-Za-z0-9._:-]{1,256} の文字セットに準拠することを強制します。リクエストの生の値を決して信頼しないでください。
設定
設定は環境変数(.env、自動読み込み)> config.json > デフォルトの優先順位で一度だけ読み込まれます。
主な変数:
| 変数 | 必須 | 説明 |
|---|---|---|
DEEPSEEK_API_KEY / LLM_API_KEY / ANTHROPIC_API_KEY | LLM キーを 1 つ | 事実抽出用の 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 | いいえ | 1 分あたりの制限(デフォルトは 30 / 60) |
バックエンドは環境変数に応じて自動的に切り替わるため、コードの変更は不要です。
QDRANT_URLが設定されている場合はリモート Qdrant、設定されていない場合は./data/qdrant配下のローカルファイル Qdrant を使用します。- 起動時に
CORS_ORIGINS=*が設定されていると、DEEPMEMORY_DEBUG=1でない限り拒否されます。
本番環境(systemd)
systemctl restart deepmem.service # scripts/start.sh -> uvicorn :8000
journalctl -u deepmem -f
HTTPS を使用するには、Caddy または Nginx を前段に配置してください。scripts/start.sh は systemd または任意のプロセスマネージャーで実行できます。
ベンチマーク
再現可能なスクリプトが /benchmarks に 2 つあります。
- クラウド同士の比較 - DeepMem クラウドと Mem0 クラウドを比較します。deepmem.dev と mem0.ai でキーを登録し、
python benchmarks/benchmark_cloud.pyを実行してください。 - セルフホスト版 - お使いの DeepMem とハードウェアで実行します(キー不要、外部サービス不要):
python benchmarks/run_benchmark.py。
どちらのスクリプトにも自己完結型のワークロードが含まれており、P50/P95/P99 とスループットをレポートします。この README 冒頭の数値はこれらのスクリプトで取得したものです。再実行して、ご自身のパーセンタイルを確認してください。
FAQ
クラウドは必要ですか? いいえ。オープンソースのサーバーは単独で完全に機能します。クラウド(deepmem.dev)は運用不要の選択肢で、API は同じです。
オフラインで動作しますか? 検索と raw-store(infer=false)はネットワーク接続なしで動作します。LLM による事実抽出(infer=true)には LLM キーが必要です。または、ローカルの OpenAI 互換モデル(Ollama / vLLM / LM Studio)を実行し、LLM_BASE_URL をそのモデルに設定してください。
データはどこに保存されますか? お使いの Qdrant(ローカルファイルまたはサーバー)と SQLite の監査ログに保存されます。設定した LLM/埋め込みの呼び出し以外で、データがマシンの外部に送信されることはありません。
マルチテナントに対応していますか? はい。単一の Qdrant コレクションを user_id で厳密にフィルタリングします。agent_id / run_id を追加すると、エージェントとセッションのスコープを設定できます。
本番環境で使用できますか? リモート Qdrant を使用し、systemd のもとで本番環境で利用されています。ローカルファイルの 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。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。