1. 为什么要在本地跑 OpenClaw 这类 AI Agent
OpenClaw 是一个开源自主智能体框架,简单说就是给大语言模型装上一副能动手的“躯干”:模型负责思考,OpenClaw 负责调用工具、读写文件、执行命令、串联多步任务。它本身不带模型,需要你外接一个“大脑”——云端 API 可以,本地 Ollama 也可以。适合谁?想在个人设备上跑 AI Agent、又不想把数据发到云端的开发者,尤其是手里有块像样显卡、愿意折腾配置的人。
本地化运行的核心价值有三个:一是省钱,Agent 任务动辄几十轮工具调用,Token 消耗极快,本地模型跑起来没有按量计费;二是隐私,公司财报、内部文档、个人笔记都能直接喂进去,不出本机;三是可控,模型权重、上下文长度、推理参数全在你手里。代价是本地模型能力通常弱于顶级云端模型,复杂推理任务容易翻车,所以配置和验证环节必须做扎实。
这篇按“装 Ollama → 拉模型 → 写 config.toml → 连通性验证 → 排错”的顺序走一遍,每一步都给可复制的命令和配置。你不需要先理解 OpenClaw 的全部架构,跟着做完就能判断本地化运行是否就绪。
2. 前置准备:Ollama 服务与模型拉取
Ollama 是目前本地跑开源模型最省心的方案,一条命令装好,自带 OpenAI 兼容接口,OpenClaw 可以直接对接。先确认你的设备:8GB 显存能跑 7B 量化模型,16GB 以上可以尝试 14B 到 32B 量化版本,纯 CPU 也能跑但速度会明显变慢。
安装 Ollama(Linux/macOS):
curl -fsSL https://ollama.com/install.sh | shWindows 直接去官网下载安装包,装完托盘会出现 Ollama 图标。安装完成后确认服务在跑:
ollama --version curl http://localhost:11434/api/tags第二条命令返回{"models":[]}就说明服务正常,只是还没拉模型。接着拉一个适合 Agent 任务的模型,推荐 Qwen 系列,中文指令跟随和工具调用格式都比较稳:
ollama pull qwen2.5:14b如果你的显存有限,换成qwen2.5:7b或qwen2.5:7b-instruct-q4_K_M。拉完后验证模型能正常推理:
ollama run qwen2.5:14b "用一句话说明你能调用工具吗"能正常返回文本就说明本地推理链路通了。这里有个容易忽略的点:Ollama 默认只监听127.0.0.1:11434,如果你打算让 OpenClaw 跑在容器里或另一台机器上,需要设置OLLAMA_HOST=0.0.0.0:11434再重启服务,否则会连接被拒。
3. OpenClaw 的 config.toml 骨架与本地模型对接
OpenClaw 的配置入口是项目根目录下的config.toml。下面这份骨架可以直接复制,重点是把provider指向 Ollama 的 OpenAI 兼容端点,并把模型名写成你实际拉取的 tag。
# config.toml —— OpenClaw 本地化运行配置骨架 [agent] name = "local-claw" workspace = "./workspace" max_steps = 25 log_level = "info" [llm] provider = "openai-compatible" base_url = "http://localhost:11434/v1" api_key = "ollama" model = "qwen2.5:14b" temperature = 0.3 max_tokens = 4096 timeout_seconds = 120 [llm.retry] max_attempts = 3 backoff_seconds = 2 [tools] enabled = ["shell", "file_read", "file_write", "http_get"] workdir = "./workspace" allow_shell = true [memory] backend = "sqlite" path = "./data/memory.db" max_context_tokens = 8192几个参数值得单独说。base_url末尾的/v1不能省,Ollama 的 OpenAI 兼容层挂在这个路径下;api_key填任意非空字符串即可,Ollama 不校验,但 OpenClaw 的客户端库通常要求该字段存在。max_tokens不要超过模型的实际输出上限,Qwen2.5 14B 一般设 4096 比较安全。max_context_tokens要和模型的上下文窗口匹配,7B 版本通常 32K,14B 也是 32K,设 8192 是给工具调用结果留余量,避免上下文被撑爆。
[tools]段是安全边界。本地跑 Agent 最大的风险是模型被网页内容里的恶意指令带偏,执行了不该执行的 shell 命令。建议初期只开file_read和http_get,确认行为可控后再逐步放开shell和file_write,并且把workdir限制在一个空目录里。
如果你不想自己维护本地模型,或者本地显卡实在跑不动大参数模型,也可以把provider换成云端兼容端点,把base_url指向https://taotoken.net/api,api_key换成在控制台申请的 Key,模型名换成对应云端模型。这样配置结构完全不变,只是“大脑”从本地换成了远端,适合本地算力不足但想先跑通 Agent 流程的情况。
4. 连通性验证:一次完整的请求与结果判读
配置写完后不要急着跑复杂任务,先用最小请求验证链路。OpenClaw 一般提供 CLI 入口,假设可执行文件叫openclaw:
openclaw --config ./config.toml run "读取 workspace/hello.txt 的内容并原样返回"先在workspace/下建一个测试文件:
mkdir -p workspace && echo "local agent ready" > workspace/hello.txt预期输出应该包含local agent ready这段文本,并且日志里能看到工具调用记录,类似tool_call: file_read path=workspace/hello.txt。如果只返回了文本但没有工具调用,说明模型没有正确触发 function calling,通常是模型本身不支持工具调用格式,或者 OpenClaw 的 prompt 模板和模型不匹配。
再验证一次纯推理链路,绕过工具:
curl http://localhost:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "qwen2.5:14b", "messages": [{"role": "user", "content": "回复 OK 两个字母"}], "max_tokens": 16 }'返回 JSON 里choices[0].message.content包含OK,说明 Ollama 的 OpenAI 兼容层工作正常。这一步能过,OpenClaw 连不上就基本是 config.toml 的字段问题,而不是模型或服务的问题。
判断本地化运行是否就绪,看三个信号:Ollama 的/api/tags能列出模型;/v1/chat/completions能返回内容;OpenClaw 能完成一次带工具调用的任务并给出正确结果。三个都过,就可以开始接真实任务了。
5. 本篇常见错误排查
连接被拒(Connection refused):最常见。先curl http://localhost:11434/api/tags确认 Ollama 在跑。如果 OpenClaw 跑在 Docker 里,localhost指向容器自身,要改成宿主机的实际 IP 或host.docker.internal。Linux 上还要确认防火墙没拦 11434 端口。
404 Not Found:base_url写成了http://localhost:11434而漏了/v1。Ollama 的原生 API 在/api/chat,OpenAI 兼容层在/v1/chat/completions,两者路径不同,OpenClaw 用的是后者。
模型名不匹配:config.toml里的model必须和ollama list输出的 tag 完全一致,包括:14b这种后缀。写成qwen2.5而实际拉的是qwen2.5:14b,Ollama 会返回 model not found。
工具调用不触发:模型返回了自然语言描述而不是结构化的 tool_call。原因通常是模型不支持 function calling,或者 OpenClaw 的 prompt 里工具描述和模型训练格式不一致。换用明确支持工具调用的模型(Qwen2.5 系列、Llama 3.1 系列都支持),并确认 OpenClaw 版本里的 provider 适配层是最新的。
超时(Timeout):本地模型首次加载要几十秒,timeout_seconds设 120 以上。如果每次请求都超时,检查显存是否够用,模型是不是被换出到了内存导致推理极慢。ollama ps能看到当前加载的模型和占用的显存。
上下文溢出:Agent 多轮工具调用后报 context length exceeded。把max_context_tokens调小,或者在 OpenClaw 里开启记忆压缩,让历史对话被摘要后再送入模型。
6. 本地跑通之后:从验证到日常使用
本地链路验证通过后,下一步是把 OpenClaw 接到真实工作流里。建议先在workspace目录里放几个测试文件,让它做文件整理、内容摘要这类低风险任务,观察它的工具调用序列是否符合预期。确认稳定后,再考虑接入消息平台或定时任务。
如果你发现本地模型在复杂任务上表现不够,或者设备算力有限跑不动大参数模型,可以把配置里的base_url切到云端兼容端点,用https://taotoken.net/api配合在控制台申请的 API Key,模型换成云端版本。配置结构不变,只是推理位置从本机换到了远端,适合需要更强推理能力但又不想改 Agent 代码的场景。API Key 在控制台的 API Keys 页面创建,接入细节可以参考接入文档。
长期跑编码类或高频 Agent 任务的话,按量计费的成本会累积得比较快,可以关注一下 Coding Plan 这类包月方案,适合每天都有大量工具调用的情况。想先对比不同模型在同一个任务上的表现,可以直接在模型对话里试,不用改本地配置就能切换模型看效果。
本地化运行 OpenClaw 的坑主要集中在配置字段和模型兼容性上,链路本身不复杂。把config.toml里的base_url、model、max_tokens三个字段对齐,再跑一次带工具调用的验证请求,基本就能判断环境是否就绪。剩下的就是根据任务类型调temperature和工具白名单,慢慢把 Agent 的行为收敛到你期望的范围。