Skip to content
CloudZun
Go back

OpenClaw Memory Embedding 系统修复实录:从 Ollama 到 Gemini 的完整踩坑指南

编辑此文章

OpenClaw Memory Embedding 系统修复实录:从 Ollama 到 Gemini 的完整踩坑指南

摘要:本文记录了 OpenClaw Memory 语义搜索系统从故障到修复的完整过程,对比了 Ollama 本地 Embedding、Azure OpenAI 和 Google Gemini 三种方案的优劣,最终选择 Gemini Embedding API 实现稳定高效的语义搜索。全程 Dry-Run 验证,零风险部署。


📋 问题背景

故障现象

OpenClaw 升级后(v2026.2.26 → v2026.3.3),Memory 语义搜索功能失效:

$ openclaw memory status
Memory Search (main)
Provider: ollama (requested: ollama)
Model: bge-m3
Indexed: 73/99 files · 208 chunks
Vector: ready
Vector dims: 1536  # ⚠️ 问题:维度不匹配

核心问题


🔍 问题诊断

方案评估矩阵

方案维度速度成本中文支持风险
Ollama bge-m31024❌ 慢(CPU 240ms/次,批量超时)免费✅ 优秀🔴 高(超时)
Azure OpenAI text-embedding-3-large3072✅ 快$✅ 好🟡 中(需改源码)
Google Gemini embedding-001768✅ 快免费额度✅ 好🟢 低(官方支持)

决策过程

  1. Ollama 方案:单次调用 240ms,但 99 个文件批量索引超时(120s limit)
  2. Azure OpenAI 方案:API 正常,但 OpenClaw 不支持 Azure deployment 参数,需改源码
  3. Gemini 方案:官方支持 + 免费额度 + 配置简单 → 最终选择

🛠️ 实施步骤

步骤 1:配置 Gemini Provider

编辑 ~/.openclaw/openclaw.json

{
  "models": {
    "providers": {
      "gemini": {
        "baseUrl": "https://generativelanguage.googleapis.com/v1beta",
        "apiKey": "YOUR_GEMINI_API_KEY",
        "api": "google-generative-ai",
        "models": [
          {
            "id": "gemini-embedding-001",
            "name": "gemini-embedding-001",
            "input": ["text"],
            "cost": {"input": 0, "output": 0},
            "contextWindow": 2048
          }
        ]
      }
    }
  }
}

关键点:需要同时配置 remote.apiKey(容易遗漏)

{
  "agents": {
    "defaults": {
      "memorySearch": {
        "provider": "gemini",
        "model": "gemini-embedding-001",
        "remote": {
          "apiKey": "YOUR_GEMINI_API_KEY"
        }
      }
    }
  }
}

步骤 3:验证配置

$ openclaw config validate --json
{"valid":true,"path":"/home/chengzh/.openclaw/openclaw.json"}

步骤 4:重启 Gateway

$ openclaw gateway restart

步骤 5:重建索引

$ rm -f ~/.openclaw/memory/main.sqlite*
$ openclaw memory index --verbose

Memory Index (main)
Provider: gemini (requested: gemini)
Model: gemini-embedding-001
Sources: memory (MEMORY.md + ~/clawd/memory/*.md)

[memory] embeddings: batch start
...
Memory index updated (main).

索引统计


✅ 验证结果

状态检查

$ openclaw memory status
Memory Search (main)
Provider: gemini (requested: gemini)
Model: gemini-embedding-001
Sources: memory
Indexed: 99/99 files · 438 chunks
Dirty: no
Vector: ready
Vector dims: 3072  # SQLite 自动调整
Embedding cache: enabled (432 entries)

语义搜索测试

$ memory_search(query="M7 股票分析", maxResults=3)

返回结果

  1. memory/2026-02-14-m7-analysis.md#L35-L56 (score: 0.53)

    • M7 分化是叙事驱动,非基本面驱动
    • 投资建议:BUY GOOG, HOLD MSFT, SELL AMZN
  2. memory/2026-02-14-m7-analysis.md#L1-L41 (score: 0.52)

    • 任务完成报告,60 分钟生成双语报告
    • 25+ 财务指标,229 篇新闻
  3. memory/2026-02-28.md#L1-L51 (score: 0.51)

    • 每周六 00:34 UTC 定时运行
    • 本周市场数据表格

📊 性能对比

指标Ollama bge-m3Gemini embedding-001
单次延迟240ms (CPU)~100ms (云端)
批量索引❌ 超时 (120s)✅ 2 分钟完成
维度1024768
免费额度无限1500 RPM, 1M/天
中文支持✅ 优秀✅ 好
配置复杂度🟢 低🟢 低
维护成本🟡 中(本地模型)🟢 低(云端 API)

💡 关键经验

1. 配置位置很重要

OpenClaw 的 Memory 配置必须在 agents.defaults.memorySearch,而不是顶层:

// ✅ 正确
{
  "agents": {
    "defaults": {
      "memorySearch": {...}
    }
  }
}

// ❌ 错误(不生效)
{
  "memorySearch": {...}
}

2. remote.apiKey 不能少

{
  "memorySearch": {
    "provider": "gemini",
    "model": "gemini-embedding-001",
    "remote": {
      "apiKey": "..."  // ⚠️ 必须配置
    }
  }
}

没有 remote.apiKey,系统显示 Provider: none

3. 维度兼容性

4. Dry-Run 验证流程

# 1. 备份配置
cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.backup

# 2. 验证配置
openclaw config validate --json

# 3. 重启 Gateway
openclaw gateway restart

# 4. 检查状态
openclaw memory status

# 5. 测试搜索
memory_search(query="test")

🔐 安全注意事项

API Key 管理

  1. 不要硬编码:生产环境使用环境变量或 Secret 管理
  2. 权限最小化:Gemini API Key 只授予 Embedding 权限
  3. 定期轮换:建议每 90 天更新一次

免费额度监控

Gemini 免费额度:

对于个人使用完全足够,但建议监控用量:

# 查看索引大小
$ openclaw memory status | grep chunks
Indexed: 99/99 files · 438 chunks

🚀 后续优化方向

1. 启用 Prompt Caching

如果切换到 Claude 模型,可启用 Prompt Caching 降低成本 90%。

2. 混合搜索策略

结合 FTS(全文搜索)+ Vector(语义搜索)提升准确率。

3. 定期清理旧记忆

# 清理 90 天前的缓存
openclaw memory clean --older-than 90d

📚 参考资料


总结

本次修复从问题诊断到最终部署,全程遵循 Dry-Run 验证流程

  1. ✅ 备份配置
  2. ✅ 验证语法
  3. ✅ 重启服务
  4. ✅ 测试功能

最终效果

核心经验


作者: HuaQloud
日期: 2026-03-03
标签: #OpenClaw #AI #Embedding #Memory #Gemini


编辑此文章
Share this post on:

📚 相关文章推荐


Previous Post
HN Daily Digest: 2026-03-04
Next Post
HN Daily Digest: 2026-03-03