Jetson 上 OpenClaw + Ollama + llama.cpp 的联动配置模板部署大模型

Jetson 上我建议的联动方式是:OpenClaw -> Ollama(主模型,原生 API)+ llama.cpp(备用/低资源模型,OpenAI 兼容 API)+ Ollama embeddings(memorySearch) 这样做的原因是,OpenClaw 官方把 Ollama + openclaw onboard 作为最低冲突的本地方案;同时它也支持把 vLLM / LiteLLM / 自定义 OpenAI-compatible 本地代理 作为额外 provider 接进来。Ollama 这边,OpenClaw 明确推荐走原生 http://host:11434,不要给它配 /v1,否则工具调用会变差;而 llama.cppllama-server 则原生提供 OpenAI-compatible chat completions / responses / embeddings 路由,适合当第二套本地后端。([OpenClaw][1])

另外,OpenClaw 的本地模型指南也明确提醒:它默认期待大上下文和较强的提示注入防护,小硬件上的强量化/小模型更容易丢上下文或降低安全裕量。所以在 Jetson Orin NX 16G 上,更稳的策略是把 Ollama 设为主模型,把 llama.cpp 设为 fallback 或专用模型,而不是反过来。([OpenClaw][1])

下面给你一份推荐版模板
特点是 Ollama 走自动发现,你不用手工维护本地模型清单;llama.cpp 作为一个显式自定义 provider 接入;memorySearch 用 Ollama 的 /api/embeddings。OpenClaw 的文档说明,只要设置了 OLLAMA_API_KEY 且没有显式写 models.providers.ollama,它就会从本地 http://127.0.0.1:11434 自动发现模型memorySearch.provider = "ollama" 也是官方支持的,只是不会自动选中,所以这里显式打开。([OpenClaw][2])

先准备环境变量:

exportOLLAMA_API_KEY="ollama-local"exportOPENCLAW_GATEWAY_TOKEN="replace-with-a-long-random-token"

把下面保存为 ~/.openclaw/openclaw.json

{ identity: { name: "Jetson-Claw", theme: "local edge agent", emoji: "🦙", }, gateway: { bind: "loopback", port: 18789, auth: { token: "${OPENCLAW_GATEWAY_TOKEN}", }, }, agent: { workspace: "~/.openclaw/workspace", }, agents: { defaults: { model: { // 主模型:走 Ollama(自动发现) primary: "ollama/qwen2.5:7b-instruct", // 备用:先退到 llama.cpp,再退到另一个 Ollama 小模型 fallbacks: [ "llamacpp/qwen2.5-7b-instruct-gguf", "ollama/llama3.2:3b", ], }, models: { "ollama/qwen2.5:7b-instruct": { alias: "Ollama 主模型" }, "llamacpp/qwen2.5-7b-instruct-gguf": { alias: "llama.cpp 备用" }, "ollama/llama3.2:3b": { alias: "Ollama 小模型" }, }, memorySearch: { enabled: true, // 用 Ollama embeddings,而不是 OpenClaw 的 local(node-llama-cpp) 模式 provider: "ollama", // 换成你本机实际装好的 embedding 模型 model: "YOUR_OLLAMA_EMBED_MODEL", // Jetson 上先不要再级联更多 embedding fallback,保持简单 fallback: "none", cache: { enabled: true, maxEntries: 50000, }, sync: { watch: true, }, }, }, }, models: { // 保留合并模式,未来你还可以叠加云端 provider mode: "merge", providers: { // llama.cpp 作为自定义 OpenAI-compatible provider llamacpp: { baseUrl: "http://127.0.0.1:8080/v1", apiKey: "llama-local", api: "openai-completions", models: [ { id: "qwen2.5-7b-instruct-gguf", name: "Qwen2.5 7B Instruct GGUF", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 4096, maxTokens: 1024, }, ], }, }, }, } 

这个模板的关键点有三个:

第一,Ollama 不写 models.providers.ollama。因为官方文档说,一旦你显式写了 models.providers.ollama自动发现会被关闭,你就得自己维护模型列表;不写则会自动从本地 Ollama 实例发现模型。([OpenClaw][2])

第二,llama.cpp 走 /v1,并用 api: "openai-completions"。OpenClaw 官方对“其他 OpenAI-compatible 本地代理”给的标准接法,就是 models.providers.<id> + baseUrl + api + models 这一套;而 llama.cpp 官方文档确认 llama-server 提供 OpenAI-compatible 路由。([OpenClaw][1])

第三,memorySearch 用 Ollama,不用 local。因为 OpenClaw 文档里写得很清楚:memorySearch.provider = "local" 走的是 node-llama-cpp,可能需要额外的 pnpm approve-builds / pnpm rebuild;而 memorySearch.provider = "ollama" 是官方支持的本地/self-hosted embeddings 路径,更适合先把 Jetson 跑稳。([OpenClaw][3])


启动顺序

先起 Ollama。Ollama 官方 API 默认就在 http://localhost:11434/api。 ([Ollama Docs][4])

ollama serve ollama list 

然后起 llama.cpp

~/src/llama.cpp/build/bin/llama-server \-m ~/models/base/model.gguf \--host127.0.0.1 \--port8080\-c4096\-np1\-ctk q8_0 \-ctv q8_0 

再检查两个后端:

curl http://127.0.0.1:11434/api/tags curl http://127.0.0.1:8080/v1/models 

最后让 OpenClaw 读配置:

openclaw gateway restart openclaw models list openclaw health openclaw gateway status 

如果你想把 Ollama 也改成“显式配置”

只有在这几种情况下才建议这么做:
你要连远程 Ollama、你想强制指定 contextWindow/maxTokens、或者你想完全手工管模型列表。官方文档明确说,远程 Ollama 时应使用 baseUrl: "http://host:11434",不要加 /v1,并把 api 设成 "ollama" 以保证原生工具调用行为。([OpenClaw][2])

对应模板是:

{ models: { mode: "merge", providers: { ollama: { baseUrl: "http://127.0.0.1:11434", apiKey: "${OLLAMA_API_KEY}", api: "ollama", models: [ { id: "qwen2.5:7b-instruct", name: "Qwen2.5 7B Instruct", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 8192, maxTokens: 2048, }, { id: "llama3.2:3b", name: "Llama 3.2 3B", reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 8192, maxTokens: 2048, }, ], }, }, }, } 

远程控制这台 Jetson 的模板

OpenClaw 官方建议把 Gateway 绑在 loopback,然后通过 SSH 隧道 从笔记本连进去;默认网关端口是 18789。如果你希望本地电脑上的 OpenClaw CLI 默认连这台 Jetson,可以把 gateway.mode: "remote"gateway.remote.url/token 写进去。([OpenClaw][5])

先在你的笔记本上开隧道:

ssh-N-L18789:127.0.0.1:18789 user@jetson-host 

然后在本地电脑的 OpenClaw 配置里加:

{ gateway: { mode: "remote", remote: { url: "ws://127.0.0.1:18789", token: "your-token", }, }, } 

这样之后本地的 openclaw healthopenclaw status 之类就会默认走这个远程 Gateway。([OpenClaw][5])


两个最容易踩的坑

不要把 OpenClaw 连 Ollama 时写成 http://127.0.0.1:11434/v1 官方文档明确说,这会切到 OpenAI-compatible 模式,工具调用会变得不可靠,模型可能把工具 JSON 当纯文本吐出来。([OpenClaw][2])

不要一开始就把 memorySearch.provider 设成 local 这条路走的是 node-llama-cpp,本地编译和依赖更重;Jetson 上先用 ollama embeddings 更省心。([OpenClaw][3])

后面会陆续加入openclaw gateway安全模式下与ros联动配置。

参考链接:
[1]: https://docs.openclaw.ai/gateway/local-models “Local Models - OpenClaw”
[2]: https://docs.openclaw.ai/providers/ollama “Ollama - OpenClaw”
[3]: https://docs.openclaw.ai/reference/memory-config “Memory configuration reference - OpenClaw”
[4]: https://docs.ollama.com/api/introduction “Introduction - Ollama”
[5]: https://docs.openclaw.ai/gateway/remote “Remote Access - OpenClaw”

Read more

前端状态管理比较:选择适合你的状态管理方案

前端状态管理比较:选择适合你的状态管理方案 毒舌时刻 状态管理?听起来就像是前端工程师为了显得自己很高级而特意发明的复杂概念。你以为随便找个状态管理库就能解决所有问题?别做梦了!到时候你会发现,状态管理库本身就是个问题。 你以为Redux是万能的?别天真了!Redux的样板代码多到让你崩溃,调试起来也非常麻烦。还有那些所谓的轻量级状态管理库,看起来简单,用起来却各种问题。 为什么你需要这个 1. 复杂状态管理:当应用变得复杂时,组件间的状态共享和管理会变得非常困难,需要一个专门的状态管理方案。 2. 可预测性:良好的状态管理方案可以让状态变化变得可预测,便于调试和测试。 3. 性能优化:状态管理方案可以帮助你优化组件渲染,提高应用性能。 4. 代码组织:状态管理方案可以帮助你更好地组织代码,提高代码的可维护性。 5. 团队协作:统一的状态管理方案可以便于团队成员之间的协作,减少沟通成本。 反面教材 // 这是一个典型的状态管理混乱的例子 import React, { useState, useEffect } from 'react'; function

零基础学微信小程序前端(原生JS):从0到1写第一个可交互页面

零基础学微信小程序前端(原生JS):从0到1写第一个可交互页面

目录 一、小程序前端的核心差异 二、前期准备:微信开发者工具搭建 三、核心知识点:小程序前端的目录结构 四、实操:写第一个可交互页面 1. 编写页面结构(index.wxml) 2. 编写页面样式(index.wxss) 3. 编写页面逻辑(index.js) 五、运行测试:看看效果 六、新手常见问题&解决方法 七、入门总结 一、小程序前端的核心差异 和你熟悉的 Web 前端(HTML+CSS+JS)相比,小程序有 3 个核心不同: 1. 标签不同:HTML 的div/p/

前端真的能防录屏?EME(加密媒体扩展) DRM 反录屏原理 + 实战代码

前端真的能防录屏?EME(加密媒体扩展) DRM 反录屏原理 + 实战代码

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》专栏19年编写主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战 🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解 🌛《开源项目》本专栏主要介绍目前热门的开源项目,带大家快速了解并轻松上手使用 🍎 《前端技术》专栏以实战为主介绍日常开发中前端应用的一些功能以及技巧,均附有完整的代码示例 ✨《开发技巧》本专栏包含了各种系统的设计原理以及注意事项,并分享一些日常开发的功能小技巧 💕《Jenkins实战》专栏主要介绍Jenkins+Docker的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程 🌞《Spring Boot》专栏主要介绍我们日常工作项目中经常应用到的功能以及技巧,代码样例完整 👍《Spring Security》专栏中我们将逐步深入Spring Security的各个

树莓派5部署冬瓜HAOS:从零到智能家居中枢实战

1. 准备工作:硬件与软件选择 在开始部署冬瓜HAOS之前,选择合适的硬件和软件是确保系统稳定运行的关键。树莓派5作为最新的单板计算机,性能比前代提升显著,尤其适合作为智能家居中枢。我实测下来,树莓派5的多核处理能力和更高的内存带宽(支持8GB LPDDR4X)能够轻松应对Home Assistant的多任务需求,比如同时处理传感器数据、摄像头流媒体和自动化规则。 硬件方面,除了树莓派5主板,你需要准备以下配件: * TF卡:推荐使用SanDisk Extreme PRO系列(64GB以上,U3 A2 V30规格)。这种高速卡能显著提升系统响应速度,因为HAOS会频繁读写日志和数据库。我试过用普通Class 10卡,启动时间长了近一倍,偶尔还会卡顿。 * 电源适配器:树莓派5需要27W USB-C PD电源(官方电源最稳)。我用过第三方电源,偶尔会触发低压警告,导致系统不稳定。 * 散热方案:树莓派5运行时CPU温度可能飙到70°C以上,建议加装散热风扇或金属散热片。我用的是一体化散热外壳,待机温度控制在40°C左右。 * 外设:HDMI显示器、