メインコンテンツへスキップ
memory-lancedb は、長期メモリを LanceDB に保存し、想起に埋め込みを使用する公式の外部メモリプラグインです。モデルターンの前に関連するメモリを自動的に想起し、応答後に重要な事実を取得できます。 メモリ用のローカルベクトルデータベースが必要な場合、OpenAI 互換の埋め込みエンドポイントが必要な場合、またはデフォルトの組み込みメモリストアの外部にメモリデータベースを保持したい場合に使用します。

インストール

plugins.slots.memory = "memory-lancedb" を設定する前に memory-lancedb をインストールします。
openclaw plugins install @openclaw/memory-lancedb
このプラグインは npm に公開されており、OpenClaw ランタイムイメージにはバンドルされていません。インストーラーはプラグインエントリを書き込み、他のプラグインが所有していない場合にメモリスロットを切り替えます。
memory-lancedb はアクティブメモリプラグインです。plugins.slots.memory = "memory-lancedb" でメモリスロットを選択して有効にします。memory-wiki などのコンパニオンプラグインは並行して実行できますが、アクティブメモリスロットを所有できるプラグインは 1 つだけです。

クイックスタート

{
  plugins: {
    slots: {
      memory: "memory-lancedb",
    },
    entries: {
      "memory-lancedb": {
        enabled: true,
        config: {
          embedding: {
            provider: "openai",
            model: "text-embedding-3-small",
          },
          autoRecall: true,
          autoCapture: false,
        },
      },
    },
  },
}
プラグイン設定を変更した後、Gateway を再起動します。
openclaw gateway restart
次に、プラグインが読み込まれていることを確認します。
openclaw plugins list

プロバイダーを利用する埋め込み

memory-lancedbmemory-core と同じメモリ埋め込みプロバイダーアダプターを使用できます。プロバイダーの設定済み認証プロファイル、環境変数、または models.providers.<provider>.apiKey を使用するには、embedding.provider を設定し、embedding.apiKey を省略します。
{
  plugins: {
    slots: {
      memory: "memory-lancedb",
    },
    entries: {
      "memory-lancedb": {
        enabled: true,
        config: {
          embedding: {
            provider: "openai",
            model: "text-embedding-3-small",
          },
          autoRecall: true,
        },
      },
    },
  },
}
このパスは、埋め込み認証情報を公開するプロバイダー認証プロファイルで動作します。たとえば、Copilot のプロファイル/プランが埋め込みをサポートしている場合、GitHub Copilot を使用できます。
{
  plugins: {
    slots: {
      memory: "memory-lancedb",
    },
    entries: {
      "memory-lancedb": {
        enabled: true,
        config: {
          embedding: {
            provider: "github-copilot",
            model: "text-embedding-3-small",
          },
        },
      },
    },
  },
}
OpenAI Codex / ChatGPT OAuth は OpenAI Platform の埋め込み認証情報ではありません。OpenAI の埋め込みには、OpenAI API キー認証プロファイル、OPENAI_API_KEY、または models.providers.openai.apiKey を使用します。OAuth のみのユーザーは、GitHub Copilot や Ollama などの別の埋め込み対応プロバイダーを使用できます。

Ollama 埋め込み

Ollama 埋め込みには、バンドルされた Ollama 埋め込みプロバイダーを推奨します。これはネイティブの Ollama /api/embed エンドポイントを使用し、Ollama に記載されている Ollama プロバイダーと同じ認証/base URL ルールに従います。
{
  plugins: {
    slots: {
      memory: "memory-lancedb",
    },
    entries: {
      "memory-lancedb": {
        enabled: true,
        config: {
          embedding: {
            provider: "ollama",
            baseUrl: "http://127.0.0.1:11434",
            model: "mxbai-embed-large",
            dimensions: 1024,
          },
          recallMaxChars: 400,
          autoRecall: true,
          autoCapture: false,
        },
      },
    },
  },
}
標準ではない埋め込みモデルには dimensions を設定します。OpenClaw は text-embedding-3-smalltext-embedding-3-large の次元数を把握しています。カスタムモデルでは、LanceDB がベクトル列を作成できるように設定で値を指定する必要があります。 小さなローカル埋め込みモデルでは、ローカルサーバーからコンテキスト長エラーが出る場合、recallMaxChars を下げます。

OpenAI 互換プロバイダー

OpenAI 互換の埋め込みプロバイダーの中には encoding_format パラメーターを拒否するものがある一方、これを無視して常に number[] ベクトルを返すものもあります。そのため memory-lancedb は埋め込みリクエストで encoding_format を省略し、float 配列のレスポンスと base64 エンコードされた float32 レスポンスのどちらも受け付けます。 バンドルされたプロバイダーアダプターがない生の OpenAI 互換埋め込みエンドポイントがある場合は、embedding.provider を省略し(または openai のままにし)、embedding.apiKeyembedding.baseUrl を設定します。これにより、直接の OpenAI 互換クライアントパスが維持されます。 モデルの次元数が組み込まれていないプロバイダーには embedding.dimensions を設定します。たとえば、ZhiPu embedding-32048 次元を使用します。
{
  plugins: {
    entries: {
      "memory-lancedb": {
        enabled: true,
        config: {
          embedding: {
            apiKey: "${ZHIPU_API_KEY}",
            baseUrl: "https://open.bigmodel.cn/api/paas/v4",
            model: "embedding-3",
            dimensions: 2048,
          },
        },
      },
    },
  },
}

想起と取得の制限

memory-lancedb には 2 つの独立したテキスト制限があります。
設定デフォルト範囲適用先
recallMaxChars1000100-10000想起のために埋め込み API に送信されるテキスト
captureMaxChars500100-10000自動取得の対象になるメッセージ長
customTriggers[]0-50自動取得がメッセージを検討するきっかけになるリテラルフレーズ
recallMaxChars は、自動想起、memory_recall ツール、memory_forget クエリパス、openclaw ltm search を制御します。自動想起はターン内の最新のユーザーメッセージを優先し、ユーザーメッセージがない場合にのみプロンプト全体へフォールバックします。これにより、チャンネルメタデータや大きなプロンプトブロックが埋め込みリクエストに入らないようにします。 captureMaxChars は、応答が自動取得の候補として十分短いかどうかを制御します。想起クエリの埋め込みは制限しません。 customTriggers を使うと、正規表現を書かずにリテラルの自動取得フレーズを追加できます。組み込みトリガーには、一般的な英語、チェコ語、中国語、日本語、韓国語のメモリフレーズが含まれます。

コマンド

memory-lancedb がアクティブなメモリプラグインである場合、ltm CLI 名前空間を登録します。
openclaw ltm list
openclaw ltm search "project preferences"
openclaw ltm stats
query サブコマンドは、LanceDB テーブルに対して非ベクトルクエリを直接実行します。
openclaw ltm query --cols id,text,createdAt --limit 20
openclaw ltm query --filter "category = 'preference'" --order-by createdAt:desc
  • --cols <columns>: カンマ区切りの列許可リスト(デフォルトは id, text, importance, category, createdAt)。
  • --filter <condition>: SQL 形式の WHERE 句。200 文字に制限され、英数字、比較演算子、引用符、括弧、および少数の安全な句読点に制限されます。
  • --limit <n>: 正の整数。デフォルトは 10
  • --order-by <column>:<asc|desc>: フィルター後に適用されるメモリ内ソート。ソート列は投影に自動的に含まれます。
エージェントは、アクティブなメモリプラグインから LanceDB メモリツールも取得します。
  • LanceDB による想起用の memory_recall
  • 重要な事実、設定、決定、エンティティを保存するための memory_store
  • 一致するメモリを削除するための memory_forget

ストレージ

デフォルトでは、LanceDB データは ~/.openclaw/memory/lancedb 配下に置かれます。dbPath でパスを上書きできます。
{
  plugins: {
    entries: {
      "memory-lancedb": {
        enabled: true,
        config: {
          dbPath: "~/.openclaw/memory/lancedb",
          embedding: {
            apiKey: "${OPENAI_API_KEY}",
            model: "text-embedding-3-small",
          },
        },
      },
    },
  },
}
storageOptions は LanceDB ストレージバックエンド用の文字列 key/value ペアを受け付け、${ENV_VAR} 展開をサポートします。
{
  plugins: {
    entries: {
      "memory-lancedb": {
        enabled: true,
        config: {
          dbPath: "s3://memory-bucket/openclaw",
          storageOptions: {
            access_key: "${AWS_ACCESS_KEY_ID}",
            secret_key: "${AWS_SECRET_ACCESS_KEY}",
            endpoint: "${AWS_ENDPOINT_URL}",
          },
          embedding: {
            apiKey: "${OPENAI_API_KEY}",
            model: "text-embedding-3-small",
          },
        },
      },
    },
  },
}

ランタイム依存関係

memory-lancedb はネイティブの @lancedb/lancedb パッケージに依存します。パッケージ化された OpenClaw は、そのパッケージをプラグインパッケージの一部として扱います。Gateway 起動時にプラグイン依存関係は修復されません。依存関係がない場合は、プラグインパッケージを再インストールまたは更新し、Gateway を再起動してください。 古いインストールでプラグイン読み込み中に dist/package.json がない、または @lancedb/lancedb がないというエラーがログに出る場合は、OpenClaw をアップグレードして Gateway を再起動します。 プラグインが darwin-x64 で LanceDB を利用できないとログに出す場合は、そのマシンでデフォルトのメモリバックエンドを使用するか、Gateway をサポート対象プラットフォームへ移すか、memory-lancedb を無効にします。

トラブルシューティング

入力長がコンテキスト長を超えています

これは通常、埋め込みモデルが想起クエリを拒否したことを意味します。
memory-lancedb: recall failed: Error: 400 the input length exceeds the context length
recallMaxChars を低めに設定し、Gateway を再起動します。
{
  plugins: {
    entries: {
      "memory-lancedb": {
        config: {
          recallMaxChars: 400,
        },
      },
    },
  },
}
Ollama の場合は、埋め込みサーバーが Gateway ホストから到達可能であることも確認します。
curl http://127.0.0.1:11434/v1/embeddings \
  -H "Content-Type: application/json" \
  -d '{"model":"mxbai-embed-large","input":"hello"}'

サポートされていない埋め込みモデル

dimensions がない場合、組み込みの OpenAI 埋め込み次元のみが既知です。ローカルまたはカスタムの埋め込みモデルでは、そのモデルが報告するベクトルサイズに embedding.dimensions を設定します。

プラグインは読み込まれるがメモリが表示されない

plugins.slots.memorymemory-lancedb を指していることを確認してから、次を実行します。
openclaw ltm stats
openclaw ltm search "recent preference"
autoCapture が無効な場合、プラグインは既存のメモリを想起しますが、新しいメモリは自動的に保存しません。自動取得したい場合は、memory_store ツールを使用するか、autoCapture を有効にします。

関連