ANALYSIS
概述
OpenClaw 是一个开源的个人 AI 助理平台,支持多种模型提供商,包括云端模型(OpenAI、Claude 等)和本地模型(Ollama、vLLM 等)。使用本地模型连接 OpenClaw 可以带来以下优势:
- 隐私安全:数据不离开本地,适合处理敏感信息
- 成本控制:无需支付 API 费用,一次性硬件投入
- 离线可用:无网络依赖,适合内网环境
- 低延迟:本地推理,响应速度快
- 可定制:支持自定义模型和微调
本文详细介绍如何配置 OpenClaw 使用本地模型。
本地模型方案对比
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Ollama | 安装简单,模型丰富,社区活跃 | 性能相对较低 | 快速体验、个人使用 |
| vLLM | 性能优异,支持高并发 | 配置复杂,需要技术背景 | 生产环境、高并发 |
| Llama.cpp | 轻量级,支持多平台 | 功能相对简单 | 资源受限环境 |
| LocalAI | 兼容 OpenAI API,易于集成 | 性能一般 | 需要兼容 OpenAI 的场景 |
| Text-Generation-WebUI | Web 界面友好,功能丰富 | 资源占用高 | 交互式使用 |
使用 Ollama 连接 OpenClaw
安装和配置 Ollama
安装 Ollama
PRTCL // BASH
# ========== 安装 Ollama ==========# macOS 使用 Homebrew 包管理器安装brew install ollama
# Linux 使用官方安装脚本自动安装curl -fsSL https://ollama.ai/install.sh | sh
# Windows 需要手动下载安装包# 访问 https://ollama.ai/download 下载安装启动 Ollama 服务
PRTCL // BASH
# ========== 启动和验证 Ollama 服务 ==========# 启动 Ollama 服务(默认监听 11434 端口)ollama serve
# 验证服务是否正常运行,返回已下载的模型列表curl http://localhost:11434/api/tags下载模型
PRTCL // BASH
# ========== 下载和管理模型 ==========# 下载 Llama 3.2 3B 模型(轻量级,适合入门)ollama pull llama3.2:3b
# 下载通义千问 7B 模型(中文能力强)ollama pull qwen2.5:7b
# 下载 Mistral 7B 模型(开源友好,性能平衡)ollama pull mistral:7b
# 查看已下载的所有模型列表ollama list配置 OpenClaw
创建配置文件
OpenClaw 的模型配置文件位于 ~/.openclaw/config/models.yaml:
PRTCL // YAML
# ========== OpenClaw 模型配置文件 ==========# 定义可用的模型提供商providers: # Ollama 本地模型配置 - name: "ollama" # 提供商名称 type: "local" # 类型:本地模型 baseUrl: "http://localhost:11434" # Ollama 服务地址 api: "openai-completions" # API 兼容类型 models: # 模型列表 # Llama 3.2 3B 模型配置 - id: "ollama/llama3.2:3b" # 模型唯一标识 name: "Llama 3.2 3B" # 模型显示名称 capabilities: # 模型能力 - "text" # 支持文本生成 - "code" # 支持代码生成 config: # 模型参数配置 temperature: 0.7 # 温度参数(控制随机性) top_p: 0.9 # 核采样概率 max_tokens: 2048 # 最大生成 token 数
# 通义千问 7B 模型配置 - id: "ollama/qwen2.5:7b" # 模型唯一标识 name: "通义千问 7B" # 模型显示名称 capabilities: # 模型能力 - "text" # 支持文本生成 - "code" # 支持代码生成 - "tool" # 支持工具调用 config: # 模型参数配置 temperature: 0.7 # 温度参数 top_p: 0.9 # 核采样概率 max_tokens: 4096 # 最大生成 token 数
# Mistral 7B 模型配置 - id: "ollama/mistral:7b" # 模型唯一标识 name: "Mistral 7B" # 模型显示名称 capabilities: # 模型能力 - "text" # 支持文本生成 - "code" # 支持代码生成 config: # 模型参数配置 temperature: 0.7 # 温度参数 top_p: 0.9 # 核采样概率 max_tokens: 2048 # 最大生成 token 数
# 默认使用的模型defaultModel: "ollama/qwen2.5:7b"使用环境变量
如果需要动态配置,可以使用环境变量:
PRTCL // YAML
# ========== 使用环境变量的动态配置 ==========providers: - name: "ollama" # 提供商名称 type: "local" # 类型:本地模型 # 使用环境变量 OLLAMA_BASE_URL,默认值为 localhost:11434 baseUrl: "${OLLAMA_BASE_URL:http://localhost:11434}" # 动态配置服务地址 api: "openai-completions" # API 兼容类型 models: # 模型列表 # 使用环境变量 DEFAULT_MODEL,默认值为 llama3.2:3b - id: "ollama/${DEFAULT_MODEL:llama3.2:3b}" # 动态配置模型 ID name: "默认模型" # 模型显示名称 capabilities: # 模型能力 - "text" # 支持文本生成 - "code" # 支持代码生成测试连接
PRTCL // BASH
# ========== 测试连接 ==========# 测试 Ollama 服务是否正常运行(返回模型列表)curl http://localhost:11434/api/tags
# 测试 OpenClaw 与 Ollama 的连接状态openclaw model test ollama/llama3.2:3b
# 测试模型推理功能(发送"你好"并获取回复)openclaw model chat ollama/llama3.2:3b "你好"Docker 部署
如果 OpenClaw 使用 Docker 部署,需要确保容器能够访问宿主机的 Ollama 服务:
PRTCL // YAML
# ========== Docker Compose 配置文件 ==========# 定义 Docker Compose 版本version: '3.8'
# 定义服务列表services: # OpenClaw 服务配置 openclaw: image: openclaw/openclaw:latest # 使用最新版本的 OpenClaw 镜像 container_name: openclaw # 容器名称 restart: unless-stopped # 重启策略:除非手动停止 ports: # 端口映射 - "3000:3000" # 将容器 3000 端口映射到宿主机 3000 端口 volumes: # 挂载卷配置 - ./workspace:/home/node/.openclaw/workspace # 工作空间 - ./config:/home/node/.openclaw/config # 配置文件 environment: # 环境变量 - NODE_ENV=production # 运行环境:生产环境 extra_hosts: # 额外的主机配置 - "host.docker.internal:host-gateway" # 允许容器访问宿主机 networks: # 网络配置 - openclaw-net # 使用 openclaw-net 网络
# Ollama 服务配置 ollama: image: ollama/ollama:latest # 使用最新版本的 Ollama 镜像 container_name: ollama # 容器名称 restart: unless-stopped # 重启策略:除非手动停止 ports: # 端口映射 - "11434:11434" # 将容器 11434 端口映射到宿主机 11434 端口 volumes: # 挂载卷配置 - ollama_data:/root/.ollama # 模型数据持久化存储 environment: # 环境变量 - OLLAMA_HOST=0.0.0.0 # 监听所有网络接口 networks: # 网络配置 - openclaw-net # 使用 openclaw-net 网络
# 定义网络networks: openclaw-net: # 网络名称 driver: bridge # 使用桥接网络驱动
# 定义数据卷volumes: ollama_data: # Ollama 数据卷名称OpenClaw 配置文件需要使用 Docker 网络中的服务名:
PRTCL // YAML
# ========== Docker 网络中的 OpenClaw 配置 ==========providers: - name: "ollama" # 提供商名称 type: "local" # 类型:本地模型 # 使用 Docker 网络中的服务名作为地址 baseUrl: "http://ollama:11434" # Ollama 服务地址(Docker 网络中) api: "openai-completions" # API 兼容类型 models: # 模型列表 - id: "ollama/llama3.2:3b" # 模型唯一标识 name: "Llama 3.2 3B" # 模型显示名称 capabilities: # 模型能力 - "text" # 支持文本生成 - "code" # 支持代码生成使用 vLLM 连接 OpenClaw
安装 vLLM
PRTCL // BASH
# ========== 安装 vLLM ==========# 使用 pip 安装 Python 包pip install vllm
# 或使用 Docker 拉取预构建镜像docker pull vllm/vllm-openai:latest启动 vLLM 服务
本地安装
PRTCL // BASH
# ========== 启动 vLLM 服务器(本地安装) ==========# 使用 Python 模块方式启动 vLLM OpenAI 兼容 API 服务器python -m vllm.entrypoints.openai.api_server \ --model meta-llama/Llama-3.2-3B-Instruct \ # 指定模型路径或名称 --host 0.0.0.0 \ # 监听所有网络接口 --port 8000 \ # 监听端口 --dtype auto \ # 自动选择数据类型 --max-model-len 4096 # 最大模型长度(上下文窗口)Docker 部署
PRTCL // BASH
# ========== 使用 Docker 部署 vLLM ==========# 运行 vLLM 容器docker run --gpus all \ # 使用所有 GPU -p 8000:8000 \ # 端口映射:宿主机 8000 -> 容器 8000 --name vllm \ # 容器名称 vllm/vllm-openai:latest \ # 镜像名称 --model meta-llama/Llama-3.2-3B-Instruct \ # 模型路径或名称 --host 0.0.0.0 \ # 监听所有网络接口 --port 8000 # 容器内监听端口配置 OpenClaw
PRTCL // YAML
# ========== OpenClaw 配置 vLLM ==========providers: - name: "vllm" # 提供商名称 type: "openai" # 类型:OpenAI 兼容 baseUrl: "http://localhost:8000/v1" # vLLM 服务地址 apiKey: "dummy-key" # API 密钥(vLLM 不需要真实密钥) models: # 模型列表 - id: "vllm/Llama-3.2-3B-Instruct" # 模型唯一标识 name: "Llama 3.2 3B (vLLM)" # 模型显示名称 capabilities: # 模型能力 - "text" # 支持文本生成 - "code" # 支持代码生成 config: # 模型参数配置 temperature: 0.7 # 温度参数 top_p: 0.9 # 核采样概率 max_tokens: 2048 # 最大生成 token 数性能优化
PRTCL // BASH
# ========== vLLM 性能优化 ==========# 启用张量并行(多 GPU 场景)python -m vllm.entrypoints.openai.api_server \ --model meta-llama/Llama-3.2-70B-Instruct \ # 使用 70B 大模型 --tensor-parallel-size 2 \ # 张量并行大小(使用 2 个 GPU) --gpu-memory-utilization 0.9 # GPU 内存利用率(90%)
# 启用量化(降低内存占用,提升速度)python -m vllm.entrypoints.openai.api_server \ --model meta-llama/Llama-3.2-3B-Instruct \ # 模型路径 --quantization awq # 使用 AWQ 量化方法
# 调整批处理大小(提升吞吐量)python -m vllm.entrypoints.openai.api_server \ --model meta-llama/Llama-3.2-3B-Instruct \ # 模型路径 --max-num-batched-tokens 4096 # 最大批处理 token 数使用 LocalAI 连接 OpenClaw
安装 LocalAI
PRTCL // BASH
# ========== 使用 Docker 安装 LocalAI ==========# 运行 LocalAI 容器docker run -d \ # 后台运行 --gpus all \ # 使用所有 GPU -p 8080:8080 \ # 端口映射:宿主机 8080 -> 容器 8080 -v $PWD/models:/models \ # 挂载模型目录 --name localai \ # 容器名称 localai/localai:latest # 镜像名称下载模型
PRTCL // BASH
# ========== 下载模型文件 ==========# 进入模型目录cd models
# 从 Hugging Face 下载模型文件(使用 wget)wget https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/resolve/main/llama-2-7b-chat.Q4_K_M.gguf配置 OpenClaw
PRTCL // YAML
# ========== OpenClaw 配置 LocalAI ==========providers: - name: "localai" # 提供商名称 type: "openai" # 类型:OpenAI 兼容 baseUrl: "http://localhost:8080/v1" # LocalAI 服务地址 apiKey: "dummy-key" # API 密钥(LocalAI 不需要真实密钥) models: # 模型列表 - id: "localai/llama-2-7b-chat" # 模型唯一标识 name: "Llama 2 7B (LocalAI)" # 模型显示名称 capabilities: # 模型能力 - "text" # 支持文本生成 - "code" # 支持代码生成模型路由配置
OpenClaw 支持根据任务类型自动选择模型:
基于任务类型的路由
PRTCL // YAML
# ========== 基于任务类型的路由配置 ==========router: enabled: true # 启用路由功能 strategy: "task-type" # 路由策略:基于任务类型 rules: # 路由规则列表 # 编码任务规则 - condition: "task.type == 'coding'" # 条件:任务类型为编码 model: "ollama/codellama:7b" # 使用 Code Llama 7B priority: 10 # 优先级(数字越大优先级越高)
# 写作任务规则 - condition: "task.type == 'writing'" # 条件:任务类型为写作 model: "ollama/llama3.2:3b" # 使用 Llama 3.2 3B priority: 9 # 优先级
# 分析任务规则 - condition: "task.type == 'analysis'" # 条件:任务类型为分析 model: "ollama/qwen2.5:7b" # 使用通义千问 7B priority: 8 # 优先级
# 默认规则(当其他规则都不匹配时使用) - default: "ollama/llama3.2:3b" # 默认使用 Llama 3.2 3B基于复杂度的路由
PRTCL // YAML
# ========== 基于任务复杂度的路由配置 ==========router: enabled: true # 启用路由功能 strategy: "complexity" # 路由策略:基于任务复杂度 rules: # 路由规则列表 # 低复杂度任务(复杂度 < 3) - condition: "task.complexity < 3" # 条件:复杂度小于 3 model: "ollama/llama3.2:3b" # 使用 Llama 3.2 3B(轻量级) priority: 10 # 优先级
# 中等复杂度任务(3 <= 复杂度 < 7) - condition: "task.complexity >= 3 and task.complexity < 7" # 条件:复杂度在 3-7 之间 model: "ollama/qwen2.5:7b" # 使用通义千问 7B(平衡) priority: 8 # 优先级
# 高复杂度任务(复杂度 >= 7) - condition: "task.complexity >= 7" # 条件:复杂度大于等于 7 model: "ollama/llama3.2:70b" # 使用 Llama 3.2 70B(高性能) priority: 6 # 优先级
# 默认规则 - default: "ollama/llama3.2:3b" # 默认使用 Llama 3.2 3B混合模式(本地 + 云端)
PRTCL // YAML
# ========== 混合模式配置(本地模型 + 云端模型) ==========providers: # ========== 本地模型配置 ========== - name: "ollama" # 提供商名称 type: "local" # 类型:本地模型 baseUrl: "http://localhost:11434" # Ollama 服务地址 api: "openai-completions" # API 兼容类型 models: # 模型列表 - id: "ollama/llama3.2:3b" # 模型唯一标识 name: "Llama 3.2 3B" # 模型显示名称 capabilities: # 模型能力 - "text" # 支持文本生成 - "code" # 支持代码生成
# ========== 云端模型配置(用于复杂任务) ========== - name: "openai" # 提供商名称 type: "openai" # 类型:OpenAI API baseUrl: "https://api.openai.com/v1" # OpenAI API 地址 apiKey: "${OPENAI_API_KEY}" # API 密钥(从环境变量读取) models: # 模型列表 - id: "gpt-4o" # 模型唯一标识 name: "GPT-4o" # 模型显示名称 capabilities: # 模型能力 - "text" # 支持文本生成 - "image" # 支持图像处理 - "tool" # 支持工具调用
# ========== 路由配置 ==========router: enabled: true # 启用路由功能 rules: # 路由规则列表 # 低复杂度任务使用本地模型 - condition: "task.complexity < 5" # 条件:复杂度小于 5 model: "ollama/llama3.2:3b" # 使用本地 Llama 3.2 3B priority: 10 # 优先级(高)
# 高复杂度任务使用云端模型 - condition: "task.complexity >= 5" # 条件:复杂度大于等于 5 model: "gpt-4o" # 使用云端 GPT-4o priority: 8 # 优先级
# 包含图像的任务使用云端模型 - condition: "task.has_image" # 条件:任务包含图像 model: "gpt-4o" # 使用云端 GPT-4o priority: 10 # 优先级(高)
# 默认使用本地模型 - default: "ollama/llama3.2:3b" # 默认使用本地 Llama 3.2 3B性能优化
模型选择策略
| 任务类型 | 推荐模型 | 原因 |
|---|---|---|
| 简单对话 | 3B 模型 | 快速响应,资源占用低 |
| 代码生成 | Code Llama | 专门优化代码能力 |
| 中文理解 | Qwen 2.5 | 中文能力强 |
| 长文本 | Llama 3.2 70B | 上下文长,能力强 |
| 生产环境 | vLLM | 性能优异,高并发 |
并发优化
PRTCL // YAML
# ========== 并发优化配置 ==========# Ollama 配置(环境变量)environment: - OLLAMA_NUM_PARALLEL=4 # 并发请求数(同时处理的请求数量) - OLLAMA_MAX_LOADED_MODELS=3 # 最大加载模型数(内存中保持的模型数量)缓存优化
PRTCL // YAML
# ========== 缓存优化配置 ==========# 启用模型保活(避免频繁加载 / 卸载模型)environment: - OLLAMA_KEEP_ALIVE=30m # 模型保活时间(30 分钟)
# 启用 KV Cache(减少重复计算,提升性能)environment: - OLLAMA_KV_CACHE_TYPE=q8_0 # KV Cache 类型(使用 8-bit 量化)GPU 加速
PRTCL // BASH
# ========== GPU 加速配置 ==========# 检查 GPU 使用情况nvidia-smi
# 多 GPU 配置(使用 GPU 0 和 1)docker run --gpus '"device=0,1"' ...
# GPU 分配(指定使用特定 GPU)docker run --gpus all \ --gpus '"device=0"' \ --shm-size=16g \ ...监控与调试
监控资源使用
PRTCL // BASH
# ========== 监控资源使用 ==========# Ollama 资源监控nvidia-smi # 查看 GPU 使用情况top # 查看 CPU 和内存使用情况
# vLLM 资源监控nvidia-smi # 查看 GPU 使用情况curl http://localhost:8000/metrics # 查看 vLLM 性能指标查看日志
PRTCL // BASH
# ========== 查看服务日志 ==========# Ollama 日志(实时查看)tail -f ~/.ollama/logs/server.log
# vLLM 日志(Docker 部署)docker logs -f vllm
# OpenClaw 日志openclaw logs -f性能测试
PRTCL // PYTHON
# ========== 性能测试脚本 ==========import timeimport requests
def test_latency(model, prompt="你好"): """ 测试模型响应延迟 Args: model: 模型名称 prompt: 测试提示词 Returns: ( 延迟时间, 响应结果 ) """ start = time.time() # 记录开始时间 response = requests.post( # 发送 POST 请求 "http://localhost:11434/api/generate", # API 端点 json={ "model": model, # 模型名称 "prompt": prompt, # 提示词 "stream": False # 非流式输出 } ) end = time.time() # 记录结束时间 return end - start, response.json() # 返回延迟和响应
# 测试多个模型的性能models = ["llama3.2:3b", "qwen2.5:7b", "mistral:7b"]for model in models: latency, result = test_latency(model) # 测试延迟 print(f"{model}: {latency:.2f}s") # 输出结果故障排查
连接失败
症状:OpenClaw 无法连接到本地模型
解决方案:
PRTCL // BASH
# ========== 排查连接失败问题 ==========# 检查服务状态(验证 Ollama 是否正常运行)curl http://localhost:11434/api/tags
# 检查防火墙设置(开放 11434 端口)sudo ufw allow 11434
# 检查配置文件(确认配置正确)cat ~/.openclaw/config/models.yaml
# 测试连接(验证 OpenClaw 与 Ollama 的连接)openclaw model test ollama/llama3.2:3b性能问题
症状:响应速度慢
解决方案:
PRTCL // BASH
# ========== 解决性能问题 ==========# 检查 GPU 使用情况(确认 GPU 是否被正确使用)nvidia-smi
# 使用量化模型(降低内存占用,提升速度)ollama pull llama3.2:3b-q4_K_M
# 减少并发数(降低系统负载)export OLLAMA_NUM_PARALLEL=1
# 使用 vLLM 替代 Ollama(vLLM 性能更优)内存不足
症状:程序崩溃
解决方案:
PRTCL // BASH
# ========== 解决内存不足问题 ==========# 使用更小的模型(减少内存占用)ollama pull llama3.2:3b
# 使用量化模型(进一步降低内存占用)ollama pull llama3.2:3b-q4_K_M
# 增加 swap 空间(使用磁盘作为虚拟内存)sudo fallocate -l 4G /swapfile # 创建 4GB swap 文件sudo chmod 600 /swapfile # 设置权限sudo mkswap /swapfile # 格式化为 swapsudo swapon /swapfile # 启用 swap最佳实践
- ✅ 选择合适的模型:根据任务复杂度选择模型大小
- ✅ 使用量化模型:在精度和性能之间找到平衡
- ✅ 配置模型路由:根据任务类型自动选择模型
- ✅ 启用 GPU 加速:大幅提升推理速度
- ✅ 监控资源使用:及时发现问题
- ✅ 定期备份数据:防止数据丢失
- ✅ 使用混合模式:简单任务用本地,复杂任务用云端
- ✅ 优化并发配置:根据硬件调整并发数
- ✅ 启用缓存:减少重复计算
- ✅ 定期更新:获取最新功能和修复
相关资源
- Ollama 文档: https://ollama.ai/docs
- vLLM 文档: https://docs.vllm.ai
- LocalAI 文档: https://localai.io
- OpenClaw 文档: https://docs.openclaw.ai
- 模型库: https://huggingface.co
最后更新: 2026-03-24 作者: EchoHaoRan
关于我
| 项目 | 内容 |
|---|---|
| 编辑 | echowang |
| 来源 | echospace |
| 邮箱 | echohaoran@gmail.com |
| 简介 | AI 爱好者,专注于大语言模型应用与智能体开发,分享技术与实践心得 |
| 社交 | 欢迎交流讨论,共同成长 |
R P
Rhine Lab Pioneer Division
Auth_Verified: 2026.04.08
Auth_Verified: 2026.04.08
