この記事の目的
- AIエージェント用の“メモリ”共有プロトコル OpenMemory MCP を自前で構築する方法をわかりやすく解説します。
- Ubuntu/macOS・Docker・FastAPI・Redis/PostgreSQL・OpenAI API の組み合わせでサクッと動かす最小構成を紹介します。
目次
- OpenMemory MCPとは?
- 全体アーキテクチャ
- 事前準備(環境・ツール)
- 構築ステップ
4-1. Redis/PostgreSQL の立ち上げ
4-2. FastAPI で MCP API を実装
4-3. LLM との連携実装
4-4. クライアント側の処理フロー - CLI/GUIへの拡張
- 参考になる OSS プロジェクト
- まとめ
1. OpenMemory MCPとは?
LLM(大規模言語モデル)がユーザーごとのコンテキスト(メモリ)を読み書きするための簡易プロトコルです。複数の AI エージェント/チャットボット間で文脈を共有し、会話を継続的にパーソナライズできます。
2. 全体アーキテクチャ
コンポーネント | 役割 | 推奨技術 |
---|---|---|
LLM | プロンプト処理 | OpenAI GPT / Claude / LLaMA |
MCP ストア | メモリ保存 | Redis もしくは PostgreSQL |
MCP API | GET/POST 経由でメモリを管理 | FastAPI(Python) |
クライアント SDK | LLM 呼び出し+メモリ更新 | Python / Node.js |
UI or CLI | ユーザーの入出力 | Web(Next.js, Flutter など)/ターミナル |
3. 事前準備
- OS: Ubuntu 22.04 または macOS
- 言語: Python 3.10+(Node.js 18+でも可)
- 必須ツール:
# パッケージ更新&必要ツール sudo apt update && sudo apt install -y \ docker docker-compose git python3-pip
4. 構築ステップ
4-1. メモリストアを立ち上げる
■ Redis を使う場合
docker run -d --name mcp-redis -p 6379:6379 redis
■ PostgreSQL を使う場合
docker run -d --name mcp-postgres \
-e POSTGRES_USER=mcpuser \
-e POSTGRES_PASSWORD=mcppass \
-e POSTGRES_DB=mcpdb \
-p 5432:5432 postgres
4-2. FastAPI で MCP API を実装
1) 依存パッケージをインストール
pip install fastapi uvicorn redis sqlalchemy psycopg2-binary
2) プロジェクト構成
openmemory-mcp/
├─ main.py
└─ memory_store.py
3) memory_store.py(Redis 例)
import redis
r = redis.Redis(host="localhost", port=6379, decode_responses=True)
def get_memory(user_id: str) -> str:
return r.get(user_id) or ""
def set_memory(user_id: str, memory: str):
r.set(user_id, memory)
4) main.py
from fastapi import FastAPI, Request
from memory_store import get_memory, set_memory
app = FastAPI()
@app.get("/memory/{user_id}")
def read_memory(user_id: str):
return {"user_id": user_id, "memory": get_memory(user_id)}
@app.post("/memory/{user_id}")
async def update_memory(user_id: str, request: Request):
data = await request.json()
set_memory(user_id, data.get("memory", ""))
return {"status": "ok"}
5) サーバー起動
uvicorn main:app --reload --port 8000
4-3. LLM と接続する
pip install openai
import openai
openai.api_key = "YOUR_OPENAI_API_KEY"
def ask_llm(prompt: str, memory: str):
full_prompt = memory + "\n\nUser: " + prompt
res = openai.ChatCompletion.create(
model="gpt-4o",
messages=[
{"role": "system", "content": memory},
{"role": "user", "content": prompt}
]
)
return res.choices[0].message["content"]
4-4. クライアント側の処理フロー
user_id = "user-123"
user_prompt = "今日の天気は?"
# 1. メモリ取得
memory = get_memory(user_id)
# 2. LLM へ問い合わせ
reply = ask_llm(user_prompt, memory)
# 3. 新しいメモリを保存
new_memory = memory + f"\nUser: {user_prompt}\nAssistant: {reply}"
set_memory(user_id, new_memory)
print("Assistant:", reply)
5. CLI/GUI への拡張
インターフェース | 技術候補 | ポイント |
---|---|---|
CLI | Python cmd , Textual | ターミナル派に最適 |
Web UI | Next.js / Flutter Web | API 経由でシームレスに接続 |
モバイル | Flutter | iOS/Android ワンソース運用可 |
6. 参考になるオープンソース
- LangChain – LLM チェーン構築
- AutoGen – 複数エージェント連携
- MemGPT – 長期メモリ管理の実装例
- OpenDevin – AI コーディングエージェント
7. まとめ
ステップ | やること |
---|---|
1 | Redis / PostgreSQL を Docker で立ち上げる |
2 | FastAPI で /memory エンドポイントを作成 |
3 | LLM(GPT-4o など)とつないでメモリ付きでプロンプト処理 |
4 | クライアント側で GET → LLM → POST のループを実装 |
これで OpenMemory MCP の“最小 MVP”が完成です。
さらに LangChain と組み合わせてメモリの要約・トークナイズを行えば、長期対話でも破綻しない堅牢なエージェント基盤を構築できます。ぜひ試してみてください!
コメント