AI エージェントと対話中に、以前説明したバグの根本原因やプロジェクト固有のルールを毎回繰り返し説明しなければならない経験はないだろうか。これは、現在の多くのエージェントがコンテキストウィンドウ内でのみ「記憶」を持ち、セッション終了と共にその情報を失うためだ。
本稿では、Mem0 と Easysearch を組み合わせて、ローカル環境で動作するセッション横断型の長期記憶機能を 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>:.envのUSERと一致させる
強制的な記憶操作プロトコルの導入
エージェントが自動的に記憶を活用するよう、以下のグローバルスキルを設定:
name: persistent_memory_protocol description: "必須プロトコル:すべてのタスク前に search_memory を呼び、重要な発見後には add_memories を実行。" ### STEP 1: タスク開始前 search_memory を実行。対象:関連技術、モジュール名、問題内容。 プロジェクト知識を前提とせず、まず記憶を参照。 ### STEP 2: タスク実行中 コード外に存在するが将来の作業に価値のある情報を意識。 ### STEP 3: タスク完了前 以下のいずれかに該当する場合、add_memories で保存: - アーキテクチャまたは設計上の意思決定 - 再現困難なバグの根本原因 - 特定環境下でのみ動作するコマンドや変数 - チーム内で合意された命名規則 - ドキュメント化されていないビジネスロジック 判断基準:「この情報があれば、新しいエージェントが5分以上節約できるか?」
導入効果
- セッション間での知識継承:過去の調査結果や決定事項が蓄積され、エージェントがプロジェクト特有の文脈を理解できるようになる。
- 透明性と制御性:すべての記憶は Easysearch インデックスに保存されるため、直接照会・修正・削除が可能。
これにより、AI エージェントは「常に新人」という状態から脱却し、プロジェクトとともに成長するパートナーとなる。