
1. 为什么要在本地沙箱里跑 OpenClaw OllamaOpenClaw 是一个可以本地部署的智能体运行框架支持接入多种模型后端适合做自动化任务、代码辅助和对话式工具链。Ollama 则是目前最省心的本地模型推理方案一条命令就能拉起 Llama、Qwen、DeepSeek 等开源模型。把这两个东西塞进 Docker 沙箱里好处很直接环境隔离、依赖不打架、随时销毁重建特别适合在开发机上折腾。但实际跑起来会遇到一个绕不开的问题OpenClaw 要调用模型本地 Ollama 是一个通道云端模型又是另一个通道Key 管理、地址切换、协议差异全堆在一起配置起来很烦。这时候用 TaoToken 做统一通道就顺理成章了——它把不同模型的接入收敛成一套 Key 和一套 API 地址本地模型走 Ollama云端模型走 TaoTokenOpenClaw 侧只需要认一个入口。这篇就按「本地沙箱」这个场景把 Ollama 容器、OpenClaw 容器、TaoToken 通道三件事串起来给出可以直接复制的 docker-compose 和 config.toml 骨架最后演示一次请求验证链路是否打通。适合已经在用 Docker、想在自己机器上跑智能体、又不想被多套 Key 折腾的人。2. 前置准备TaoToken 通道与本地环境在动手之前先把两件事理清楚本地需要什么TaoToken 那边需要拿什么。本地环境这块你需要一台装了 Docker 和 Docker Compose 的机器。如果要用 GPU 加速 Ollama还得装好 NVIDIA 驱动和 nvidia-container-toolkit否则容器里跑模型会退回 CPU速度会很难受。磁盘建议留出至少 30GB因为一个 7B 级别的模型量化后也要 4-8GB20B 级别的动辄十几 GB。TaoToken 这边核心是拿到一个统一的 API Key。它的作用是把模型调用收敛到一个入口你不用为每个模型单独记地址和密钥。操作路径是先注册账号然后进控制台创建 API Key。控制台入口https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteAPI Key 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite创建完 Key 之后API 的基础地址是https://taotoken.net/api这个地址在后面的 config.toml 里会用到。注意这个地址不带任何查询参数直接填就行。提示API Key 只在创建时完整显示一次记得当场复制保存。如果丢了就重新生成一个不要试图找回。如果你后面打算长期跑编码类或 Agent 类任务可以顺带了解一下 Coding Plan它针对高频调用场景做了额度优化https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite3. 可复制配置docker-compose 与 config.toml 骨架这一节是全文的核心直接给可复制的配置。我把它拆成三块docker-compose 编排、Ollama 模型拉取、OpenClaw 的 config.toml。3.1 docker-compose.yml 编排两个容器先建一个工作目录比如~/openclaw-sandbox在里面放docker-compose.ymlversion: 3.8 services: ollama: image: ollama/ollama:latest container_name: ollama restart: unless-stopped ports: - 11434:11434 volumes: - ./ollama-data:/root/.ollama environment: - OLLAMA_HOST0.0.0.0:11434 - OLLAMA_KEEP_ALIVE24h deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] networks: - claw-net openclaw: image: openclaw/openclaw:latest container_name: openclaw restart: unless-stopped depends_on: - ollama volumes: - ./openclaw-config:/root/.openclaw environment: - TAOTOKEN_API_KEY${TAOTOKEN_API_KEY} - TAOTOKEN_BASE_URLhttps://taotoken.net/api - OLLAMA_BASE_URLhttp://ollama:11434 networks: - claw-net networks: claw-net: driver: bridge几个关键点说明一下。OLLAMA_HOST0.0.0.0:11434是必须的否则 Ollama 只监听容器内的 localhostOpenClaw 容器访问不到。OLLAMA_KEEP_ALIVE24h让模型常驻显存避免每次请求都重新加载。两个容器放在同一个自定义网络claw-net里这样 OpenClaw 可以直接用服务名ollama当主机名访问不用去查 IP。如果你没有 GPU把deploy那一整段删掉即可Ollama 会自动用 CPU 跑只是慢一些。3.2 拉取本地模型启动 Ollama 容器后进容器拉一个模型。这里以 Qwen2.5 7B 为例docker compose up -d ollama docker exec -it ollama ollama pull qwen2.5:7b拉完之后确认一下模型列表docker exec -it ollama ollama list你应该能看到类似qwen2.5:7b的条目。这一步很关键因为 OpenClaw 的 config.toml 里要填的模型名必须和这里一致。3.3 OpenClaw 的 config.toml 骨架OpenClaw 的配置文件放在挂载目录./openclaw-config/config.toml。下面是一个同时接入本地 Ollama 和 TaoToken 通道的骨架[general] log_level info data_dir /root/.openclaw [[providers]] name local-ollama type openai-compatible base_url http://ollama:11434/v1 api_key ollama default_model qwen2.5:7b [[providers]] name taotoken type openai-compatible base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} default_model claude-3-5-sonnet [router] default_provider local-ollama fallback_provider taotoken这里的设计思路是本地 Ollama 作为默认通道跑日常轻量任务TaoToken 作为兜底通道当本地模型处理不了或者需要更强能力时切过去。两个 provider 都是openai-compatible类型因为 Ollama 的/v1接口和 TaoToken 的接口都兼容 OpenAI 协议这样 OpenClaw 侧不用写两套适配。api_key ${TAOTOKEN_API_KEY}这种写法是从环境变量读取配合 docker-compose 里的TAOTOKEN_API_KEY注入避免把 Key 硬编码进配置文件。3.4 环境变量文件在docker-compose.yml同目录建一个.env文件TAOTOKEN_API_KEY你的实际Key然后启动全部服务docker compose up -d4. 验证请求本地模型与 TaoToken 通道是否打通配置写完不代表能用得实际发一次请求验证。分两步走先验本地 Ollama再验 TaoToken 通道。4.1 验证本地 Ollama 通道在宿主机上直接 curl Ollama 的 OpenAI 兼容接口curl http://localhost:11434/v1/chat/completions \ -H Content-Type: application/json \ -d { model: qwen2.5:7b, messages: [{role: user, content: 用一句话说明什么是容器沙箱}] }如果返回里有choices字段和模型生成的文本说明本地通道没问题。如果报连接拒绝检查OLLAMA_HOST是否设成了0.0.0.0。4.2 验证 TaoToken 通道再验 TaoToken 通道注意这里用的是https://taotoken.net/apicurl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-3-5-sonnet, messages: [{role: user, content: 回复两个字通了}] }返回正常的话说明 Key 和地址都对。如果返回 401多半是 Key 没填对或者环境变量没生效返回 404 则检查 base_url 有没有多写或少写/v1。4.3 在 OpenClaw 容器内验证整体链路最后进 OpenClaw 容器用它的命令行工具发一次请求docker exec -it openclaw bash openclaw chat --provider local-ollama --message 你好报一下你的模型名再切到 TaoToken 通道试一次openclaw chat --provider taotoken --message 你好确认通道可用两次都能正常返回就说明本地模型和 TaoToken 统一通道在 OpenClaw 里都打通了。你也可以用模型对话页面直接对比不同模型的输出效果https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite5. 本篇常见错误排查配置过程中最容易踩的坑集中在网络和路径上这里列几个高频问题。容器间访问不到 Ollama。最常见的原因是OLLAMA_HOST没设成0.0.0.0或者两个容器不在同一个网络里。用docker exec -it openclaw ping ollama测一下能不能通不通就检查 docker-compose 里的 networks 配置。模型名对不上。config.toml 里写的default_model必须和ollama list里显示的完全一致包括 tag。比如qwen2.5:7b不能写成qwen2.5否则会报模型不存在。TaoToken 返回 401。先确认.env文件里的 Key 没有多余空格再确认 docker-compose 里环境变量名和 config.toml 里的${TAOTOKEN_API_KEY}拼写一致。改完.env后要docker compose up -d重建容器光 restart 不会重新读环境变量。GPU 没被用上。进 Ollama 容器跑nvidia-smi看有没有输出。没有的话检查宿主机是否装了 nvidia-container-toolkit以及 docker-compose 里deploy.resources那段有没有写对。配置文件权限问题。挂载目录./openclaw-config如果宿主机上属主不对容器内可能读不了。用chmod -R 755 ./openclaw-config放开权限。端口冲突。宿主机如果已经跑了别的 Ollama 实例占用 11434容器会起不来。改一下映射端口比如11435:11434同时把 config.toml 里的 base_url 改成对应端口。排查的时候养成看日志的习惯docker compose logs -f ollama docker compose logs -f openclaw日志里通常会直接告诉你哪一步失败了。6. 后续接入与统一通道的收尾沙箱跑通之后下一步通常是把 OpenClaw 接到实际的聊天平台比如企业微信、钉钉、飞书这些。这时候 TaoToken 统一通道的价值会更明显——平台侧只认一个 API 入口模型换不换、本地还是云端对上层都是透明的。如果你要长期跑这类任务建议把 Key 管理和额度规划提前做一下。API Key 页面可以随时生成和吊销https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite接入细节和参数说明可以对照文档来https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite我自己的习惯是本地 Ollama 跑日常问答和草稿遇到需要长上下文或者复杂推理的任务再切到 TaoToken 通道这样既省本地显存又不会在关键时刻掉链子。沙箱的好处就是随便折腾配置写坏了删掉容器重来就行几分钟的事。