memory-lancedb-pro について
OpenClaw の AI エージェント向け長期記憶スキルで、情報の永続保存と検索に使えます。LanceDB、ベクトルと BM25 のハイブリッド検索、LLM による抽出、減衰ライフサイクル、スコープ分離を備えています。
主な機能
- 01LanceDB による永続記憶
- 02ベクトルと BM25 のハイブリッド検索
- 03LLM によるスマート抽出
- 04Weibull 減衰ライフサイクル
- 05マルチスコープ分離
活用シーン
- 01エージェントのセッションをまたいだ情報保持
- 02語句とベクトル検索による記憶の検索
- 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つのメッセージで以下を尋ねてください。
- 選択したプランで必要な API キーを入力してください(そのまま貼り付けるか、「すでに環境変数に設定済み」と回答してください)
- 環境変数は OpenClaw Gateway プロセスにすでに設定されていますか?(わからない場合は「いいえ」と回答してください)
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 enabledmemory-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
次に、簡単なスモークテストを実行します:
- 保存:
text: "test memory for verification"を指定してmemory_storeを呼び出す - 想起:
query: "test memory"を指定してmemory_recallを呼び出す - メモリが返されることを確認する
インストール
クイックインストール(初心者向け)
初めてのユーザーには、コミュニティ提供のワンクリックインストーラーがおすすめです。パスの検出、スキーマの検証、自動更新、プロバイダーの選択、ロールバックをすべて自動で処理します。
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 enabledmemory-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 のみです。まず形式を変換する必要があります。
手動で変換する方法:
- メモリを含む Markdown ファイルを開きます
- 各メモリエントリーについて、
text、category、importanceを含む JSON オブジェクトを作成します - 上記のスキーマに従って JSON ファイルとして保存します
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 --all | npm でインストールしたすべてのプラグインを一括更新する場合 |
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
見落としやすいセットアップ手順
- 変更後は必ずゲートウェイを再起動してください:インストール、有効化、無効化、更新、または
openclaw.jsonの設定変更後は、必ずopenclaw gateway restartを実行してください。変更はホットリロードされません。 - ワークスペースのプラグインはデフォルトで無効です:git clone の後、必ず
plugins.allow: ["memory-lancedb-pro"]とplugins.entries.memory-lancedb-pro.enabled: trueを追加してください。これらがないと、プラグインは読み込まれず、エラーも表示されません。 - ゲートウェイプロセス内の環境変数:
${OPENAI_API_KEY}を使用するには、シェルだけでなく、OpenClaw Gateway サービスのプロセスで環境変数を設定する必要があります。 - 絶対パスと相対パス:既存のデプロイでは、
plugins.load.pathsに必ず絶対パスを使用してください。 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と混同しないでください。- jiti キャッシュの無効化:プラグイン配下の
.tsファイルを変更した後は、openclaw gateway restartの前にrm -rf /tmp/jiti/を実行してください。 - 不明なプラグイン ID はエラーになります:OpenClaw は、
entries、allow、deny、slots内の不明な ID を検証エラーとして扱います。参照する前に、プラグイン ID を検出できる状態にしておく必要があります。 - LLM 設定は個別に指定してください:埋め込みと LLM で異なるプロバイダーを使用する場合は、
llmセクションを個別に設定してください。設定しない場合、埋め込みのキーと URL が使用されます。 - スコープの分離:複数のスコープを使用するには、
scopes.agentAccessマッピングを明示的に設定する必要があります。設定しない場合、エージェントからはglobalスコープのみが見えます。 - セッションメモリのフック:
/newコマンドで実行されます。実際に/newを実行してテストしてください。 - 再ランキングの認証情報:プロバイダーを切り替える場合は、
rerankApiKeyとrerankEndpointの両方を更新してください。 - デフォルト値を想定する前に設定を確認してください:
openclaw config get plugins.entries.memory-lancedb-proを実行して、実際に読み込まれている設定を確認してください。 - 環境変数によるカスタム設定/状態パス: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: false | plugins.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
}
}
設定フィールドのリファレンス
埋め込み
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
apiKey | string | — | API キー(${ENV_VAR} に対応)。複数キーのフェイルオーバーには配列を使用します |
model | string | — | モデル識別子 |
baseURL | string | プロバイダーのデフォルト | API エンドポイント |
dimensions | number | プロバイダーのデフォルト | ベクトルの次元数 |
taskQuery | string | — | クエリ埋め込み用のタスクヒント(retrieval.query) |
taskPassage | string | — | パッセージ埋め込み用のタスクヒント(retrieval.passage) |
normalized | boolean | false | L2 正規化された埋め込みをリクエストします |
provider | string | openai-compatible | プロバイダー種別の選択 |
chunking | boolean | true | 埋め込みコンテキストの上限を超えるドキュメントを自動的にチャンクに分割します |
トップレベル
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
dbPath | string | ~/.openclaw/memory/lancedb-pro | LanceDB のデータディレクトリ |
autoCapture | boolean | true | エージェントの返信後にメモリを自動抽出します(agent_end フック経由) |
autoRecall | boolean | false(スキーマのデフォルト) | エージェントの処理前にメモリを挿入します — 明示的に true に設定してください |
captureAssistant | boolean | false | 抽出対象にアシスタントのメッセージを含めます |
smartExtraction | boolean | true | LLM を活用した 6 カテゴリーの抽出 |
extractMinMessages | number | 2 | 抽出を開始するまでに必要な会話ターンの最小数 |
extractMaxChars | number | 8000 | 抽出用 LLM に送信するコンテキストの最大文字数 |
enableManagementTools | boolean | false | CLI 管理ツールをエージェントツールとして登録します |
autoRecallMinLength | number | 15 | 自動呼び出しを開始するプロンプトの最小文字数(CJK では 6) |
autoRecallMinRepeated | number | 0 | 同一セッション内で同じメモリを再挿入できるようになるまでの最小ターン数 |
sessionStrategy | string | systemSessionMemory | セッションパイプライン:memoryReflection / systemSessionMemory / none |
LLM(スマート抽出用)
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
llm.apiKey | string | embedding.apiKey にフォールバック | LLM API キー |
llm.model | string | openai/gpt-oss-120b | 抽出に使用する LLM モデル |
llm.baseURL | string | embedding.baseURL にフォールバック | LLM エンドポイント |
検索
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
mode | string | hybrid | hybrid / vector(スキーマに bm25 のみのモードはありません) |
vectorWeight | number | 0.7 | ベクトル検索の重み |
bm25Weight | number | 0.3 | BM25 全文検索の重み |
minScore | number | 0.3 | 関連性の最小しきい値 |
hardMinScore | number | 0.35 | 再ランキング後のハードカットオフ |
rerank | string | cross-encoder | 再ランキング方式:cross-encoder / lightweight / none |
rerankProvider | string | jina | jina / siliconflow / voyage / pinecone / vllm(Docker Model Runner) |
rerankModel | string | jina-reranker-v3 | 再ランキングモデル名 |
rerankEndpoint | string | プロバイダーのデフォルト | 再ランキング API の URL |
rerankApiKey | string | — | 再ランキング API キー |
candidatePoolSize | number | 20 | 最終フィルターの前に再ランキングする候補数 |
recencyHalfLifeDays | number | 14 | 鮮度減衰の半減期 |
recencyWeight | number | 0.1 | スコアにおける新しさの重み |
timeDecayHalfLifeDays | number | 60 | メモリの経過時間による減衰係数 |
reinforcementFactor | number | 0.5 | アクセスベースの半減期乗数(0~2、無効にするには 0 を設定) |
maxHalfLifeMultiplier | number | 3 | 強化によるブーストの上限 |
filterNoise | boolean | true | 拒否、あいさつなどを除外します |
lengthNormAnchor | number | 500 | 正規化の基準となる長さ(文字数) |
アクセスによる強化に関する注意: 強化の対象は source: "manual" のみです。自動呼び出しではメモリは強化されず、ノイズの増幅を防ぎます。
セッション戦略(v1.1.0+)
sessionStrategy(トップレベルのフィールド)を使用して、セッションパイプラインを設定します。
| 値 | 動作 |
|---|---|
"systemSessionMemory" (デフォルト) | 組み込みのセッションメモリ(よりシンプル) |
"memoryReflection" | 継承/派生インジェクションを備えた、高度な LLM によるリフレクション |
"none" | セッションの要約を無効化 |
memoryReflection の設定(sessionStrategy: "memoryReflection" の場合に使用):
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
storeToLanceDB | boolean | true | リフレクションを LanceDB に永続化します |
writeLegacyCombined | boolean | true | 従来の統合行も書き込みます |
injectMode | string | inheritance+derived | inheritance-only / inheritance+derived |
agentId | string | — | 専用のリフレクションエージェント(例:"memory-distiller") |
messageCount | number | 120 | リフレクションに含めるメッセージ数 |
maxInputChars | number | 24000 | リフレクション LLM に送信する最大文字数 |
timeoutMs | number | 20000 | リフレクション LLM のタイムアウト(ms) |
thinkLevel | string | medium | 推論の深さ:off / minimal / low / medium / high |
errorReminderMaxEntries | number | 3 | リフレクションにインジェクションするエラー項目の最大数 |
dedupeErrorSignals | boolean | true | インジェクション前にエラーシグナルを重複排除します |
memoryReflection.recall サブオブジェクト(インジェクション対象として取得する過去のリフレクションを制御します):
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
mode | string | fixed | 取得モード:fixed / dynamic |
topK | number | 6 | 取得するリフレクション項目の最大数(最大 20) |
includeKinds | array | ["invariant"] | 含める種類:invariant / derived |
maxAgeDays | number | 45 | 取得するリフレクションの最大経過日数 |
maxEntriesPerKey | number | 10 | スコープキーごとの項目の最大数 |
minRepeated | number | 2 | 項目を含めるために必要な最小出現回数 |
minScore | number | 0.18 | 最小関連性スコア(範囲:0~5) |
minPromptLength | number | 8 | 取得を開始する最小プロンプト長 |
セッションメモリ(非推奨 — 従来との互換性のみ)
⚠️
sessionMemoryは v1.1.0 以降、従来との互換性を保つための仕組みです。 代わりにsessionStrategyを使用してください。
sessionMemory.enabled: true→sessionStrategy: "systemSessionMemory"に対応しますsessionMemory.enabled: false→sessionStrategy: "none"に対応します
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
sessionMemory.enabled | boolean | false | 従来の設定:/new でセッションの要約を有効にします |
sessionMemory.messageCount | number | 15 | 従来の設定:memoryReflection.messageCount に対応します |
自己改善のガバナンス
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
selfImprovement.enabled | boolean | true | 自己改善ツール(self_improvement_log など)を有効にします — デフォルトで有効 |
selfImprovement.beforeResetNote | boolean | true | セッションをリセットする前に学習を促すリマインダーをインジェクションします |
selfImprovement.skipSubagentBootstrap | boolean | true | サブエージェントのブートストラップをスキップします |
selfImprovement.ensureLearningFiles | boolean | true | LEARNINGS.md / ERRORS.md が存在しない場合に自動作成します |
ツールの有効化ルール:
self_improvement_log:selfImprovement.enabled: trueが必要です(デフォルト — 明示的に無効化しない限り有効)self_improvement_extract_skill+self_improvement_review:さらにenableManagementTools: trueが必要です
Markdown ミラー
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
mdMirror.enabled | boolean | false | メモリ項目を .md ファイルとしてミラーリングします |
mdMirror.dir | string | — | Markdown ミラーファイル用のディレクトリ |
減衰
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
decay.recencyHalfLifeDays | number | 30 | Weibull 減衰の基本半減期 |
decay.recencyWeight | number | 0.4 | ライフサイクルスコアにおける新しさの重み(retrieval.recencyWeight とは別) |
decay.frequencyWeight | number | 0.3 | アクセス頻度の重み |
decay.intrinsicWeight | number | 0.3 | 重要度 × 信頼度の重み |
decay.betaCore | number | 0.8 | コアメモリの Weibull 形状パラメーター |
decay.betaWorking | number | 1.0 | 作業メモリの Weibull 形状パラメーター |
decay.betaPeripheral | number | 1.3 | 周辺メモリの Weibull 形状パラメーター |
decay.coreDecayFloor | number | 0.9 | コア階層のライフサイクルスコアの最小値 |
decay.workingDecayFloor | number | 0.7 | 作業階層のライフサイクルスコアの最小値 |
decay.peripheralDecayFloor | number | 0.5 | 周辺階層のライフサイクルスコアの最小値 |
decay.staleThreshold | number | 0.3 | メモリが古いと見なされるスコアのしきい値 |
decay.searchBoostMin | number | 0.3 | ライフサイクルスコアに適用される検索ブーストの最小値 |
decay.importanceModulation | number | 1.5 | ライフサイクルスコアにおける重要度の倍率 |
階層管理
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
tier.coreAccessThreshold | number | 10 | コアへの昇格に必要なアクセス回数 |
tier.coreCompositeThreshold | number | 0.7 | コアへの昇格に必要なライフサイクルスコア |
tier.coreImportanceThreshold | number | 0.8 | コアへの昇格に必要な重要度の最小値 |
tier.workingAccessThreshold | number | 3 | 作業階層への昇格に必要なアクセス回数 |
tier.workingCompositeThreshold | number | 0.4 | 作業階層への昇格に必要なライフサイクルスコア |
tier.peripheralCompositeThreshold | number | 0.15 | 降格が発生するスコアのしきい値 |
tier.peripheralAgeDays | number | 60 | 古いメモリの降格に用いる経過日数のしきい値 |
MCP ツール
コアツール(自動登録)
memory_recall — ハイブリッド検索で長期メモリを検索します
| パラメーター | 型 | 必須 | デフォルト | 備考 |
|---|---|---|---|---|
query | string | yes | — | 検索クエリ |
limit | number | no | 5 | 最大 20 |
scope | string | no | — | 検索対象の特定のスコープ |
category | enum | no | — | preference|fact|decision|entity|reflection|other |
memory_store — 情報を長期メモリに保存します
| パラメーター | 型 | 必須 | デフォルト | 備考 |
|---|---|---|---|---|
text | string | yes | — | 記憶する情報 |
importance | number | no | 0.7 | 範囲 0–1 |
category | enum | no | — | メモリの分類 |
scope | string | no | agent:<id> | 対象スコープ |
memory_forget — 検索または直接 ID を指定してメモリを削除します
| パラメーター | 型 | 必須 | 備考 |
|---|---|---|---|
query | string | one of | メモリを特定する検索クエリ |
memoryId | string | one of | 完全な UUID または 8 文字以上のプレフィックス |
scope | string | no | 検索/削除の対象スコープ |
memory_update — メモリを更新します(元のタイムスタンプを保持します。preference/entity のテキスト更新では、履歴を保持する新しいバージョン付き行が作成されます)
| パラメーター | 型 | 必須 | 備考 |
|---|---|---|---|
memoryId | string | yes | 完全な UUID または 8 文字以上のプレフィックス |
text | string | no | 新しい内容(再埋め込みを実行します。preference/entity では置き換えバージョンを作成します) |
importance | number | no | 新しいスコア 0–1 |
category | enum | no | 新しい分類 |
管理ツール(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 に記録します
| パラメーター | 型 | 必須 | 備考 |
|---|---|---|---|
type | enum | はい | "learning" または "error" |
summary | string | はい | 1 行の要約 |
details | string | いいえ | 詳細なコンテキスト |
suggestedAction | string | いいえ | 再発防止のためのアクション |
category | string | いいえ | 学習:correction|best_practice|knowledge_gap、エラー:correction|bug_fix|integration_issue |
area | string | いいえ | frontend|backend|infra|tests|docs|config |
priority | string | いいえ | low|medium|high|critical |
self_improvement_extract_skill — 学習エントリーからスキルのひな形を作成します
| パラメーター | 型 | 必須 | デフォルト | 備考 |
|---|---|---|---|---|
learningId | string | はい | — | 形式は LRN-YYYYMMDD-001 または ERR-* |
skillName | string | はい | — | 小文字とハイフンを使用 |
sourceFile | enum | いいえ | LEARNINGS.md | LEARNINGS.md|ERRORS.md |
outputDir | string | いいえ | "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 段階の重複排除
- ベクトル事前フィルター:類似度 ≥ 0.7 で候補を検索
- LLM の判定:
CREATE | MERGE | SKIP | SUPPORT | CONTEXTUALIZE | CONTRADICT
埋め込みプロバイダー
| プロバイダー | モデル | ベース URL | 次元数 | 備考 |
|---|---|---|---|---|
| Jina(推奨) | jina-embeddings-v5-text-small | https://api.jina.ai/v1 | 1024 | 最新(2026年2月)、タスク対応 LoRA、32K コンテキスト |
| Jina(マルチモーダル) | jina-embeddings-v4 | https://api.jina.ai/v1 | 1024 | テキスト+画像、Qwen2.5-VL バックボーン |
| OpenAI | text-embedding-3-large | https://api.openai.com/v1 | 3072 | OpenAI で最高品質(MTEB 64.6%) |
| OpenAI | text-embedding-3-small | https://api.openai.com/v1 | 1536 | コスト効率に優れています |
| DashScope(Alibaba) | text-embedding-v4 | https://dashscope.aliyuncs.com/compatible-mode/v1 | 1024 | 中国語ユーザーに推奨。リランキングにも対応します(下記の注記を参照) |
| Google Gemini | gemini-embedding-2-preview | https://generativelanguage.googleapis.com/v1beta/openai/ | 3072 | 最新(2026年3月)、マルチモーダル、100 以上の言語に対応 |
| Google Gemini | gemini-embedding-001 | https://generativelanguage.googleapis.com/v1beta/openai/ | 3072 | 安定したテキスト専用モデル |
| Ollama(ローカル) | mxbai-embed-large | http://localhost:11434/v1 | 1024 | ローカルでの使用に推奨 — text-embedding-3-large を上回ります |
| Ollama(ローカル) | snowflake-arctic-embed2 | http://localhost:11434/v1 | 1024 | ローカルで利用できる最良の多言語モデル |
| Ollama(ローカル) | nomic-embed-text:v1.5 | http://localhost:11434/v1 | 768 | 軽量な定番モデル、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(デフォルト) | jina | https://api.jina.ai/v1/rerank | jina-reranker-v3 | 最新のテキストリランカー(2025年、Qwen3 バックボーン、131K コンテキスト) |
| Jina(マルチモーダル) | jina | https://api.jina.ai/v1/rerank | jina-reranker-m0 | マルチモーダル(テキスト+画像)。ドキュメントに画像が含まれる場合に使用してください |
| SiliconFlow | siliconflow | https://api.siliconflow.com/v1/rerank | BAAI/bge-reranker-v2-m3 | 無料プランを利用可能 |
| Voyage AI | voyage | https://api.voyageai.com/v1/rerank | rerank-2.5 | {model, query, documents} を送信します。top_n はありません |
| Pinecone | pinecone | https://api.pinecone.io/rerank | bge-reranker-v2-m3 | Pinecone の顧客のみ利用可能 |
| vLLM / Docker Model Runner | vllm | カスタムエンドポイント | 互換性のある任意のモデル | Docker Model Runner を使用したセルフホスト |
Jina のキーは、埋め込みとリランキングの両方で再利用できます。
複数スコープの分離
| スコープ形式 | 説明 |
|---|---|
global | すべてのエージェントで共有 |
agent:<id> | エージェント固有のメモリー |
custom:<name> | カスタム名のスコープ |
project:<id> | プロジェクト固有のメモリー |
user:<id> | ユーザー固有のメモリー |
デフォルトのアクセス範囲:global + agent:<id>。複数スコープを使用するには、scopes.agentAccess を明示的に設定する必要があります。上記の完全な設定を参照してください。
メモリーを完全に無効化する場合(プラグインを削除せずにスロットのバインドを解除します):
{ "plugins": { "slots": { "memory": "none" } } }
メモリーのライフサイクル(ワイブル減衰)
3 つのティア
| ティア | 減衰の下限 | ベータ | 動作 |
|---|---|---|---|
| コア | 0.9 | 0.8 | 緩やかな劣指数的な低下 |
| ワーキング | 0.7 | 1.0 | 標準的な指数減衰(デフォルト) |
| 周辺 | 0.5 | 1.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-XXXERRORS.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