mcpField
M
memory-lancedb-pro

memory-lancedb-pro

github.com/cortexreachエージェントワークフロー229269 回インストール32 週間前に更新
リポジトリ

memory-lancedb-pro について

OpenClaw の AI エージェント向け長期記憶スキルで、情報の永続保存と検索に使えます。LanceDB、ベクトルと BM25 のハイブリッド検索、LLM による抽出、減衰ライフサイクル、スコープ分離を備えています。

主な機能

  1. 01LanceDB による永続記憶
  2. 02ベクトルと BM25 のハイブリッド検索
  3. 03LLM によるスマート抽出
  4. 04Weibull 減衰ライフサイクル
  5. 05マルチスコープ分離

活用シーン

  1. 01エージェントのセッションをまたいだ情報保持
  2. 02語句とベクトル検索による記憶の検索
  3. 03スコープごとの記憶の分離

インストール

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

$npx skills add https://github.com/cortexreach/memory-lancedb-pro-skill --skill memory-lancedb-pro

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

同梱ファイルREADME.mdreferences/full-reference.md

詳細

memory-lancedb-pro

OpenClaw AI エージェント向けの本番環境対応の長期記憶システム(v1.1.0-beta.8)です。LanceDB を使用した永続的でインテリジェントな記憶ストレージを提供し、ベクトル検索と BM25 を組み合わせたハイブリッド検索、LLM を活用したスマート抽出、Weibull 減衰ライフサイクル、複数スコープの分離に対応します。

技術的な詳細(しきい値、数式、データベーススキーマ、ソースファイルマップ)については、references/full-reference.md を参照してください。


最適な設定を適用する(ステップごとのワークフロー)

ユーザーが「最適な設定を有効にするのを手伝って」「最適な設定を適用して」などと指示した場合は、次の手順を正確に実行してください。

ステップ 1 — 設定プランを提示し、ユーザーに選んでもらう

以下の3つのプランをわかりやすく比較して提示し、どれを選ぶかユーザーに尋ねてください。


プラン A — 🏆 フルパワー(最高品質)

  • 埋め込み:Jina jina-embeddings-v5-text-small(タスク対応、1024 次元)
  • リランカー:Jina jina-reranker-v3(クロスエンコーダー、同じキー)
  • LLM:OpenAI gpt-4o-mini(スマート抽出)
  • 必要なキー:JINA_API_KEY + OPENAI_API_KEY
  • キーの取得先:Jina → https://jina.ai/api-key · OpenAI → https://platform.openai.com/api-keys
  • 費用:どちらも有料(Jina には利用枠が限られた無料プランがあります)
  • おすすめの用途:本番環境へのデプロイ、最高品質の検索

プラン B — 💰 低コスト(無料リランカー)

  • 埋め込み:Jina jina-embeddings-v5-text-small
  • リランカー:SiliconFlow BAAI/bge-reranker-v2-m3(無料プランあり)
  • LLM:OpenAI gpt-4o-mini
  • 必要なキー:JINA_API_KEY + SILICONFLOW_API_KEY + OPENAI_API_KEY
  • キーの取得先:Jina → https://jina.ai/api-key · SiliconFlow → https://cloud.siliconflow.cn/account/ak · OpenAI → https://platform.openai.com/api-keys
  • 費用:Jina の埋め込みは有料、SiliconFlow のリランカーは無料プランあり、OpenAI は有料
  • おすすめの用途:リランカーを使いつつ、コストを抑えたいデプロイ

プラン C — 🟢 シンプル(OpenAI のみ)

  • 埋め込み:OpenAI text-embedding-3-small
  • リランカー:なし(ベクトル検索と BM25 のみを組み合わせ、クロスエンコーダーは使用しません)
  • LLM:OpenAI gpt-4o-mini
  • 必要なキー:OPENAI_API_KEY のみ
  • キーの取得先:https://platform.openai.com/api-keys
  • 費用:OpenAI のみ有料
  • おすすめの用途:すでに OpenAI を利用しており、最小限の設定で使いたいユーザー

プラン D — 🖥️ 完全ローカル(Ollama、API キー不要)

  • 埋め込み:Ollama mxbai-embed-large(1024 次元、おすすめ)または nomic-embed-text:v1.5(768 次元、軽量)
  • リランカー:なし — Ollama にはクロスエンコーダーのリランカーがないため、検索にはベクトル検索と BM25 の組み合わせのみを使用します
  • LLM:OpenAI 互換エンドポイント経由の Ollama — 信頼性の高い JSON/構造化出力を行う、おすすめのモデル:
    • qwen3:8b(おすすめ — JSON 出力が最も優れており、ネイティブの構造化出力に対応、約 5.2GB)
    • qwen3:14b(品質向上、約 9GB、16GB の VRAM が必要)
    • llama4:scout(マルチモーダル MoE、10M ctx、約 12GB)
    • mistral-small3.2(24B、128K ctx、指示追従性に優れ、約 15GB)
    • mistral-nemo(12B、128K ctx、効率的、約 7GB)
  • 必要なキー:なし — 完全ローカルで、外部 API 呼び出しはありません
  • 前提条件:
    • Ollama のインストール:https://ollama.com/download
    • モデルのダウンロード(下記のステップ 5 を参照)
    • Ollama の起動:macOS の場合は「アプリケーション」からアプリを起動します。Linux の場合は systemctl start ollama または ollama serve を実行します
  • 費用:無料(ハードウェア費用のみ)
  • RAM 要件:mxbai-embed-large 約 670MB、qwen3:8b 約 5.2GB、qwen3:14b 約 9GB、llama4:scout 約 12GB、mistral-small3.2 約 15GB
  • トレードオフ:クロスエンコーダーによるリランキングがないため、検索精度はプラン A/B より低くなります。スマート抽出の品質はローカル LLM に依存します。抽出結果が使いものにならない場合は、"smartExtraction": false に設定してください
  • おすすめの用途:プライバシーを重視するデプロイ、ネットワークから隔離された環境、API 費用をゼロにしたい場合

ユーザーがプランを選択したら、1つのメッセージで以下を尋ねてください。

  1. 選択したプランで必要な API キーを入力してください(そのまま貼り付けるか、「すでに環境変数に設定済み」と回答してください)
  2. 環境変数は OpenClaw Gateway プロセスにすでに設定されていますか?(わからない場合は「いいえ」と回答してください)
  3. openclaw.json の場所を教えてください。(自動で探してほしい場合は省略してください)

ユーザーがすでに会話の中でプロバイダーやキーについて伝えている場合は、質問せずに進めてください。

API キーを収集して検証するまで(下記のステップ 2)、ステップ 2 に進まないでください。

ステップ 2 — API キーを確認する(必須 — 省略しないでください)

設定に触れる前に、選択したプランに必要なすべてのキーを確認してください。 いずれかの確認に失敗した場合は、そこで停止し、失敗したキーとその理由をユーザーに伝えてください。ステップ 3 に進んではいけません。

プラン A / プラン B — Jina 埋め込みの確認:

curl -s -o /dev/null -w "%{http_code}" \
  https://api.jina.ai/v1/embeddings \
  -H "Authorization: Bearer <JINA_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"model":"jina-embeddings-v5-text-small","input":["test"]}'

プラン A / B / C — OpenAI の確認:

curl -s -o /dev/null -w "%{http_code}" \
  https://api.openai.com/v1/models \
  -H "Authorization: Bearer <OPENAI_API_KEY>"

プラン B — SiliconFlow リランカーの確認:

curl -s -o /dev/null -w "%{http_code}" \
  https://api.siliconflow.com/v1/rerank \
  -H "Authorization: Bearer <SILICONFLOW_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"model":"BAAI/bge-reranker-v2-m3","query":"test","documents":["test doc"]}'

プラン D — Ollama の確認:

curl -s -o /dev/null -w "%{http_code}" http://localhost:11434/api/tags

結果の解釈:

HTTP コード意味対応
200 / 201キーは有効で、利用可能なクォータがあります✅ 続行
401 / 403キーが無効、または期限切れです❌ 停止 — キーを確認するようユーザーに依頼
402支払いが必要、またはクレジットがありません❌ 停止 — アカウントにチャージするようユーザーに依頼
429レート制限、またはクォータ超過です❌ 停止 — 請求情報/クォータを確認するようユーザーに依頼
000 / 接続拒否サービスに接続できません❌ 停止 — ネットワーク、または Ollama の起動状況を確認するようユーザーに依頼

いずれかの確認に失敗した場合: 失敗したプロバイダー、受信した HTTP コード、修正が必要な内容を正確にユーザーに伝えてください。必要なすべてのキーの確認に成功するまで、インストールを進めてはいけません。

ユーザーが、ゲートウェイプロセスの環境変数としてキーを設定していると言った場合は、${VAR_NAME} をインラインで置き換えて確認を実行するか、確認のために一時的にキーを貼り付けてもらってください。

ステップ 3 — openclaw.json を探す

次の場所を順に確認してください:

# Most common locations
ls ~/.openclaw/openclaw.json
ls ~/openclaw.json
# Ask the gateway where it's reading config from
openclaw config get --show-path 2>/dev/null || echo "not found"

見つからない場合は、ユーザーにパスを尋ねてください。

ステップ 4 — 現在の設定を読み取る
# Read and display current plugins config before changing anything
openclaw config get plugins.entries.memory-lancedb-pro 2>/dev/null
openclaw config get plugins.slots.memory 2>/dev/null

すでに存在する設定を確認してください — 既存の設定を決して確認せずに上書きしてはいけません。

ステップ 5 — 選択したプランに基づいて、統合後の設定を作成する

選択したプランの設定ブロックを使用してください。ユーザーが API キーを直接提示した場合は、実際のキーに置き換えてください。ゲートウェイプロセスで環境変数が設定されていることを確認した場合は、${ENV_VAR} の形式を維持してください。

プラン A の設定(plugins.entries.memory-lancedb-pro.config):

{
  "embedding": {
    "apiKey": "${JINA_API_KEY}",
    "model": "jina-embeddings-v5-text-small",
    "baseURL": "https://api.jina.ai/v1",
    "dimensions": 1024,
    "taskQuery": "retrieval.query",
    "taskPassage": "retrieval.passage",
    "normalized": true
  },
  "autoCapture": true,
  "autoRecall": true,
  "captureAssistant": false,
  "smartExtraction": true,
  "extractMinMessages": 2,
  "extractMaxChars": 8000,
  "llm": {
    "apiKey": "${OPENAI_API_KEY}",
    "model": "gpt-4o-mini",
    "baseURL": "https://api.openai.com/v1"
  },
  "retrieval": {
    "mode": "hybrid",
    "vectorWeight": 0.7,
    "bm25Weight": 0.3,
    "rerank": "cross-encoder",
    "rerankProvider": "jina",
    "rerankModel": "jina-reranker-v3",
    "rerankEndpoint": "https://api.jina.ai/v1/rerank",
    "rerankApiKey": "${JINA_API_KEY}",
    "candidatePoolSize": 12,
    "minScore": 0.6,
    "hardMinScore": 0.62,
    "filterNoise": true
  },
  "sessionMemory": { "enabled": false }
}

プラン B の設定:

{
  "embedding": {
    "apiKey": "${JINA_API_KEY}",
    "model": "jina-embeddings-v5-text-small",
    "baseURL": "https://api.jina.ai/v1",
    "dimensions": 1024,
    "taskQuery": "retrieval.query",
    "taskPassage": "retrieval.passage",
    "normalized": true
  },
  "autoCapture": true,
  "autoRecall": true,
  "captureAssistant": false,
  "smartExtraction": true,
  "extractMinMessages": 2,
  "extractMaxChars": 8000,
  "llm": {
    "apiKey": "${OPENAI_API_KEY}",
    "model": "gpt-4o-mini",
    "baseURL": "https://api.openai.com/v1"
  },
  "retrieval": {
    "mode": "hybrid",
    "vectorWeight": 0.7,
    "bm25Weight": 0.3,
    "rerank": "cross-encoder",
    "rerankProvider": "siliconflow",
    "rerankModel": "BAAI/bge-reranker-v2-m3",
    "rerankEndpoint": "https://api.siliconflow.com/v1/rerank",
    "rerankApiKey": "${SILICONFLOW_API_KEY}",
    "candidatePoolSize": 12,
    "minScore": 0.5,
    "hardMinScore": 0.55,
    "filterNoise": true
  },
  "sessionMemory": { "enabled": false }
}

プラン C の設定:

{
  "embedding": {
    "apiKey": "${OPENAI_API_KEY}",
    "model": "text-embedding-3-small",
    "baseURL": "https://api.openai.com/v1"
  },
  "autoCapture": true,
  "autoRecall": true,
  "captureAssistant": false,
  "smartExtraction": true,
  "extractMinMessages": 2,
  "extractMaxChars": 8000,
  "llm": {
    "apiKey": "${OPENAI_API_KEY}",
    "model": "gpt-4o-mini",
    "baseURL": "https://api.openai.com/v1"
  },
  "retrieval": {
    "mode": "hybrid",
    "vectorWeight": 0.7,
    "bm25Weight": 0.3,
    "filterNoise": true,
    "minScore": 0.3,
    "hardMinScore": 0.35
  },
  "sessionMemory": { "enabled": false }
}

プラン D の設定(必要に応じてモデルを置き換えてください — LLM には qwen3:8b、埋め込みには mxbai-embed-large を推奨):

{
  "embedding": {
    "apiKey": "ollama",
    "model": "mxbai-embed-large",
    "baseURL": "http://localhost:11434/v1",
    "dimensions": 1024
  },
  "autoCapture": true,
  "autoRecall": true,
  "captureAssistant": false,
  "smartExtraction": true,
  "extractMinMessages": 2,
  "extractMaxChars": 4000,
  "llm": {
    "apiKey": "ollama",
    "model": "qwen3:8b",
    "baseURL": "http://localhost:11434/v1"
  },
  "retrieval": {
    "mode": "hybrid",
    "vectorWeight": 0.7,
    "bm25Weight": 0.3,
    "filterNoise": true,
    "minScore": 0.25,
    "hardMinScore": 0.28
  },
  "sessionStrategy": "none"
}

プラン D の前提条件 — 設定を適用する前に実行してください:

# 1. Verify Ollama is running (should return JSON with model list)
curl http://localhost:11434/api/tags

# 2. Pull embedding model (choose one):
ollama pull mxbai-embed-large          # recommended: 1024-dim, beats text-embedding-3-large, ~670MB
ollama pull snowflake-arctic-embed2    # best multilingual local option, ~670MB
ollama pull nomic-embed-text:v1.5      # classic stable, 768-dim, ~270MB

# 3. Pull LLM for Smart Extraction (choose one based on RAM):
ollama pull qwen3:8b           # recommended: best JSON/structured output, ~5.2GB
ollama pull qwen3:14b          # better quality, ~9GB, needs 16GB VRAM
ollama pull llama4:scout       # multimodal MoE, 10M ctx, ~12GB
ollama pull mistral-small3.2   # 24B, 128K ctx, excellent, ~15GB
ollama pull mistral-nemo       # 12B, 128K ctx, efficient, ~7GB

# 4. Verify models are installed
ollama list

# 5. Quick sanity check — embedding endpoint works:
curl http://localhost:11434/v1/embeddings \
  -H "Content-Type: application/json" \
  -d '{"model":"mxbai-embed-large","input":"test"}'
# Should return a JSON with a 1024-element vector

スマート抽出で文字化けした出力や無効な出力が生成される場合: ローカル LLM が構造化 JSON を確実にサポートしていない可能性があります。まず qwen3:8b を試してください — ネイティブの構造化出力をサポートしています。それでも解決しない場合は、無効にしてください:

{ "smartExtraction": false }

Ollama が別のホストまたは Docker 上にある場合: http://localhost:11434/v1 を実際のホストに置き換えてください(例:http://192.168.1.100:11434/v1)。また、リモート接続を許可するために、Ollama プロセスで OLLAMA_HOST=0.0.0.0 も設定してください。

plugins.entries.memory-lancedb-pro.config ブロックは、openclaw.json 全体を置き換えるのではなく、既存の設定に統合してください。memory プラグインの設定セクションだけを対象に編集してください。

ステップ 6 — 設定を適用する

まず現在の openclaw.json を読み取り、その後、plugins.entries.memory-lancedb-pro セクションだけを慎重に編集してください。インストール方法に合ったテンプレートを使用してください。

方法 1 — openclaw plugins install(プラグインマネージャーを使ってプラグインをインストールした場合): プラグインマネージャーによってすでにプラグインが登録されているため、load.paths や allow は不要です。

{
  "plugins": {
    "slots": { "memory": "memory-lancedb-pro" },
    "entries": {
      "memory-lancedb-pro": {
        "enabled": true,
        "config": {
          "<<OPTIMAL CONFIG HERE>>"
        }
      }
    }
  }
}

方法 2 — 手動パスで git clone(ワークスペースプラグイン): ワークスペースプラグインはデフォルトで無効になっているため、load.paths と allow の両方が必要です。

{
  "plugins": {
    "load": { "paths": ["plugins/memory-lancedb-pro"] },
    "allow": ["memory-lancedb-pro"],
    "slots": { "memory": "memory-lancedb-pro" },
    "entries": {
      "memory-lancedb-pro": {
        "enabled": true,
        "config": {
          "<<OPTIMAL CONFIG HERE>>"
        }
      }
    }
  }
}
ステップ 7 — 検証して再起動する
openclaw config validate
openclaw gateway restart
openclaw logs --follow --plain | rg "memory-lancedb-pro"

次の出力が確認できれば成功です:

  • memory-lancedb-pro: smart extraction enabled
  • memory-lancedb-pro@...: plugin registered
ステップ 8 — 確認する
openclaw plugins info memory-lancedb-pro
openclaw hooks list --json | grep -E "before_agent_start|agent_end|command:new"
openclaw memory-pro stats

次に、簡単なスモークテストを実行します:

  1. 保存:text: "test memory for verification" を指定して memory_store を呼び出す
  2. 想起:query: "test memory" を指定して memory_recall を呼び出す
  3. メモリが返されることを確認する

インストール

クイックインストール(初心者向け)

初めてのユーザーには、コミュニティ提供のワンクリックインストーラーがおすすめです。パスの検出、スキーマの検証、自動更新、プロバイダーの選択、ロールバックをすべて自動で処理します。

curl -fsSL https://raw.githubusercontent.com/CortexReach/toolbox/main/memory-lancedb-pro-setup/setup-memory.sh -o setup-memory.sh
bash setup-memory.sh

オプション:--dry-run(プレビューのみ)、--beta(プレリリース版を含める)、--ref v1.2.0(バージョンを固定)、--selfcheck-only、--uninstall。

ソース:https://github.com/CortexReach/toolbox/tree/main/memory-lancedb-pro-setup


要件
  • Node.js 24 を推奨(Node 22 LTS が最小要件、22.16+)
  • LanceDB ≥ 0.26.2
  • OpenAI SDK ≥ 6.21.0
  • TypeBox 0.34.48
インストール方法 1 — OpenClaw プラグインマネージャー経由(推奨)
# Install from npm registry (@beta tag = latest pre-release, e.g. 1.1.0-beta.8)
openclaw plugins install memory-lancedb-pro@beta

# Install stable release from npm (@latest tag, e.g. 1.0.32)
openclaw plugins install memory-lancedb-pro

# Or install from a local git clone — use master branch (matches npm @beta)
git clone -b master https://github.com/CortexReach/memory-lancedb-pro.git /tmp/memory-lancedb-pro
openclaw plugins install /tmp/memory-lancedb-pro

npm と GitHub のブランチについて: @beta は npm レジストリからインストールされます(GitHub から直接インストールされるわけではありません)。リポジトリには長期間維持されるブランチが 2 つあります。master はリリースブランチ(npm の @beta と一致)で、main は古く、遅れています。公開済みのベータ版と一致するコードが必要な場合は、必ず master をクローンしてください。

次に、メモリスロットをバインドし、設定を追加します(下記の「設定」セクションを参照)。

{
  "plugins": {
    "slots": { "memory": "memory-lancedb-pro" },
    "entries": {
      "memory-lancedb-pro": {
        "enabled": true,
        "config": { "<<your config here>>" }
      }
    }
  }
}

再起動して確認します。

openclaw gateway restart
openclaw plugins info memory-lancedb-pro
インストール方法 2 — git clone と手動パス指定(開発向けのパス A)

⚠️ 重要: ワークスペースプラグイン(git でクローンしたパス)は、OpenClaw ではデフォルトで無効になっています。明示的に有効にする必要があります。

# 1. Clone into workspace
cd /path/to/your/openclaw/workspace
git clone -b master https://github.com/CortexReach/memory-lancedb-pro.git plugins/memory-lancedb-pro
cd plugins/memory-lancedb-pro && npm install

openclaw.json に追加します — enabled: true と allow エントリーの両方が必須です。

{
  "plugins": {
    "load": { "paths": ["plugins/memory-lancedb-pro"] },
    "allow": ["memory-lancedb-pro"],
    "slots": { "memory": "memory-lancedb-pro" },
    "entries": {
      "memory-lancedb-pro": {
        "enabled": true,
        "config": {
          "embedding": {
            "apiKey": "${JINA_API_KEY}",
            "model": "jina-embeddings-v5-text-small",
            "baseURL": "https://api.jina.ai/v1",
            "dimensions": 1024,
            "taskQuery": "retrieval.query",
            "taskPassage": "retrieval.passage",
            "normalized": true
          }
        }
      }
    }
  }
}

検証して再起動します。

openclaw config validate
openclaw gateway restart
openclaw logs --follow --plain | rg "memory-lancedb-pro"

想定されるログ出力:

  • memory-lancedb-pro: smart extraction enabled
  • memory-lancedb-pro@...: plugin registered
インストール方法 3 — 既存のデプロイ環境(パス B)

plugins.load.paths には絶対パスを使用します。plugins.allow に追加します。メモリスロットをバインドします:plugins.slots.memory = "memory-lancedb-pro"。plugins.entries.memory-lancedb-pro.enabled: true を設定します。

その後、再起動して確認します。

openclaw config validate
openclaw gateway restart
openclaw logs --follow --plain | rg "memory-lancedb-pro"
初回インストール時のチェックリスト

プラグインが正常に起動したら、該当するシナリオを確認し、対応する手順を実行します。


シナリオ A — 組み込みの memory-lancedb プラグインからの移行(最も一般的なアップグレード方法)

旧プラグインは、LanceDB に ~/.openclaw/memory/lancedb の場所でデータを保存します。移行コマンドを使用してください。

# 1. Check if old data exists and is readable
openclaw memory-pro migrate check

# 2. Preview what would be migrated (dry run)
openclaw memory-pro migrate run --dry-run

# 3. Run the actual migration
openclaw memory-pro migrate run

# 4. Verify migrated data
openclaw memory-pro migrate verify
openclaw memory-pro stats

旧データベースがデフォルト以外のパスにある場合:

openclaw memory-pro migrate check --source /path/to/old/lancedb
openclaw memory-pro migrate run --source /path/to/old/lancedb

シナリオ B — 既存のメモリを JSON としてエクスポート済み

標準の JSON エクスポート形式でメモリを保存している場合:

# Preview import (dry run)
openclaw memory-pro import memories.json --scope global --dry-run

# Import
openclaw memory-pro import memories.json --scope global

想定される JSON スキーマ:

{
  "version": "1.0",
  "memories": [
    {
      "text": "Memory content (required)",
      "category": "preference|fact|decision|entity|other",
      "importance": 0.7,
      "timestamp": 1234567890000
    }
  ]
}

シナリオ C — メモリを Markdown ファイル(AGENTS.md、MEMORY.md など)に保存

Markdown からの直接インポートには対応していません — インポートコマンドが受け付けるのは JSON のみです。まず形式を変換する必要があります。

手動で変換する方法:

  1. メモリを含む Markdown ファイルを開きます
  2. 各メモリエントリーについて、text、category、importance を含む JSON オブジェクトを作成します
  3. 上記のスキーマに従って JSON ファイルとして保存します
  4. openclaw memory-pro import を実行します

または、エージェント内で memory_store ツールを直接使い、エントリーを 1 件ずつ保存する方法もあります。

memory_store(text="<extracted memory>", category="fact", importance=0.8)

注: Markdown ベースのメモリファイル(MEMORY.md、AGENTS.md)はワークスペースのコンテキストファイルであり、LanceDB のメモリストアとは異なります。memory_recall でその内容を検索可能にしたい場合にのみ、移行が必要です。


シナリオ D — 新規インストールで、既存のメモリがない場合

移行は不要です。簡単なスモークテストでプラグインが動作していることを確認します。

openclaw memory-pro stats     # should show 0 memories

会話を開始すると、autoCapture が自動的にメモリの保存を開始します。


LanceDB のバージョン互換性

LanceDB のバージョン変更に手動で対応する必要はありません。

このプラグインは npm の依存関係として @lancedb/lancedb ^0.26.2 を必要とします。これはプラグインのインストール時または更新時に自動でインストールされます。LanceDB を手動でインストールまたはアップグレードする必要はありません。

LanceDB 0.26 以降では、数値列の返され方が変更されました(timestamp、importance、_distance、_score に Arrow の BigInt 型が使用されます)。プラグインは実行時に内部で Number(...) による型変換を行うため、この変更は透過的に処理されます。LanceDB のバージョンを切り替える際に移行コマンドは必要ありません。

要約: LanceDB のバージョン互換性は完全に自動で処理されます。各メンテナンスコマンドが実際に必要となる状況については、以下の表をご覧ください。

プラグインコードとデータのアップグレード

コマンドの違い(重要):

コマンド使用するタイミング
openclaw plugins update memory-lancedb-pro新しいリリース後にプラグインコードを更新する場合(npm でインストールした場合のみ)
openclaw plugins update --allnpm でインストールしたすべてのプラグインを一括更新する場合
openclaw memory-pro upgradeスマートメモリースキーマ(L0/L1/L2 メタデータと 6 カテゴリーシステム)導入前の古い memory-lancedb-pro エントリーを拡充する場合。LanceDB のバージョンとは関係ありません
openclaw memory-pro migrate別個の組み込みプラグイン memory-lancedb から Pro への一度限りの移行
openclaw memory-pro reembed埋め込みモデルまたはプロバイダーの切り替え後に、すべての埋め込みを再構築する場合

memory-pro upgrade が必要になるのはどんな場合ですか?

スマートメモリー形式の導入前に memory-lancedb-pro をインストールした場合に実行してください(つまり、エントリーのメタデータに memory_category がありません)。必要かどうかは、次の兆候から判断できます。

  • memory_recall は結果を返すものの、意味のあるカテゴリーが含まれていない
  • memory-pro list --json に、l0_abstract / l1_overview フィールドがないエントリーが表示される

安全なアップグレード手順:

# 1. Backup first
openclaw memory-pro export --scope global --output memories-backup.json

# 2. Preview what would change
openclaw memory-pro upgrade --dry-run

# 3. Run upgrade (uses LLM by default for L0/L1/L2 generation)
openclaw memory-pro upgrade

# 4. Verify results
openclaw memory-pro stats
openclaw memory-pro search "your known keyword" --scope global --limit 5

アップグレードオプション:

openclaw memory-pro upgrade --no-llm          # skip LLM, use simple text truncation
openclaw memory-pro upgrade --batch-size 5    # slower but safer for large collections
openclaw memory-pro upgrade --limit 50        # process only first N entries
openclaw memory-pro upgrade --scope global    # limit to one scope
プラグイン管理コマンド
openclaw plugins list                           # show all discovered plugins
openclaw plugins info memory-lancedb-pro        # show plugin status and config
openclaw plugins enable memory-lancedb-pro      # enable a disabled plugin
openclaw plugins disable memory-lancedb-pro     # disable without removing
openclaw plugins update memory-lancedb-pro      # update npm-installed plugin
openclaw plugins update --all                   # update all npm plugins
openclaw plugins doctor                         # health check for all plugins
openclaw plugins install ./path/to/plugin       # install local plugin (copies + enables)
openclaw plugins install @scope/plugin@beta     # install from npm registry
openclaw plugins install -l ./path/to/plugin    # symlink for dev (no copy)

以下を実行した後はゲートウェイの再起動が必要です: plugins install、plugins enable、plugins disable、plugins update、または openclaw.json の変更。ゲートウェイを再起動するまで変更は反映されません。

openclaw gateway restart
見落としやすいセットアップ手順
  1. 変更後は必ずゲートウェイを再起動してください:インストール、有効化、無効化、更新、または openclaw.json の設定変更後は、必ず openclaw gateway restart を実行してください。変更はホットリロードされません。
  2. ワークスペースのプラグインはデフォルトで無効です:git clone の後、必ず plugins.allow: ["memory-lancedb-pro"] と plugins.entries.memory-lancedb-pro.enabled: true を追加してください。これらがないと、プラグインは読み込まれず、エラーも表示されません。
  3. ゲートウェイプロセス内の環境変数:${OPENAI_API_KEY} を使用するには、シェルだけでなく、OpenClaw Gateway サービスのプロセスで環境変数を設定する必要があります。
  4. 絶対パスと相対パス:既存のデプロイでは、plugins.load.paths に必ず絶対パスを使用してください。
  5. baseUrl ではなく baseURL:埋め込み(および LLM)の設定フィールドは baseURL(URL の U が大文字)であり、baseUrl ではありません。大文字・小文字を間違えると、スキーマ検証エラー「must NOT have additional properties」が発生します。また、必須の /v1 サフィックスにも注意してください。http://localhost:11434 ではなく、http://localhost:11434/v1 を指定します。別の大文字・小文字表記を使用する agents.defaults.memorySearch.remote.baseUrl と混同しないでください。
  6. jiti キャッシュの無効化:プラグイン配下の .ts ファイルを変更した後は、openclaw gateway restart の前に rm -rf /tmp/jiti/ を実行してください。
  7. 不明なプラグイン ID はエラーになります:OpenClaw は、entries、allow、deny、slots 内の不明な ID を検証エラーとして扱います。参照する前に、プラグイン ID を検出できる状態にしておく必要があります。
  8. LLM 設定は個別に指定してください:埋め込みと LLM で異なるプロバイダーを使用する場合は、llm セクションを個別に設定してください。設定しない場合、埋め込みのキーと URL が使用されます。
  9. スコープの分離:複数のスコープを使用するには、scopes.agentAccess マッピングを明示的に設定する必要があります。設定しない場合、エージェントからは global スコープのみが見えます。
  10. セッションメモリのフック:/new コマンドで実行されます。実際に /new を実行してテストしてください。
  11. 再ランキングの認証情報:プロバイダーを切り替える場合は、rerankApiKey と rerankEndpoint の両方を更新してください。
  12. デフォルト値を想定する前に設定を確認してください:openclaw config get plugins.entries.memory-lancedb-pro を実行して、実際に読み込まれている設定を確認してください。
  13. 環境変数によるカスタム設定/状態パス:OpenClaw では、カスタムパスに以下の環境変数を使用できます。
    • OPENCLAW_HOME — ルートの設定/データディレクトリを指定します(デフォルト:~/.openclaw/)
    • OPENCLAW_CONFIG_PATH — openclaw.json の上書きに使用する絶対パス
    • OPENCLAW_STATE_DIR — ランタイムの状態/データディレクトリを上書きします デフォルトの ~/.openclaw/ パスが適切でない場合は、OpenClaw Gateway プロセスの環境変数としてこれらを設定してください。
インストール後の確認
openclaw doctor                                 # full health check (recommended)
openclaw config validate                        # config schema check only
openclaw plugins info memory-lancedb-pro        # plugin status
openclaw plugins doctor                         # plugin-specific health
openclaw hooks list --json | grep memory        # confirm hooks registered
openclaw memory-pro stats
openclaw memory-pro list --scope global --limit 5

スモークテストのチェックリスト:

  • ✅ プラグイン情報に enabled: true と設定が読み込まれたことが表示される
  • ✅ フックに before_agent_start、agent_end、command:new が含まれる
  • ✅ ツールを使って memory_store → memory_recall の往復を1回実行できる
  • ✅ 完全一致の ID 検索で1件ヒットする
  • ✅ 自然言語検索で1件ヒットする
  • ✅ セッションメモリが有効な場合:実際に /new を1回テストする

トラブルシューティング — エラーメッセージのクイックリファレンス

設定検証ツール(CortexReach/toolbox から入手):

# Download once
curl -fsSL https://raw.githubusercontent.com/CortexReach/toolbox/main/memory-lancedb-pro-setup/scripts/config-validate.mjs -o config-validate.mjs
# Run against your openclaw.json
node config-validate.mjs
# Or validate a specific config snippet
node config-validate.mjs --json '{"embedding":{"baseURL":"http://localhost:11434/v1","model":"bge-m3","apiKey":"ollama"}}'

終了コード 0 は合格/警告、1 はエラー検出を示します。

エラーメッセージ根本原因修正方法
must NOT have additional properties + config.embedding埋め込み設定のフィールド名の誤り(例:baseURL ではなく baseUrl)以下のスキーマ表で各フィールド名を確認してください。フィールド名では大文字と小文字が区別されます
must NOT have additional properties(トップレベルの設定)プラグイン設定に不明なトップレベルフィールドがあるフィールドを削除するか、正しい値に修正してください
memory-lancedb-pro: plugin not found /プラグインが読み込まれず、エラーも表示されないplugins.allow が設定されていない(git-clone でインストールした場合)、または enabled: falseplugins.allow: ["memory-lancedb-pro"] を追加し、enabled: true に設定してから再起動してください
Unknown plugin id 検証エラープラグインを検出可能にする前に、entries/slots で参照している先にプラグインをインストール/登録し、その後に設定の参照を追加してください
${OPENAI_API_KEY} が展開されない/環境変数を設定しているのに認証エラーになるゲートウェイプロセスの環境に環境変数が設定されていないシェルだけでなく、OpenClaw ゲートウェイを実行するサービスで環境変数を設定してください
フック(before_agent_start、agent_end)が実行されないインストール/設定の変更後にゲートウェイを再起動していないopenclaw gateway restart を実行してください
Ollama で埋め込みエラーが発生するbaseURL の形式が正しくないhttp://localhost:11434/v1(/v1 を含む)である必要があります。また、フィールド名は baseUrl ではなく baseURL である必要があります
会話後に memory-pro stats のエントリー数が 0 と表示されるautoCapture が false か、extractMinMessages に達していないautoCapture: true に設定してください。少なくとも extractMinMessages(デフォルトは 2)ターンが必要です
エージェントの返信前にメモリーが注入されないautoRecall が false(スキーマのデフォルト)"autoRecall": true を明示的に設定してください
プラグインの .ts ファイルを編集した後に jiti キャッシュエラーが発生するコンパイル済みキャッシュが古いrm -rf /tmp/jiti/ を実行してから、openclaw gateway restart を実行してください

設定

最小限のクイックスタート
{
  "embedding": {
    "provider": "openai-compatible",
    "apiKey": "${OPENAI_API_KEY}",
    "model": "text-embedding-3-small"
  },
  "autoCapture": true,
  "autoRecall": true,
  "smartExtraction": true,
  "extractMinMessages": 2,
  "extractMaxChars": 8000,
  "sessionMemory": { "enabled": false }
}

注: プラグインのスキーマでは autoRecall はデフォルトで無効になっています。新しいデプロイでは、明示的に true に設定してください。

本番環境向けの最適な設定(推奨)

埋め込みと再ランキングの両方に Jina を使用します。検索品質が最も高くなります。

{
  "embedding": {
    "apiKey": "${JINA_API_KEY}",
    "model": "jina-embeddings-v5-text-small",
    "baseURL": "https://api.jina.ai/v1",
    "dimensions": 1024,
    "taskQuery": "retrieval.query",
    "taskPassage": "retrieval.passage",
    "normalized": true
  },
  "dbPath": "~/.openclaw/memory/lancedb-pro",
  "autoCapture": true,
  "autoRecall": true,
  "captureAssistant": false,
  "smartExtraction": true,
  "extractMinMessages": 2,
  "extractMaxChars": 8000,
  "enableManagementTools": false,
  "llm": {
    "apiKey": "${OPENAI_API_KEY}",
    "model": "gpt-4o-mini",
    "baseURL": "https://api.openai.com/v1"
  },
  "retrieval": {
    "mode": "hybrid",
    "vectorWeight": 0.7,
    "bm25Weight": 0.3,
    "rerank": "cross-encoder",
    "rerankProvider": "jina",
    "rerankModel": "jina-reranker-v3",
    "rerankEndpoint": "https://api.jina.ai/v1/rerank",
    "rerankApiKey": "${JINA_API_KEY}",
    "candidatePoolSize": 12,
    "minScore": 0.6,
    "hardMinScore": 0.62,
    "filterNoise": true,
    "lengthNormAnchor": 500,
    "timeDecayHalfLifeDays": 60,
    "reinforcementFactor": 0.5,
    "maxHalfLifeMultiplier": 3
  },
  "sessionMemory": { "enabled": false, "messageCount": 15 }
}

これらの設定が優れている理由:

  • Jina の埋め込み:検索向けに最適化された、タスクを考慮したベクトル(taskQuery/taskPassage)
  • ハイブリッドモード 0.7/0.3:意味的な理解とキーワードの完全一致のバランスを取ります
  • Jina reranker v3:クロスエンコーダーによる再ランキングで関連性が大幅に向上します
  • candidatePoolSize: 12 + minScore: 0.6:積極的なフィルタリングでノイズを減らします
  • captureAssistant: false:エージェントが生成した定型文の保存を防ぎます
  • sessionMemory: false:セッションの要約が検索結果に混入するのを防ぎます
完全な設定(すべてのオプション)
{
  "embedding": {
    "apiKey": "${JINA_API_KEY}",
    "model": "jina-embeddings-v5-text-small",
    "baseURL": "https://api.jina.ai/v1",
    "dimensions": 1024,
    "taskQuery": "retrieval.query",
    "taskPassage": "retrieval.passage",
    "normalized": true
  },
  "dbPath": "~/.openclaw/memory/lancedb-pro",
  "autoCapture": true,
  "autoRecall": true,
  "captureAssistant": false,
  "smartExtraction": true,
  "llm": {
    "apiKey": "${OPENAI_API_KEY}",
    "model": "gpt-4o-mini",
    "baseURL": "https://api.openai.com/v1"
  },
  "extractMinMessages": 2,
  "extractMaxChars": 8000,
  "enableManagementTools": false,
  "retrieval": {
    "mode": "hybrid",
    "vectorWeight": 0.7,
    "bm25Weight": 0.3,
    "minScore": 0.3,
    "hardMinScore": 0.35,
    "rerank": "cross-encoder",
    "rerankProvider": "jina",
    "rerankModel": "jina-reranker-v3",
    "rerankEndpoint": "https://api.jina.ai/v1/rerank",
    "rerankApiKey": "${JINA_API_KEY}",
    "candidatePoolSize": 20,
    "recencyHalfLifeDays": 14,
    "recencyWeight": 0.1,
    "filterNoise": true,
    "lengthNormAnchor": 500,
    "timeDecayHalfLifeDays": 60,
    "reinforcementFactor": 0.5,
    "maxHalfLifeMultiplier": 3
  },
  "scopes": {
    "default": "global",
    "definitions": {
      "global": { "description": "Shared knowledge" },
      "agent:discord-bot": { "description": "Discord bot private" }
    },
    "agentAccess": {
      "discord-bot": ["global", "agent:discord-bot"]
    }
  },
  "sessionStrategy": "none",
  "memoryReflection": {
    "storeToLanceDB": true,
    "injectMode": "inheritance+derived",
    "agentId": "memory-distiller",
    "messageCount": 120,
    "maxInputChars": 24000,
    "thinkLevel": "medium"
  },
  "selfImprovement": {
    "enabled": true,
    "beforeResetNote": true,
    "ensureLearningFiles": true
  },
  "mdMirror": { "enabled": false },
  "decay": {
    "recencyHalfLifeDays": 30,
    "recencyWeight": 0.4,
    "frequencyWeight": 0.3,
    "intrinsicWeight": 0.3,
    "betaCore": 0.8,
    "betaWorking": 1.0,
    "betaPeripheral": 1.3
  },
  "tier": {
    "coreAccessThreshold": 10,
    "coreCompositeThreshold": 0.7,
    "coreImportanceThreshold": 0.8,
    "workingAccessThreshold": 3,
    "workingCompositeThreshold": 0.4,
    "peripheralCompositeThreshold": 0.15,
    "peripheralAgeDays": 60
  }
}

設定フィールドのリファレンス

埋め込み
フィールド型デフォルト説明
apiKeystring—API キー(${ENV_VAR} に対応)。複数キーのフェイルオーバーには配列を使用します
modelstring—モデル識別子
baseURLstringプロバイダーのデフォルトAPI エンドポイント
dimensionsnumberプロバイダーのデフォルトベクトルの次元数
taskQuerystring—クエリ埋め込み用のタスクヒント(retrieval.query)
taskPassagestring—パッセージ埋め込み用のタスクヒント(retrieval.passage)
normalizedbooleanfalseL2 正規化された埋め込みをリクエストします
providerstringopenai-compatibleプロバイダー種別の選択
chunkingbooleantrue埋め込みコンテキストの上限を超えるドキュメントを自動的にチャンクに分割します
トップレベル
フィールド型デフォルト説明
dbPathstring~/.openclaw/memory/lancedb-proLanceDB のデータディレクトリ
autoCapturebooleantrueエージェントの返信後にメモリを自動抽出します(agent_end フック経由)
autoRecallbooleanfalse(スキーマのデフォルト)エージェントの処理前にメモリを挿入します — 明示的に true に設定してください
captureAssistantbooleanfalse抽出対象にアシスタントのメッセージを含めます
smartExtractionbooleantrueLLM を活用した 6 カテゴリーの抽出
extractMinMessagesnumber2抽出を開始するまでに必要な会話ターンの最小数
extractMaxCharsnumber8000抽出用 LLM に送信するコンテキストの最大文字数
enableManagementToolsbooleanfalseCLI 管理ツールをエージェントツールとして登録します
autoRecallMinLengthnumber15自動呼び出しを開始するプロンプトの最小文字数(CJK では 6)
autoRecallMinRepeatednumber0同一セッション内で同じメモリを再挿入できるようになるまでの最小ターン数
sessionStrategystringsystemSessionMemoryセッションパイプライン:memoryReflection / systemSessionMemory / none
LLM(スマート抽出用)
フィールド型デフォルト説明
llm.apiKeystringembedding.apiKey にフォールバックLLM API キー
llm.modelstringopenai/gpt-oss-120b抽出に使用する LLM モデル
llm.baseURLstringembedding.baseURL にフォールバックLLM エンドポイント
検索
フィールド型デフォルト説明
modestringhybridhybrid / vector(スキーマに bm25 のみのモードはありません)
vectorWeightnumber0.7ベクトル検索の重み
bm25Weightnumber0.3BM25 全文検索の重み
minScorenumber0.3関連性の最小しきい値
hardMinScorenumber0.35再ランキング後のハードカットオフ
rerankstringcross-encoder再ランキング方式:cross-encoder / lightweight / none
rerankProviderstringjinajina / siliconflow / voyage / pinecone / vllm(Docker Model Runner)
rerankModelstringjina-reranker-v3再ランキングモデル名
rerankEndpointstringプロバイダーのデフォルト再ランキング API の URL
rerankApiKeystring—再ランキング API キー
candidatePoolSizenumber20最終フィルターの前に再ランキングする候補数
recencyHalfLifeDaysnumber14鮮度減衰の半減期
recencyWeightnumber0.1スコアにおける新しさの重み
timeDecayHalfLifeDaysnumber60メモリの経過時間による減衰係数
reinforcementFactornumber0.5アクセスベースの半減期乗数(0~2、無効にするには 0 を設定)
maxHalfLifeMultipliernumber3強化によるブーストの上限
filterNoisebooleantrue拒否、あいさつなどを除外します
lengthNormAnchornumber500正規化の基準となる長さ(文字数)

アクセスによる強化に関する注意: 強化の対象は source: "manual" のみです。自動呼び出しではメモリは強化されず、ノイズの増幅を防ぎます。

セッション戦略(v1.1.0+)

sessionStrategy(トップレベルのフィールド)を使用して、セッションパイプラインを設定します。

値動作
"systemSessionMemory" (デフォルト)組み込みのセッションメモリ(よりシンプル)
"memoryReflection"継承/派生インジェクションを備えた、高度な LLM によるリフレクション
"none"セッションの要約を無効化

memoryReflection の設定(sessionStrategy: "memoryReflection" の場合に使用):

フィールド型デフォルト説明
storeToLanceDBbooleantrueリフレクションを LanceDB に永続化します
writeLegacyCombinedbooleantrue従来の統合行も書き込みます
injectModestringinheritance+derivedinheritance-only / inheritance+derived
agentIdstring—専用のリフレクションエージェント(例:"memory-distiller")
messageCountnumber120リフレクションに含めるメッセージ数
maxInputCharsnumber24000リフレクション LLM に送信する最大文字数
timeoutMsnumber20000リフレクション LLM のタイムアウト(ms)
thinkLevelstringmedium推論の深さ:off / minimal / low / medium / high
errorReminderMaxEntriesnumber3リフレクションにインジェクションするエラー項目の最大数
dedupeErrorSignalsbooleantrueインジェクション前にエラーシグナルを重複排除します

memoryReflection.recall サブオブジェクト(インジェクション対象として取得する過去のリフレクションを制御します):

フィールド型デフォルト説明
modestringfixed取得モード:fixed / dynamic
topKnumber6取得するリフレクション項目の最大数(最大 20)
includeKindsarray["invariant"]含める種類:invariant / derived
maxAgeDaysnumber45取得するリフレクションの最大経過日数
maxEntriesPerKeynumber10スコープキーごとの項目の最大数
minRepeatednumber2項目を含めるために必要な最小出現回数
minScorenumber0.18最小関連性スコア(範囲:0~5)
minPromptLengthnumber8取得を開始する最小プロンプト長
セッションメモリ(非推奨 — 従来との互換性のみ)

⚠️ sessionMemory は v1.1.0 以降、従来との互換性を保つための仕組みです。 代わりに sessionStrategy を使用してください。

  • sessionMemory.enabled: true → sessionStrategy: "systemSessionMemory" に対応します
  • sessionMemory.enabled: false → sessionStrategy: "none" に対応します
フィールド型デフォルト説明
sessionMemory.enabledbooleanfalse従来の設定:/new でセッションの要約を有効にします
sessionMemory.messageCountnumber15従来の設定:memoryReflection.messageCount に対応します
自己改善のガバナンス
フィールド型デフォルト説明
selfImprovement.enabledbooleantrue自己改善ツール(self_improvement_log など)を有効にします — デフォルトで有効
selfImprovement.beforeResetNotebooleantrueセッションをリセットする前に学習を促すリマインダーをインジェクションします
selfImprovement.skipSubagentBootstrapbooleantrueサブエージェントのブートストラップをスキップします
selfImprovement.ensureLearningFilesbooleantrueLEARNINGS.md / ERRORS.md が存在しない場合に自動作成します

ツールの有効化ルール:

  • self_improvement_log:selfImprovement.enabled: true が必要です(デフォルト — 明示的に無効化しない限り有効)
  • self_improvement_extract_skill + self_improvement_review:さらに enableManagementTools: true が必要です
Markdown ミラー
フィールド型デフォルト説明
mdMirror.enabledbooleanfalseメモリ項目を .md ファイルとしてミラーリングします
mdMirror.dirstring—Markdown ミラーファイル用のディレクトリ
減衰
フィールド型デフォルト説明
decay.recencyHalfLifeDaysnumber30Weibull 減衰の基本半減期
decay.recencyWeightnumber0.4ライフサイクルスコアにおける新しさの重み(retrieval.recencyWeight とは別)
decay.frequencyWeightnumber0.3アクセス頻度の重み
decay.intrinsicWeightnumber0.3重要度 × 信頼度の重み
decay.betaCorenumber0.8コアメモリの Weibull 形状パラメーター
decay.betaWorkingnumber1.0作業メモリの Weibull 形状パラメーター
decay.betaPeripheralnumber1.3周辺メモリの Weibull 形状パラメーター
decay.coreDecayFloornumber0.9コア階層のライフサイクルスコアの最小値
decay.workingDecayFloornumber0.7作業階層のライフサイクルスコアの最小値
decay.peripheralDecayFloornumber0.5周辺階層のライフサイクルスコアの最小値
decay.staleThresholdnumber0.3メモリが古いと見なされるスコアのしきい値
decay.searchBoostMinnumber0.3ライフサイクルスコアに適用される検索ブーストの最小値
decay.importanceModulationnumber1.5ライフサイクルスコアにおける重要度の倍率
階層管理
フィールド型デフォルト説明
tier.coreAccessThresholdnumber10コアへの昇格に必要なアクセス回数
tier.coreCompositeThresholdnumber0.7コアへの昇格に必要なライフサイクルスコア
tier.coreImportanceThresholdnumber0.8コアへの昇格に必要な重要度の最小値
tier.workingAccessThresholdnumber3作業階層への昇格に必要なアクセス回数
tier.workingCompositeThresholdnumber0.4作業階層への昇格に必要なライフサイクルスコア
tier.peripheralCompositeThresholdnumber0.15降格が発生するスコアのしきい値
tier.peripheralAgeDaysnumber60古いメモリの降格に用いる経過日数のしきい値

MCP ツール

コアツール(自動登録)

memory_recall — ハイブリッド検索で長期メモリを検索します

パラメーター型必須デフォルト備考
querystringyes—検索クエリ
limitnumberno5最大 20
scopestringno—検索対象の特定のスコープ
categoryenumno—preference|fact|decision|entity|reflection|other

memory_store — 情報を長期メモリに保存します

パラメーター型必須デフォルト備考
textstringyes—記憶する情報
importancenumberno0.7範囲 0–1
categoryenumno—メモリの分類
scopestringnoagent:<id>対象スコープ

memory_forget — 検索または直接 ID を指定してメモリを削除します

パラメーター型必須備考
querystringone ofメモリを特定する検索クエリ
memoryIdstringone of完全な UUID または 8 文字以上のプレフィックス
scopestringno検索/削除の対象スコープ

memory_update — メモリを更新します(元のタイムスタンプを保持します。preference/entity のテキスト更新では、履歴を保持する新しいバージョン付き行が作成されます)

パラメーター型必須備考
memoryIdstringyes完全な UUID または 8 文字以上のプレフィックス
textstringno新しい内容(再埋め込みを実行します。preference/entity では置き換えバージョンを作成します)
importancenumberno新しいスコア 0–1
categoryenumno新しい分類
管理ツール(enableManagementTools: true で有効化)

memory_stats — 使用統計

  • scope(string、任意):スコープで絞り込みます

memory_list — フィルタリングして最近のメモリを一覧表示します

  • limit(number、任意、デフォルト 10、最大 50)、scope、category、offset(ページネーション)
自己改善ツール

self_improvement_log はデフォルトで有効です(selfImprovement.enabled: true)。self_improvement_extract_skill と self_improvement_review を使用するには、さらに enableManagementTools: true が必要です。

self_improvement_log — 学習やエラーのエントリーを LEARNINGS.md / ERRORS.md に記録します

パラメーター型必須備考
typeenumはい"learning" または "error"
summarystringはい1 行の要約
detailsstringいいえ詳細なコンテキスト
suggestedActionstringいいえ再発防止のためのアクション
categorystringいいえ学習:correction|best_practice|knowledge_gap、エラー:correction|bug_fix|integration_issue
areastringいいえfrontend|backend|infra|tests|docs|config
prioritystringいいえlow|medium|high|critical

self_improvement_extract_skill — 学習エントリーからスキルのひな形を作成します

パラメーター型必須デフォルト備考
learningIdstringはい—形式は LRN-YYYYMMDD-001 または ERR-*
skillNamestringはい—小文字とハイフンを使用
sourceFileenumいいえLEARNINGS.mdLEARNINGS.md|ERRORS.md
outputDirstringいいえ"skills"相対出力ディレクトリ

self_improvement_review — ガバナンスのバックログを要約します(パラメーターなし)


スマート抽出

会話後に実行される、LLM を活用したメモリの自動分類と保存です。

有効化
{
  "smartExtraction": true,
  "extractMinMessages": 2,
  "extractMaxChars": 8000,
  "llm": {
    "apiKey": "${OPENAI_API_KEY}",
    "model": "gpt-4o-mini"
  }
}

最小構成(埋め込み API キーを再利用するため、llm ブロックは別途不要です):

{
  "embedding": { "apiKey": "${OPENAI_API_KEY}", "model": "text-embedding-3-small" },
  "smartExtraction": true
}

無効化:{ "smartExtraction": false }

6 カテゴリー分類
入力カテゴリー保存形式重複排除の動作
プロフィールfact常に統合(自動で集約)
好みpreference条件付きで統合
エンティティentity条件付きで統合
イベントdecision追記のみ(統合なし)
ケースfact追記のみ(統合なし)
パターンother条件付きで統合
メモリごとの L0/L1/L2 階層コンテンツ
  • L0(概要):1 文のインデックス(5 文字以上)
  • L1(概観):構造化された Markdown の要約
  • L2(コンテンツ):詳細を含む完全な説明
2 段階の重複排除
  1. ベクトル事前フィルター:類似度 ≥ 0.7 で候補を検索
  2. LLM の判定:CREATE | MERGE | SKIP | SUPPORT | CONTEXTUALIZE | CONTRADICT

埋め込みプロバイダー

プロバイダーモデルベース URL次元数備考
Jina(推奨)jina-embeddings-v5-text-smallhttps://api.jina.ai/v11024最新(2026年2月)、タスク対応 LoRA、32K コンテキスト
Jina(マルチモーダル)jina-embeddings-v4https://api.jina.ai/v11024テキスト+画像、Qwen2.5-VL バックボーン
OpenAItext-embedding-3-largehttps://api.openai.com/v13072OpenAI で最高品質(MTEB 64.6%)
OpenAItext-embedding-3-smallhttps://api.openai.com/v11536コスト効率に優れています
DashScope(Alibaba)text-embedding-v4https://dashscope.aliyuncs.com/compatible-mode/v11024中国語ユーザーに推奨。リランキングにも対応します(下記の注記を参照)
Google Geminigemini-embedding-2-previewhttps://generativelanguage.googleapis.com/v1beta/openai/3072最新(2026年3月)、マルチモーダル、100 以上の言語に対応
Google Geminigemini-embedding-001https://generativelanguage.googleapis.com/v1beta/openai/3072安定したテキスト専用モデル
Ollama(ローカル)mxbai-embed-largehttp://localhost:11434/v11024ローカルでの使用に推奨 — text-embedding-3-large を上回ります
Ollama(ローカル)snowflake-arctic-embed2http://localhost:11434/v11024ローカルで利用できる最良の多言語モデル
Ollama(ローカル)nomic-embed-text:v1.5http://localhost:11434/v1768軽量な定番モデル、270MB

DashScope のリランキングに関する注記: DashScope は rerankProvider の列挙値ではありませんが、そのリランキング API のレスポンスは Jina と互換性があります。DashScope のエンドポイントで rerankProvider: "jina" を使用してください:

"retrieval": {
  "rerank": "cross-encoder",
  "rerankProvider": "jina",
  "rerankModel": "qwen3-rerank",
  "rerankEndpoint": "https://dashscope.aliyuncs.com/compatible-api/v1/reranks",
  "rerankApiKey": "${DASHSCOPE_API_KEY}"
}

複数キーによるフェイルオーバー: 429/503 エラー時にラウンドロビン方式でローテーションするには、apiKey を配列として設定してください。


リランカープロバイダー

プロバイダーrerankProviderエンドポイントモデル備考
Jina(デフォルト)jinahttps://api.jina.ai/v1/rerankjina-reranker-v3最新のテキストリランカー(2025年、Qwen3 バックボーン、131K コンテキスト)
Jina(マルチモーダル)jinahttps://api.jina.ai/v1/rerankjina-reranker-m0マルチモーダル(テキスト+画像)。ドキュメントに画像が含まれる場合に使用してください
SiliconFlowsiliconflowhttps://api.siliconflow.com/v1/rerankBAAI/bge-reranker-v2-m3無料プランを利用可能
Voyage AIvoyagehttps://api.voyageai.com/v1/rerankrerank-2.5{model, query, documents} を送信します。top_n はありません
Pineconepineconehttps://api.pinecone.io/rerankbge-reranker-v2-m3Pinecone の顧客のみ利用可能
vLLM / Docker Model Runnervllmカスタムエンドポイント互換性のある任意のモデルDocker Model Runner を使用したセルフホスト

Jina のキーは、埋め込みとリランキングの両方で再利用できます。


複数スコープの分離

スコープ形式説明
globalすべてのエージェントで共有
agent:<id>エージェント固有のメモリー
custom:<name>カスタム名のスコープ
project:<id>プロジェクト固有のメモリー
user:<id>ユーザー固有のメモリー

デフォルトのアクセス範囲:global + agent:<id>。複数スコープを使用するには、scopes.agentAccess を明示的に設定する必要があります。上記の完全な設定を参照してください。

メモリーを完全に無効化する場合(プラグインを削除せずにスロットのバインドを解除します):

{ "plugins": { "slots": { "memory": "none" } } }

メモリーのライフサイクル(ワイブル減衰)

3 つのティア
ティア減衰の下限ベータ動作
コア0.90.8緩やかな劣指数的な低下
ワーキング0.71.0標準的な指数減衰(デフォルト)
周辺0.51.3急速な超指数的減衰
昇格/降格のルール
  • 周辺 → ワーキング: アクセス回数 ≥ 3 かつスコア ≥ 0.4
  • ワーキング → コア: アクセス回数 ≥ 10 かつスコア ≥ 0.7 かつ重要度 ≥ 0.8
  • ワーキング → 周辺: スコア < 0.15 または(経過日数 > 60 日かつアクセス回数 < 3)
  • コア → ワーキング: スコア < 0.15 かつアクセス回数 < 3

ハイブリッド検索

融合: weightedFusion = (vectorScore × 0.7) + (bm25Score × 0.3)

パイプライン: RRF 融合 → クロスエンコーダーによる再ランキング → ライフサイクル減衰ブースト → 長さの正規化 → 最小スコアの厳格適用 → MMR による多様性確保(コサイン類似度 > 0.85 は順位を下げます)

再ランキング: クロスエンコーダーのスコアを 60%、元の融合スコアを 40% の割合で使用します。API エラー時はコサイン類似度にフォールバックします。

特殊な BM25: 意味的類似度が低くても、完全一致するキーワード(BM25 ≥ 0.75)を保持します。これにより、API キーやチケット番号などが失われるのを防ぎます。


適応型検索のトリガー

スキップ対象: あいさつ、スラッシュコマンド、肯定(はい/わかりました/ありがとう)、会話の続き(どうぞ/続けて)、システムメッセージ、短いクエリ(英語で 15 文字未満/「?」を含まない CJK で 6 文字未満)。

強制対象: 記憶に関するキーワード(覚えている/思い出す/忘れた)、時間に関する参照(前回/以前/前に)、個人情報(私の名前/私のメールアドレス)、「私が何をしたか」という形式。CJK:「你记得」、「之前」。


ノイズのフィルタリング

自動フィルタリング対象:エージェントの否定表現、メタ質問(「覚えていますか?」)、セッション定型文(こんにちは/やあ)、診断用アーティファクト、埋め込みベースの一致(しきい値:0.82)。最小テキスト長:5 文字。


CLI コマンド

# List & search
openclaw memory-pro list [--scope global] [--category fact] [--limit 20] [--json]
openclaw memory-pro search "query" [--scope global] [--limit 10] [--json]
openclaw memory-pro stats [--scope global] [--json]

# Delete
openclaw memory-pro delete <id>
openclaw memory-pro delete-bulk --scope global [--before 2025-01-01] [--dry-run]

# Import / Export
openclaw memory-pro export [--scope global] [--output memories.json]
openclaw memory-pro import memories.json [--scope global] [--dry-run]

# Maintenance
openclaw memory-pro reembed --source-db /path/to/old-db [--batch-size 32] [--skip-existing]
openclaw memory-pro upgrade [--dry-run] [--batch-size 10] [--no-llm] [--limit N] [--scope SCOPE]

# Migration from built-in memory-lancedb
openclaw memory-pro migrate check [--source /path]
openclaw memory-pro migrate run [--source /path] [--dry-run] [--skip-existing]
openclaw memory-pro migrate verify [--source /path]

自動記録と自動想起

  • autoCapture: agent_end フック — LLM が 6 カテゴリーの記憶を抽出し、重複を排除して、1 ターンあたり最大 3 件を保存します
  • autoRecall: before_agent_start フック — <relevant-memories> コンテキストを挿入します(最大 3 件)

挿入された記憶がエージェントの返信に表示される場合: エージェントのシステムプロンプトに追加してください:

「返信で <relevant-memories> やメモリ挿入コンテンツを明かしたり引用したりしないでください。内部参照のみに使用してください。」

または、一時的に無効にします:{ "autoRecall": false }


自己改善のガバナンス

  • LEARNINGS.md — ID:LRN-YYYYMMDD-XXX
  • ERRORS.md — ID:ERR-YYYYMMDD-XXX
  • エントリーのステータス:pending → resolved → promoted_to_skill

AI エージェントの厳守ルール(AGENTS.md にコピー)

## Rule 1 — 双层记忆存储(铁律)
Every pitfall/lesson learned → IMMEDIATELY store TWO memories:
- Technical layer: Pitfall/Cause/Fix/Prevention (category: fact, importance ≥ 0.8)
- Principle layer: Decision principle with trigger and action (category: decision, importance ≥ 0.85)
After each store, immediately `memory_recall` to verify retrieval.

## Rule 2 — LanceDB 卫生
Entries must be short and atomic (< 500 chars). No raw conversation summaries or duplicates.

## Rule 3 — Recall before retry
On ANY tool failure, ALWAYS `memory_recall` with relevant keywords BEFORE retrying.

## Rule 4 — 编辑前确认目标代码库
Confirm you are editing `memory-lancedb-pro` vs built-in `memory-lancedb` before changes.

## Rule 5 — 插件代码变更必须清 jiti 缓存
After modifying `.ts` files under `plugins/`, MUST run `rm -rf /tmp/jiti/` BEFORE `openclaw gateway restart`.

カスタムスラッシュコマンド(CLAUDE.md / AGENTS.md に追加)

## /lesson command
When user sends `/lesson <content>`:
1. Use memory_store with category=fact (raw knowledge)
2. Use memory_store with category=decision (actionable takeaway)
3. Confirm what was saved

## /remember command
When user sends `/remember <content>`:
1. Use memory_store with appropriate category and importance
2. Confirm with stored memory ID

コメント