修复FTS5 错误
这份指南是为 小米9 Termux (Ubuntu容器) 环境下专门定制的。如果你重装了系统,或者 OpenClaw 更新后重新出现 FTS5 错误,请严格按照以下步骤操作即可修复。
🦞 OpenClaw 修复指南 (FTS5 + Vector 完整版)
准备工作
确保你已经:
- 安装了 Termux。
- 在 Termux 中安装了 Ubuntu 容器(使用
proot-distro)。 - 在 Ubuntu 容器内安装了 Node.js 和 OpenClaw。
修复步骤
第一步:进入 Ubuntu 容器
如果还在 Termux 原始界面,先进入 Ubuntu:
1 | proot-distro login ubuntu |
第二步:安装编译工具
在 Ubuntu 容器内,确保有编译环境(编译 better-sqlite3 需要):
1 | apt update |
第三步:进入 OpenClaw 安装目录
1 | cd /data/data/com.termux/files/usr/lib/node_modules/openclaw |
第四步:安装支持 FTS5 的数据库驱动
下载并编译 better-sqlite3,强制开启 FTS5 支持:
1 | # 设置编译参数,开启 FTS5 |
(等待几分钟,直到安装完成)
第五步:执行核心补丁 (关键步骤)
这是最重要的一步,用于欺骗 OpenClaw 使用新驱动,并修复加载扩展的错误。
直接复制并运行以下整段命令:
1 | sed -i 's/require("node:sqlite")/(()=>{const b=require("better-sqlite3"); b.prototype.enableLoadExtension=function(){}; return {DatabaseSync:b} })()/g' dist/*.js |
第六步:验证修复结果
运行状态检查命令:
1 | openclaw memory status --deep |
检查标准:
- 看到
FTS: ready(全文搜索正常) - 看到
Vector: ready(向量搜索正常) - 没有红字报错 (如
fts unavailable或enableLoadExtension is not a function)
💡 原理简述 (备忘)
- 问题根源:OpenClaw 默认调用 Node.js 内置的
node:sqlite,该模块在你的环境下未包含 FTS5 组件。 - 解决方案:
- 安装独立的
better-sqlite3驱动(编译时带上了 FTS5)。 - 通过
sed命令修改dist/*.js文件,将程序内部的require("node:sqlite")替换为一段“适配代码”。 - 这段适配代码不仅让程序使用新驱动,还补上了
enableLoadExtension方法,确保向量搜索扩展也能正常加载。
- 安装独立的
⚠️ 注意事项
如果未来 OpenClaw 版本更新,可能会覆盖掉 dist/*.js 文件。如果更新后再次报错,只需重新执行 第五步 即可(不需要重新安装驱动)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 思想加油站!
评论
WalineLivere

.jpg)
.jpg)
.jpg)
.jpg)