mcpField
S
simplemem

simplemem

github.com/evolv3-aiその他140 回インストール14 週間前に更新
リポジトリ

simplemem について

SimpleMemは会話を構造化された事実に変換し、LLMエージェント向けの簡潔で継続的なメモリを提供します。MCPサーバー、Python API、セッション間連携に対応しています。

主な機能

  1. 01会話を原子的な事実に圧縮
  2. 02照応解決と時間情報の付与
  3. 03意味・語彙・メタデータ検索の併用
  4. 04バッチ処理と並列処理
  5. 05セッションをまたぐコンテキスト保持

活用シーン

  1. 01会話を保存して後から意味検索で質問
  2. 02複数の会話から関連する事実を取得
  3. 03過去のセッション情報をエージェントに提供

MCP 対応

ホステッド型とセルフホスト型のMCPサーバーを提供します。クライアントはMCPツールを通じて、メモリの追加、検索、取得、削除、統計確認を行えます。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/evolv3-ai/vibe-skills --skill simplemem

インストール後、Claude Code で/simplememを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
config.py.example
references/
api-reference.md
architecture.md
cli-reference.md
cross-session.md
mcp-setup.md

詳細

SimpleMem

意味的な可逆圧縮による、LLM エージェント向けの効率的な生涯メモリーです。

SimpleMem は、照応解析と時間的なアンカリングを用いて、構造化されていない対話をコンパクトで原子的なメモリーユニットに変換します。LoCoMo ベンチマークで F1 スコア 43.24% を達成し、フルコンテキスト方式と比べてトークン数を 30 分の 1 に削減します。

統合方法

ユースケースに合った方法を選んでください。

方法最適な用途セットアップ
MCP サーバー(クラウド)すばやく開始、複数プラットフォーム設定のみ
MCP サーバー(セルフホスト)プライバシー、カスタムデプロイDocker または Python
Python API(pip install simplemem)プログラムによる統合pip/uv
SimpleMem-CrossセッションをまたぐエージェントメモリーPython + オーケストレーター

MCP サーバーのセットアップ(推奨)

クラウドサービス

最もすばやく利用を開始できます。mcp.simplemem.cloud のホストサービスを使用します。

  1. https://mcp.simplemem.cloud にアクセスします
  2. OpenRouter API キーを入力して、認証トークンを取得します
  3. MCP クライアントの設定に追加します。

Claude Desktop / Claude Code(~/.claude.json):

{
  "mcpServers": {
    "simplemem": {
      "url": "https://mcp.simplemem.cloud/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_TOKEN"
      }
    }
  }
}

Cursor(.cursor/mcp.json):

{
  "mcpServers": {
    "simplemem": {
      "url": "https://mcp.simplemem.cloud/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_TOKEN"
      }
    }
  }
}
セルフホスト(Docker)

プライバシーに配慮したデプロイやカスタムインフラストラクチャ向けです。

git clone https://github.com/aiming-lab/SimpleMem.git
cd SimpleMem/MCP

# Configure environment
export JWT_SECRET_KEY="your-secure-random-secret"
export ENCRYPTION_KEY="your-32-byte-encryption-key!!"

# Run with Docker
docker compose up -d

サーバーが公開するエンドポイント:

  • Web UI:http://localhost:8000/
  • REST API:http://localhost:8000/api/
  • MCP エンドポイント:http://localhost:8000/mcp

セルフホストの詳細なガイドは、references/mcp-setup.md を参照してください。

利用可能な MCP ツール
ツール用途
memory_add対話を保存します(原子的な事実に自動圧縮)
memory_add_batch複数の対話をまとめて保存します
memory_query保存済みメモリーに対する意味的な質問応答
memory_retrieve生のメモリーエントリーを取得します
memory_deleteentry_id または ref_id でエントリーを削除します
memory_statsストレージの統計情報
memory_clearすべてのメモリーを削除します(取り消し不可)

Python API

pip または uv でインストールします。

pip install simplemem
# or
uv add simplemem
基本的な使い方
from simplemem import SimpleMemSystem

# Initialize (uses config.py for API settings)
system = SimpleMemSystem(clear_db=True)

# Stage 1: Add dialogues (semantic structured compression)
system.add_dialogue("Alice", "Let's meet at Starbucks tomorrow at 2pm", "2025-11-15T14:30:00")
system.add_dialogue("Bob", "I'll bring the market analysis report", "2025-11-15T14:31:00")

# Finalize atomic encoding
system.finalize()

# Stage 3: Query with intent-aware retrieval
answer = system.ask("When and where will Alice and Bob meet?")
# "16 November 2025 at 2:00 PM at Starbucks"
並列処理

大規模な対話データセットの場合:

system = SimpleMemSystem(
    clear_db=True,
    enable_parallel_processing=True,
    max_parallel_workers=8,
    enable_parallel_retrieval=True,
    max_retrieval_workers=4
)
メモリーの削除

ID でエントリーを削除します。

# Delete by entry_id
system.vector_store.delete_by_id(entry_id="uuid-here")

# Delete by ref_id (application-level reference)
system.vector_store.delete_by_ref_id(ref_id="my-ref")

設定

SimpleMem は、OpenAI 互換の任意の API プロバイダーに対応しています。

# config.py
OPENAI_API_KEY = "your-api-key"         # OpenAI, OpenRouter, or compatible
OPENAI_BASE_URL = None                   # Set for non-OpenAI providers

# Models
LLM_MODEL = "gpt-4.1-mini"              # Or any OpenAI-compatible model
EMBEDDING_MODEL = "Qwen/Qwen3-Embedding-0.6B"  # State-of-the-art retrieval

# Via OpenRouter (multi-provider gateway)
OPENROUTER_API_KEY = "sk-or-..."
LLM_MODEL = "openai/gpt-4.1-mini"       # OpenRouter model path
EMBEDDING_MODEL = "qwen/qwen3-embedding-8b"
EMBEDDING_DIMENSION = 4096

プロバイダーのオプション:

  • OpenAI direct - OPENAI_API_KEY を設定します
  • OpenRouter - OPENROUTER_API_KEY を設定し、モデル名にプロバイダーをプレフィックスとして付けます
  • LiteLLM - マルチプロバイダー抽象化。LITELLM_* 設定で構成します
  • Azure OpenAI - OPENAI_BASE_URL を Azure エンドポイントに設定します
  • Qwen / local models - OPENAI_BASE_URL をエンドポイントに設定します

設定の詳細は、references/api-reference.md を参照してください。

セッションをまたぐメモリー(SimpleMem-Cross)

SimpleMem-Cross は、会話をまたいで永続するメモリーを実現します。エージェントは、前のセッションのコンテキスト、意思決定、学びを自動的に想起できます。

パフォーマンス: LoCoMo ベンチマークで Claude-Mem を 64% 上回ります(スコア 48 対 29.3)。

簡単な例
from cross.orchestrator import create_orchestrator

async def main():
    orch = create_orchestrator(project="my-project")

    # Start session - previous context injected automatically
    result = await orch.start_session(
        content_session_id="session-001",
        user_prompt="Continue building the REST API",
    )
    print(result["context"])  # Relevant context from past sessions

    # Record events during the session
    await orch.record_message(result["memory_session_id"], "User asked about JWT")
    await orch.record_tool_use(
        result["memory_session_id"],
        tool_name="read_file",
        tool_input="auth/jwt.py",
        tool_output="class JWTHandler: ...",
    )

    # Finalize - extracts observations, generates summary, stores memories
    report = await orch.stop_session(result["memory_session_id"])
    print(f"Stored {report.entries_stored} memory entries")

    await orch.end_session(result["memory_session_id"])
    orch.close()
主な機能
機能説明
セッションのライフサイクル完全なイベント追跡を伴う start -> record -> stop -> end
コンテキストの自動挿入セッション開始時に、トークン予算に合わせた前回セッションのコンテキストを挿入
イベント収集メッセージ、ツールの使用、ファイルの変更を 3 段階の編集処理付きで収集
観察結果の抽出意思決定、発見、学びをヒューリスティックに抽出
出典の追跡すべてのメモリーを元の証拠に紐付け
統合古いメモリーの減衰、統合、刈り込みを自動実行

API とアーキテクチャの詳細は、references/cross-session.md を参照してください。

3 段階のパイプライン

SimpleMem のアーキテクチャは、意味的な可逆圧縮に基づいています。

ステージ 1:意味的な構造化圧縮

生の対話を、原子的で自己完結したメモリーユニットに変換します。

  • 照応解析:「He」を「Bob」に変換
  • 時間的なアンカリング:「tomorrow」を「2025-11-16T14:00:00」に変換
  • 密度ゲーティング:情報量の少ない内容を除外
Input:  "He'll meet Bob tomorrow at 2pm"
Output: "Alice will meet Bob at Starbucks on 2025-11-16T14:00:00"
ステージ 2:オンラインでの意味統合

書き込み中に関連する断片を統合します。

  • 冗長な情報を排除します
  • 関連する事実を統一された表現にまとめます
  • コンパクトなメモリトポロジーを維持します
ステージ 3:意図を考慮した検索計画

クエリに応じて、複数の視点から並列検索を実行します。

  • 意味レイヤー:密なベクトル類似度(1024 次元の埋め込み)
  • 語彙レイヤー:BM25 によるキーワード照合
  • 記号レイヤー:メタデータによるフィルタリング(人物、場所、タイムスタンプ、エンティティ)
  • クエリの複雑さに応じて検索の深さを動的に調整します

詳しいアーキテクチャについては、references/architecture.md を参照してください。

データモデル

各メモリエントリには、次の項目が含まれます。

フィールド型説明
entry_idUUID一意の識別子
ref_idStringアプリケーションレベルの参照(削除用)
lossless_restatementString自己完結型の原子的事実
keywordsList[str]BM25 検索用の主要なキーワード
timestampISO 8601イベントが発生した日時
locationString場所(自然言語)
personsList[str]言及されている人物
entitiesList[str]企業、製品、組織
topicStringトピックを表す語句
agentsList[str]エージェントのソース
sourceString出所を示す識別子

トラブルシューティング

埋め込み次元の不一致:

RuntimeError: lance error: Invalid: ListType can only be casted to FixedSizeListType

config の EMBEDDING_DIMENSION がモデルの出力と一致していません。値を更新し、データベースを消去してください:rm -rf data/lancedb/*

API キーが検出されない場合:

  • キーが config.py(config.py.example ではありません)に設定されていることを確認してください
  • OpenRouter のキーの場合、sk-or- で始まっていることを確認してください
  • キーを更新した後、Python を再起動してください

モデルが見つからない場合:

  • OpenRouter では完全なプロバイダーパスを使用してください:gpt-4.1-mini ではなく openai/gpt-4.1-mini
  • 利用可能なモデルを openrouter.ai/models で確認してください

コメント