不明な memory embedding provider: ollama — v2026.4.x でのレグレッション
OpenClawは、ollama providerで構成されている場合、memory embeddingsの初期化に失敗し、'Unknown memory embedding provider: ollama'エラーをスローします。これはprovider registryのレグレッションによるものです。
🔍 症状
OpenClawのメモリサブシステムが、ollamaをエンベッディングプロバイダーとして使用時に初期化に失敗します。エラーはCLIとゲートウェイランタイムの両方で同一に現れます。
- CLI実行の失敗:
$ openclaw memory status
🦞 OpenClaw 2026.4.8 (9ece252) — iMessage green bubble energy, but for everyone.
[openclaw] Failed to start CLI: Error: Unknown memory embedding provider: ollama
at getAdapter (file:///home/openclaw/.npm-global/lib/node_modules/openclaw/dist/manager-BRmgtjii.js:317:22)
at createEmbeddingProvider (file:///home/openclaw/.npm-global/lib/node_modules/openclaw/dist/manager-BRmgtjii.js:369:25)
at MemoryIndexManager.loadProviderResult (file:///home/openclaw/.npm-global/lib/node_modules/openclaw/dist/manager-BRmgtjii.js:2706:16)
at file:///home/openclaw/.npm-global/lib/node_modules/openclaw/dist/manager-BRmgtjii.js:2811:52)
at MemoryIndexManager.ensureProviderInitialized (file:///home/openclaw/.npm-global/lib/node_modules/openclaw/dist/manager-BRmgtjii.js:2819:5)
at MemoryIndexManager.probeVectorAvailability (file:///home/openclaw/.npm-global/lib/node_modules/openclaw/dist/manager-BRmgtjii.js:3168:14)
at Object.run (file:///home/openclaw/.npm-global/lib/node_modules/openclaw/dist/cli.runtime-CN0Ckcb_.js:325:25)- ゲートウェイプロセスの失敗:
23:28:54+00:00 error Memory index failed (main): Unknown memory embedding provider: ollama- 診断指標:
- 同一設定で、2026.4.5以前のバージョンでは正常に動作していた
- CLIの
memory statusとmemory indexコマンドの両方が失敗する - ゲートウェイのメモリインデックススケジュールタスクがエラー付きでサイレントに失敗する
- 他の非メモリ関連のollama操作(チャット補完など)は通常通り機能し続ける
🧠 原因
スタックトレースから、メモリエンベッディングの初期化チェーンにおけるプロバイダーレジストリのルックアップ失敗が明らかになります。エラーは以下から発生しています:
getAdapter (manager-BRmgtjii.js:317:22)
createEmbeddingProvider (manager-BRmgtjii.js:369:25)技術的分析
- プロバイダーレジストリの分離:影響を受けるバージョンでは、エンベッディングプロバイダーレジストリはLLMプロバイダーレジストリとは別のルックアップテーブルを使用しています。文字列
"ollama"はチャット補完では有効ですが、エンベッディング専用のアダプタマップには登録されていませんでした。 - サイレントプロバイダーマッピングのリグレッション:v2026.4.5より前では、メモリサブシステムが暗黙的なプロバイダーの正規化を行っていました—ランタイムのプロバイダー名を正しいエンベッディングアダプタにマッピングしていました。この正規化はリグレッションで削除またはリファクタリングされ、接続が切断されました。
- コードパスの分析:
MemoryIndexManager.probeVectorAvailability()
→ ensureProviderInitialized()
→ loadProviderResult() // Line 2706
→ createEmbeddingProvider() // Line 369 — FAILS HERE
→ getAdapter() // Line 317 — Unknown provider lookupgetAdapter()関数はADAPTER_REGISTRYに対して直接マップルックアップを実行します。“ollama”がこのレジストリに追加されたことがなかった(またはリファクタリング中に削除された)ため、ルックアップはundefinedを返し、エラーをトリガーします。
影響を受ける設定パターン
以下の設定パターンのユーザーが影響を受けます:
// openclaw.yaml or openclaw.json
memory:
embedding:
provider: ollama
model: nomic-embed-text:latest
// ...
メモリサブシステムはエンベッディングアダプタレジストリに存在するプロバイダーを期待しますが、ollamaはLLMアダプタレジストリ에만登録されており、エンベッディング専用のレジストリには登録されていませんでした。
🛠️ 解決手順
オプションA:OpenAI-Compatプロバイダーの使用(推奨)
OllamaのAPIはOpenAI互換です。メモリエンベッディングがローカルollamaエンドポイントを指すopenai-compatプロバイダーを使用するように設定します:
修正前(壊れている):
memory:
embedding:
provider: ollama
model: nomic-embed-text:latest修正後(修正済み):
memory:
embedding:
provider: openai-compat
model: nomic-embed-text:latest
apiKey: not-required
baseURL: http://localhost:11434/v1オプションB:フルパスでOllamaプロバイダーを使用
ollamaプラグインがインストールされている場合、プロバイダーのフルパスを指定します:
memory:
embedding:
provider: @openclaw/provider-ollama
model: nomic-embed-text:latestオプションC:環境変数によるオーバーライド
設定ファイルを変更せずに、ランタイムでプロバイダーをオーバーライドします:
$ OPENCLAW_MEMORY_EMBEDDING_PROVIDER=openai-compat \
OPENCLAW_MEMORY_EMBEDDING_BASE_URL=http://localhost:11434/v1 \
openclaw memory status設定の確認
メモリ設定がこの構造と一致していることを確認してください:
memory:
enabled: true
embedding:
provider: openai-compat
model: nomic-embed-text:latest
apiKey: not-required
baseURL: http://localhost:11434/v1
dimensions: 768 # Required for nomic-embed-text
index:
enabled: true
chunkSize: 512
overlap: 64🧪 検証
ステップ1:プロバイダー接続の確認
$ curl -s http://localhost:11434/v1/embeddings \
-H "Content-Type: application/json" \
-d '{"model": "nomic-embed-text:latest", "input": "test"}' \
| jq '.data[0].embedding[:5]'期待される出力:
[
-0.02187623,
0.04312847,
-0.05898431,
0.02345612,
-0.03456789
]ステップ2:CLIメモリのステータス確認
$ openclaw memory status
🦞 OpenClaw 2026.4.8 (9ece252) — iMessage green bubble energy, but for everyone.
✅ Memory System Ready
Provider: openai-compat
Model: nomic-embed-text:latest
Dimensions: 768
Status: Connected期待される結果:終了コード0でエラーなし。
ステップ3:ベクトル可用性の確認
$ openclaw memory index --dry-run
✅ Embedding provider verified
Vector dimensions: 768
Average latency: 45msステップ4:ゲートウェイ動作の確認
ゲートウェイを再起動し、メモリが正常に初期化されたことを確認するためにログを確認します:
$ systemctl restart openclaw-gateway
$ journalctl -u openclaw-gateway -n 20 --no-pager | grep -i memory期待される出力にはエラーが含まれず、プロバイダーの初期化が確認されている必要があります。
⚠️ よくある落とし穴
- 大文字と小文字の区別:プロバイダー名は大小文字を区別します。
openaiCompatやOpenAI-Compatではなく、openai-compat(小文字、ハイフン付き)を使用してください。 - ポートの競合:ポート11434が他のサービスによって使用されていないことを確認してください。
ss -tlnp | grep 11434で確認します。 - APIキーの不一致:OllamaはAPIキーを必要としません。
sk-...プレースホルダーを使用すると認証失敗が発生する可能性があります。apiKey: not-requiredまたはapiKey: ""を使用してください。 - モデル名の不一致:モデル名がollamaが報告するものと正確に一致していることを確認してください。
curl http://localhost:11434/api/tagsを実行して利用可能なモデルを一覧表示し、正確な文字列を確認してください。 - Dockerネットワーキング:OpenClawをDockerで実行し、ollamaをホストで実行している場合、
localhostの代わりにhost.docker.internal(macOS)または172.17.0.1(Linux)を使用してください。 - 次元の不一致:
nomic-embed-textは768次元のベクトルを出力します。ベクトルデータベースが別の次元数を期待している場合、dimensions: 768を明示的に指定してください。 - プラグインの読み込み:オプションBを使用する場合は、プラグインがインストールされていることを確認してください:
npm list @openclaw/provider-ollama。不足している場合はnpm install -g @openclaw/provider-ollamaでインストールしてください。 - 設定ファイルの場所:設定が正しい場所にあることを確認してください:
~/.openclaw/config.yamlまたは/etc/openclaw/config.yaml。openclaw config showを実行して読み込まれた設定を確認してください。
🔗 関連するエラー
E_PROVIDER_NOT_FOUND— 汎用プロバイダー解決失敗。缺乏れているプラグインまたはプロバイダー名のタイプミスが原因であることが多いです。E_EMBEDDING_INIT_FAILED— エンベッディングプロバイダーは初期化されたが、最初のエンベッ딩生成中に失敗しました(認証、ネットワーク、モデルが見つからないなど)。E_VECTOR_DIMENSION_MISMATCH— プロバイダーが返すベクトルの次元がデータベーススキーマの期待値と一致しません。- Issue #62282 — 同じエラーの以前のレポート。2026.4.8で修正されたとされていましたが、ユーザーは2026.4.5と2026.4.8の両方でリグレッションが持続していると報告しています。
Unknown memory embedding provider: azure-openai— Azure OpenAIエンベッディングも同じパターンに影響されます。Azureエンドポイントでopenai-compatを使用するという回避策が適用されます。Unknown memory embedding provider: bedrock— AWS Bedrockエンベッディングも同じレジストリ分離問題の影響を受けます。