AI エージェントに長期記憶を実装:Mem0 と Easysearch の統合ガイド

AI エージェントと対話中に、以前説明したバグの根本原因やプロジェクト固有のルールを毎回繰り返し説明しなければならない経験はないだろうか。これは、現在の多くのエージェントがコンテキストウィンドウ内でのみ「記憶」を持ち、セッション終了と共にその情報を失うためだ。

本稿では、Mem0Easysearch を組み合わせて、ローカル環境で動作するセッション横断型の長期記憶機能を AI エージェントに実装する方法を紹介する。この仕組みにより、過去の知見をベクトル化して保存・検索でき、LLM へのプロンプトに自動的に関連情報を注入することが可能になる。

アーキテクチャ概要

ユーザー ↔ AI エージェント(Trae / Cursor / VS Code など)
              ↓ MCP プロトコル
    Mem0 OpenMemory MCP サーバー
              ↓ HTTPS
         Easysearch クラスター
         ┌──────────────────┐
         │ 記憶のベクトルインデックス │
         │ kNN による意味検索     │
         └──────────────────┘
  • 記憶の保存:エージェントが重要な情報を検出(例:バグの原因、設計決定事項)すると、add_memories を呼び出す。MCP サーバーがテキストを埋め込みモデルでベクトル化し、Easysearch に格納。
  • 記憶の検索:新タスク開始時に search_memory を実行。クエリをベクトル化し、Easysearch で類似度に基づく kNN 検索を行い、結果をプロンプトに追加。

全コンポーネントはローカルで動作可能。LLM や埋め込みモデルは OpenAI 互換 API(例:阿里云百煉、DeepSeek、Ollama)と接続できる。

4 ステップで環境構築

1. Easysearch クラスターの準備

既存クラスターがない場合は、Docker で単一ノードを即時起動:

# 管理者パスワード生成
echo "EASYSEARCH_INITIAL_ADMIN_PASSWORD=$(openssl rand -hex 10)" | tee .env

# コンテナ起動
docker run -d --name easysearch \
   --ulimit memlock=-1:-1 \
   --env-file ./.env -p 9200:9200 \
   -v easysearch-data:/app/easysearch/data \
   -v easysearch-config:/app/easysearch/config \
   -v easysearch-logs:/app/easysearch/logs \
   infinilabs/easysearch:latest

起動確認:

curl -ku 'admin:<生成されたパスワード>' https://127.0.0.1:9200
# 応答に "You Know, For Easy Search!" が含まれていれば成功

2. Mem0 の Easysearch 対応ブランチ取得

公式リポジトリにはまだマージされていないため、INFINI Labs がメンテナンスするフォークを使用:

git clone https://github.com/infinilabs/mem0.git
cd mem0
git checkout feat/easysearch

3. MCP サーバーの設定

openmemory/api/.env を編集:

USER=alice

LLM_PROVIDER=openai
LLM_MODEL=deepseek-r1
LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1

EMBEDDER_PROVIDER=openai
EMBEDDER_MODEL=text-embedding-v4
EMBEDDER_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
EASYSEARCH_EMBEDDING_DIMS=1024

OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx

EASYSEARCH_URL=https://127.0.0.1:9200
EASYSEARCH_USER=admin
EASYSEARCH_PASSWORD=xxxxxxxxxxxxxxxx

注意点

  • EASYSEARCH_EMBEDDING_DIMS は使用する埋め込みモデルの出力次元と厳密に一致させる必要がある(例:text-embedding-v4 → 1024、text-embedding-3-small → 1536)。
  • Easysearch はデフォルトで TLS を有効化しているため、URL は https:// で指定。
  • 開発時は証明書検証をスキップするが、本番環境では信頼された CA 証明書を使用することを推奨。

4. MCP サーバーの起動

cd openmemory/api
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pip uninstall -y mem0ai
pip install -e "../../[extras]"
uvicorn main:app --host 0.0.0.0 --port 8765

以下のようなログが出力されれば起動成功:

INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8765

AI エージェントとの連携

MCP サーバーエンドポイントの登録

Cursor や VS Code Copilot などのエージェントツールに、以下の形式の MCP サーバー URL を追加:

http://localhost:8765/mcp/<client_id>/http/<user_name>
  • <client_id>:ツール識別子(例:cursor、vscode)
  • <user_name>.envUSER と一致させる

強制的な記憶操作プロトコルの導入

エージェントが自動的に記憶を活用するよう、以下のグローバルスキルを設定:

name: persistent_memory_protocol
description: "必須プロトコル:すべてのタスク前に search_memory を呼び、重要な発見後には add_memories を実行。"

### STEP 1: タスク開始前
search_memory を実行。対象:関連技術、モジュール名、問題内容。
プロジェクト知識を前提とせず、まず記憶を参照。

### STEP 2: タスク実行中
コード外に存在するが将来の作業に価値のある情報を意識。

### STEP 3: タスク完了前
以下のいずれかに該当する場合、add_memories で保存:
- アーキテクチャまたは設計上の意思決定
- 再現困難なバグの根本原因
- 特定環境下でのみ動作するコマンドや変数
- チーム内で合意された命名規則
- ドキュメント化されていないビジネスロジック

判断基準:「この情報があれば、新しいエージェントが5分以上節約できるか?」

導入効果

  • セッション間での知識継承:過去の調査結果や決定事項が蓄積され、エージェントがプロジェクト特有の文脈を理解できるようになる。
  • 透明性と制御性:すべての記憶は Easysearch インデックスに保存されるため、直接照会・修正・削除が可能。

これにより、AI エージェントは「常に新人」という状態から脱却し、プロジェクトとともに成長するパートナーとなる。

タグ: Easysearch Mem0 AI Agent ベクトル検索 埋め込みモデル

6月7日 21:14 投稿