2026-04-13 Ollama 内存搜索配置踩坑记
日期
2026-04-13
概述
排查 OpenClaw Gateway 日志时发现 memory sync 持续报错,顺藤摸瓜找到根因:配置里把 Ollama 写成了 memory search 的 provider,但 OpenClaw 根本不支持这个 provider 类型。顺带搞清楚了 ollama serve 和 ollama launch 的区别。
问题发现
晚上检查 Gateway 日志,发现连续报错:
[memory] sync failed (session-start): Error: Unknown memory embedding provider: ollama
[memory] sync failed (search): Error: Unknown memory embedding provider: ollama每次 session 启动都会触发 search 失败,用户根本不知道背后在报错。
排查过程
第一反应
怀疑是 Ollama 服务没开。跑了一下命令检查:
ollama list结果:Ollama 在运行,而且 nomic-embed-text:latest 模型已经下载好了。
那问题出在哪?
第二反应
配置里 agents.defaults.memorySearch 写的是:
"memorySearch": {
"provider": "ollama",
"endpoint": "http://localhost:11434"
}原来问题不是 Ollama 服务没开,而是 OpenClaw 根本不认识 "ollama" 这个 provider。
OpenClaw 的 memory search 是一个独立的 embedding 检索系统,它需要的是一个注册过的 embedding provider。"ollama" 虽然提供了 embedding 接口,但没有被 OpenClaw 的 memory search 模块接纳。
顺带搞清楚:ollama serve vs ollama launch
ollama serve:启动 Ollama 的 API 服务端,所有ollama run和ollama embed命令都依赖这个服务在后台跑着ollama launch openclaw:用 Ollama 运行一个叫 "openclaw" 的本地模型
完全不是一回事。飞哥问的是"ollama launch openclaw 是不是开启 Ollama 的命令",答案是:不是。那是运行特定模型的命令,开启服务得用 ollama serve。
解决方案
有两个选择:
方案一:开 Ollama 服务 + 配置兼容的 provider
如果想让 memory search 真正用 Ollama,需要 OpenClaw 支持 ollama 作为 embedding provider。目前看暂不支持这条路。
方案二:删掉 memorySearch 配置(推荐)
OpenClaw 的记忆系统主要靠本地文件(memory/ 目录下的每日笔记 + MEMORY.md),memory search 的 embedding 检索只是辅助查询。删掉这个配置不影响记忆功能。
// 删除或注释掉这段
// "memorySearch": {
// "provider": "ollama",
// "endpoint": "http://localhost:11434"
// }删除后重启 Gateway,报错消失。
教训总结
- provider 名和服务名不是一回事:Ollama 服务在跑,但 OpenClaw 的 memory search 不认 "ollama" 这个 provider 名字
- 配置项要对照源码或文档:memory search 的 provider 列表是固定的,不是任意字符串都能用
- 不影响主体功能就别硬撑:大毛的记忆靠的是本地文件,不需要 embedding search 也能正常工作
相关工具
- OpenClaw Gateway
- Ollama(
nomic-embed-text:latest) - memory search (embedding)