跳到主要内容
OpenClaw Memory 本地模式配置:Ubuntu CUDA cuDNN llama.cpp | 极客日志
Shell / Bash Node.js AI
OpenClaw Memory 本地模式配置:Ubuntu CUDA cuDNN llama.cpp 介绍在 Ubuntu 24.04 环境下配置 OpenClaw 使用本地 Memory 模式的完整流程。主要步骤包括安装 CUDA 和 cuDNN 驱动,编译支持 CUDA 的 llama.cpp,安装 node-llama-cpp 依赖,以及修改 openclaw.json 配置文件以启用本地向量检索。过程中解决了 sqlite-vec 加载失败及 GPU 验证报错等问题,最终实现无需 API Key 的本地语义记忆功能。
深海蔚蓝 发布于 2026/4/5 更新于 2026/7/22 55 浏览OpenClaw 的 Memory 配置
总结来说,针对 Memory 不生效的问题,又不想用 OpenAI 或 Gemini,或者只想单纯节省 token,可以按照如下方式设置为 local 模式:
修改 openclaw.json 配置
安装 CUDA 和 cuDNN
编译 llama.cpp,使用 cuda
安装 node-llama-cpp
验证
背景:Memory 不生效的问题
执行 openclaw doctor 命令,有如下提示:
◇ Memory search Memory search is enabled but no embedding provider is configured. Semantic recall will not work without an embedding provider. Fix (pick one): - Set OPENAI_API_KEY or GEMINI_API_KEY in your environment - Add credentials: openclaw auth add --provider openai - For local embeddings: configure agents.defaults.memorySearch.provider and local model path - To disable : openclaw config set agents.defaults.memorySearch.enabled false Verify: openclaw memory status --deep
这是因为'长期记忆检索'(memory_search)的 provider 只支持 openai | gemini | local,其中 openai/gemini 都需要单独的 API Key(或 remote.apiKey)。这一块网上的资料很少,且部分缺少上下文。我就决定自己来配置使用本地 (local) 模式的 Memory。
OpenClaw 的 Memory 配置
参考官网上的 Memory 介绍,我做了如下修改。1、修改 openclaw.json:如下,在 ~/.openclaw/openclaw.json 中,增加/修改如下内容:
"agents" : {
"defaults" : {
"model" : { "primary" : "zai/glm-5" } ,
"models" : { "zai/glm-5" : { "alias" : "GLM"
}
}
,
"workspace"
:
"/home/band/.openclaw/workspace"
,
"compaction"
:
{
"mode"
:
"safeguard"
,
"reserveTokensFloor"
:
20000
,
"memoryFlush"
:
{
"enabled"
:
true
,
"softThresholdTokens"
:
4000
,
"systemPrompt"
:
"Session nearing compaction. Store durable memories now."
,
"prompt"
:
"Write any lasting notes to memory/YYYY-MM-DD.md; reply with NO_REPLY if nothing to store."
}
}
,
"maxConcurrent"
:
4
,
"subagents"
:
{
"maxConcurrent"
:
8
}
,
"memorySearch"
:
{
"provider"
:
"local"
,
"local"
:
{
"modelPath"
:
"hf:ggml-org/embeddinggemma-300M-GGUF/embeddinggemma-300M-Q8_0.gguf"
}
,
"fallback"
:
"none"
,
"sources"
:
[
"memory"
,
"sessions"
]
,
"experimental"
:
{
"sessionMemory"
:
true
}
,
"store"
:
{
"vector"
:
{
"enabled"
:
true
,
"extensionPath"
:
"~/.npm-global/lib/node_modules/sqlite-vec/node_modules/sqlite-vec-linux-x64/vec0.so"
}
}
}
}
}
modelPath 采用官方建议的模型,注意是模型名称,不是本地的目录,我就是在这卡了很久。
extensionPath 后文有讲到,修改为本地的目录
Ubuntu 24.04 安装 CUDA 和 cuDNN mkdir /opt/nvidia
cd /opt/nvidia
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin
sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/13.1.1/local_installers/cuda-repo-ubuntu2404-13-1-local_13.1.1-590.48.01-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2404-13-1-local_13.1.1-590.48.01-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2404-13-1-local /cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-13-1
echo 'export PATH=/usr/local/cuda-13.1/bin${PATH:+:${PATH}}' | sudo tee -a /etc/profile.d/cuda.sh
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-13.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' | sudo tee -a /etc/profile.d/cuda.sh
source /etc/profile.d/cuda.sh
验证:nvcc --version,提示如下表明已经 cuda toolkit 安装成功。
wget https://developer.download.nvidia.com/compute/cudnn/9.19.0/local_installers/cudnn-local-repo-ubuntu2404-9.19.0_1.0-1_amd64.deb
sudo dpkg -i cudnn-local-repo-ubuntu2404-9.19.0_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu2404-9.19.0/cudnn-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cudnn
dpkg -L libcudnn9-cuda-13
dpkg -l | grep cudnn
验证,与前文类似,先安装 Anaconda,再安装 pytorch,所有工作完成后。执行如下命令:python test_cuda.py
编译 llama.cpp git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp
cmake -B build -DGGML_CUDA=ON -DLLAMA_OPENSSL=ON
cmake --build build --config Release
验证方案 1: 因为我是再 WSL 中运行,就选择 cli 方案:
./build/bin/llama-cli -hf Qwen/Qwen3-0.6B-GGUF:Q8_0
如果出现下面的错误,加上 -DLLAMA_OPENSSL=ON 参数,重新编译 llama.cpp。
解决之后又有新的报错。暂时先到这里,没有继续验证,TODO
验证方案 2:下载并运行 Llama-2 7B 模型
sudo apt install git-lfs
git lfs install
安装 node-llama-cpp npm install -g node-llama-cpp
node-llama-cpp --version
验证 Memory openclaw gateway restart
openclaw memory status --deep
正在下载模型到 ~/.node-llama-cpp/models,说明已经起作用了。
sqlite-vec unavailable 在 openclaw doctor 或 openclaw memory status --deep,还有个错误。
[memory] sqlite-vec unavailable: /home/band/sqlite-vec.so: cannot open shared object file: No such file or directory
sudo apt-get update
sudo apt-get install unzip
sudo apt install -y libsqlite3-dev
git clone https://github.com/asg017/sqlite-vec
cd sqlite-vec
./scripts/vendor.sh
make loadable
npm install -g sqlite-vec
修改如下配置,重启 gateway,再执行 openclaw memory status --deep,问题修复:
"extensionPath" : "~/.npm-global/lib/node_modules/sqlite-vec/node_modules/sqlite-vec-linux-x64/vec0.so"
踩过的坑
安装 node-llama-cpp 的一些提示 ### [本地嵌入自动下载]
- 默认本地嵌入模型:`hf:ggml-org/embeddinggemma-300M-GGUF/embeddinggemma-300M-Q8_0.gguf` (约 0.6 GB)。
- 当 `memorySearch.provider = "local"` 时,`node-llama-cpp` 解析 `modelPath` ;如果 GGUF 缺失,它会自动下载到缓存(或 `local.modelCacheDir` ,如果已设置),然后加载它。下载在重试时会续传。
- 原生构建要求:运行 `pnpm approve-builds` ,选择 `node-llama-cpp` ,然后运行 `pnpm rebuild node-llama-cpp` 。
- 回退:如果本地设置失败且 `memorySearch.fallback = "openai"` ,我们自动切换到远程嵌入(`openai/text-embedding-3-small` ,除非被覆盖)并记录原因。
Memory search provider is set to "local" but no local model file was found. Fix (pick one ):
- Install node- llama- cpp and set a local model path in config
- Switch to a remote provider: openclaw config set agents.defaults.memorySearch.provider openai
Verify: openclaw memory status
看起来必须要安装 node-llama-cpp。于是继续搜寻资料。
cd ~/.openclaw/extensions
npm install node-llama-cpp
pnpm approve-builds
npx --no node-llama-cpp inspect gpu
安装 node-llama-cpp 的前置条件 OpenClaw 依赖 node-llama-cpp,网上说要原生编译安装。需要从源码编译 llama.cpp(大型 C++ AI 库)。所以要先编译 llama.cpp,还依赖 CUDA 和 cuDNN。所以正确的安装顺序是:
安装 CUDA
安装 cuDNN
编译 llama.cpp
原生编译安装 node-llama-cpp
sudo apt-get update
sudo apt-get install build-essential cmake git libstdc++6 libgomp1
npx node-llama-cpp source download
npx node-llama-cpp source build
当我尝试执行 npx node-llama-cpp source download,一直报错。
此时我再尝试执行 npx --no node-llama-cpp inspect gpu,能正确执行,但是报错如下。让我很意外,怀疑是因为我把 llama.cpp 已经编译成功的缘故。
Vulkan: Vulkan is detected, but using it failed
To resolve errors related to Vulkan, see the Vulkan guide: https://node-llama-cpp.withcat.ai/guide/vulkan
Using node-llama-cpp With Vulkan 这个问题是在处理 node-llama-cpp 时遇到的,目前看没有影响,后面也没处理。
相关免费在线工具 RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online