Mac mini M4 Pro 48GB 本地大模型 + OpenClaw 完整部署指南

Mac mini M4 Pro 48GB 本地大模型 + OpenClaw 完整部署指南

适用硬件:Mac mini M4 Pro · 48GB 统一内存 · 512GB SSD
目标:零费用本地化运行 OpenClaw,替代 Kimi / MiniMax / Claude 等商用 API
更新时间:2026 年 3 月


目录

  1. 模型选型分析
  2. 环境安装
  3. 拉取并运行模型
  4. OpenClaw 配置
  5. 启动 OpenClaw 并测试
  6. 性能优化建议
  7. 常见问题排查
  8. 模型资源链接

一、模型选型分析

M4 Pro 48GB 统一内存约 273 GB/s 内存带宽,是运行 32B 级别模型的理想硬件。针对 OpenClaw 的两个核心需求(coding + 多模态),推荐以下双模型组合:

主力模型:Qwen2.5-Coder 32B(coding 专用)

  • 开源协议:Apache 2.0
  • 参数量:32.5B,量化版(Q4_K_M)约 20GB
  • 在 EvalPlus、LiveCodeBench、BigCodeBench 等主流代码基准上达到开源 SOTA,编码能力与 GPT-4o 相当
  • 代码修复 Aider 基准得分 73.7,与 GPT-4o 持平
  • 支持 40+ 编程语言,context window 最大 128K tokens
  • HuggingFace:https://huggingface.co/Qwen/Qwen2.5-Coder-32B-Instruct

file

多模态模型:Qwen2.5-VL 7B(图像理解)

  • 开源协议:Apache 2.0
  • 参数量:7B,约 5GB
  • 支持文档分析、图表解读、OCR、UI 截图理解、真实场景描述
  • 在 macOS + Ollama 本地运行稳定,多类视觉任务表现出色
  • HuggingFace:https://huggingface.co/Qwen/Qwen2.5-VL-7B-Instruct

file

资源占用一览

模型 用途 量化 磁盘占用 运行内存
qwen2.5-coder:32b-instruct-q4_K_M 主力 coding agent Q4_K_M ~20GB ~22GB
qwen2.5vl:7b 多模态/图像理解 Q4 ~5GB ~6GB

两模型合计约 25GB 存储,同时热加载不超过 30GB 内存,512GB SSD 和 48GB 统一内存均充裕。

运行后端:Ollama

OpenClaw 与 Ollama 原生 API(/api/chat)深度集成,同时支持流式响应和工具调用(tool calling),是最简洁、最稳定的本地部署路径。


二、环境安装

第一步:安装 Homebrew(已有可跳过)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

第二步:安装 Ollama

brew install ollama

验证安装:

ollama --version

第三步:安装 Node.js

OpenClaw 基于 Node.js 运行,需要 v18 或更高版本。

brew install node

验证:

node --version   # 应显示 v18.x 或更高
npm --version

第四步:安装 OpenClaw

npm install -g openclaw

验证:

openclaw --version

三、拉取并运行模型

启动 Ollama 服务

ollama serve

 #OLLAMA_NUM_CTX=65536 ollama serve

建议另开一个终端窗口继续操作,或参考第六节配置为开机自启服务。

拉取 Coding 主力模型

ollama pull qwen2.5-coder:32b-instruct-q4_K_M

文件约 20GB,根据网速需要等待。建议在网络稳定时挂后台下载。

拉取完成后测试:

ollama run qwen2.5-coder:32b-instruct-q4_K_M

输入 写一个 Python 快速排序函数,确认有正常响应后,输入 /bye 退出。

file

# 1. 检查 Ollama 是否正在运行
ollama ps

# 2. 直接测试模型是否能响应(排除 Openclaw 问题)
ollama run qwen2.5-coder:32b-instruct-q4_K_M "你现在用的什么模型?"

拉取多模态模型

ollama pull qwen2.5vl:7b

文件约 5GB。测试:

ollama run qwen2.5vl:7b "描述一下你的能力"

确认模型列表

ollama list

输出应包含:

NAME                                    ID              SIZE    MODIFIED
qwen2.5-coder:32b-instruct-q4_K_M      ...             20 GB   ...
qwen2.5vl:7b                           ...             5.0 GB  ...

四、OpenClaw 配置

⚠️ 关键注意事项

不要 使用 Ollama 的 OpenAI 兼容 URL(http://127.0.0.1:11434/v1)接入 OpenClaw。这会破坏工具调用,模型会将原始工具 JSON 作为纯文本输出。

正确的 baseUrl 是:http://127.0.0.1:11434(不加 /v1)


方式一:通过 Onboarding 向导(推荐新手)

openclaw onboard

按向导提示依次操作:

  1. Provider 选择 Ollama
  2. Base URL 填 http://127.0.0.1:11434(直接回车用默认值)
  3. 模式选择 Local only
  4. 主模型选 qwen2.5-coder:32b-instruct-q4_K_M

向导会自动写入配置文件。


方式二:手动编辑配置文件(推荐有经验者)

查找配置文件路径:

openclaw config path

一般位于 ~/.openclaw/openclaw.json。用编辑器打开,将内容替换为:

{
  "models": {
    "mode": "merge",
    "providers": {
      "ollama": {
        "baseUrl": "http://127.0.0.1:11434",
        "apiKey": "ollama-local",
        "api": "ollama",
        "models": [
          {
            "id": "qwen2.5-coder:32b-instruct-q4_K_M",
            "name": "Qwen2.5 Coder 32B",
            "reasoning": false,
            "input": ["text"],
            "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
            "contextWindow": 131072,
            "maxTokens": 8192
          },
          {
            "id": "qwen2.5vl:7b",
            "name": "Qwen2.5 VL 7B",
            "reasoning": false,
            "input": ["text", "image"],
            "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
            "contextWindow": 32768,
            "maxTokens": 4096
          }
        ]
      }
    }
  },
  "agents": {
    "defaults": {
      "model": {
        "primary": "ollama/qwen2.5-coder:32b-instruct-q4_K_M",
        "fallbacks": ["ollama/qwen2.5vl:7b"]
      },
      "models": {
        "ollama/qwen2.5-coder:32b-instruct-q4_K_M": { "alias": "coder" },
        "ollama/qwen2.5vl:7b": { "alias": "vision" }
      }
    }
  }
}

保存后重启网关:

openclaw gateway restart

验证配置

openclaw models list

应能看到两个模型均被识别,provider 标注为 ollama


五、启动 OpenClaw 并测试

启动网关

openclaw start

打开浏览器访问 Web UI:http://localhost:3000


测试一:基础 Coding 能力

发送:

用 Python 写一个读取 CSV 文件并存入 SQLite 数据库的函数,要有完整的异常处理

正常情况下应在 30 秒内收到完整、可运行的代码。


测试二:Tool Calling 稳定性

发送:

在当前目录创建一个名为 test.py 的文件,内容是打印 hello world

这个任务要求 OpenClaw 调用文件写入工具。完成后检查目录里是否出现了 test.py,验证 tool calling 是否正常。


测试三:多模态图像理解

切换到 vision 模型,发送(并附上一张代码截图):

@vision 分析这张截图里的代码,指出可能存在的 bug

测试四:命令行快速测试(无需 UI)

# 直接通过 curl 测试 Ollama API 是否正常
curl http://127.0.0.1:11434/api/chat \
  -d '{
    "model": "qwen2.5-coder:32b-instruct-q4_K_M",
    "messages": [{"role": "user", "content": "用 Python 写 hello world"}],
    "stream": false
  }'

收到正常 JSON 响应即代表 Ollama 服务正常。

测试五:验证 Ollama 服务和模型可用性

# 1. 检查 Ollama 是否正在运行
ollama ps

# 2. 直接测试模型是否能响应(排除 Openclaw 问题)
ollama run qwen2.5-coder:32b-instruct-q4_K_M "你现在用的什么模型?"

六、性能优化建议

增大上下文窗口

OpenClaw 的系统 prompt 约 1.7 万 token,加上 KV cache 会额外占用 4-8GB 内存。建议显式设置更大的上下文:

# 启动 Ollama 时设置环境变量
OLLAMA_NUM_CTX=65536 ollama serve

或在配置文件里将 contextWindow 设为 65536


Temperature 设为接近 0

Agent 任务建议将 temperature 设为 0 到 0.2。更高的值容易导致工具调用出现幻觉:

openclaw.json 的 agent defaults 里添加:

"temperature": 0.1

设置 Ollama 开机自启(launchd)

sudo tee /Library/LaunchDaemons/com.ollama.server.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.ollama.server</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/ollama</string>
        <string>serve</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>EnvironmentVariables</key>
    <dict>
        <key>OLLAMA_NUM_CTX</key>
        <string>65536</string>
    </dict>
</dict>
</plist>
EOF

sudo launchctl load /Library/LaunchDaemons/com.ollama.server.plist

内存管理建议

  • 按需加载模型,不要同时保持两个模型热加载
  • 运行 Ollama + 32B 模型时,关闭其他内存占用较大的应用(如 Chrome 多标签页、虚拟机等)
  • 量化选 Q4_K_M,不要低于 Q4,否则 tool calling 准确率会明显下降

七、常见问题排查

问题 1:OpenClaw 收不到回复,或只显示原始 JSON

原因: 使用了 /v1 的 OpenAI 兼容 URL。

解决: 确保 baseUrlhttp://127.0.0.1:11434,删掉 /v1

openclaw config set models.providers.ollama.baseUrl "http://127.0.0.1:11434"

问题 2:模型响应很慢(每个 token 需要几秒)

原因: 正常现象,32B 模型在 M4 Pro 上约 10-20 tok/s。首次请求还需要 10-30 秒将模型从磁盘加载到内存。

解决方向:

  • 接受现状:适合后台 agent 任务,不适合实时对话
  • 降级到 qwen2.5-coder:14b,速度提升约 2 倍,coding 能力略降
  • 确保 OLLAMA_NUM_CTX 不要设得过大(超过 128K 会显著拖慢速度)

问题 3:模型没有出现在 OpenClaw 的模型列表

原因: 该模型没有向 Ollama 上报工具支持(tool support)。

解决: 在配置文件的 models.providers.ollama.models 数组里手动定义该模型,并加入 agents.defaults.models 白名单。参见第四节的手动配置示例。


问题 4:内存不足 / 系统卡顿

排查步骤:

# 查看当前内存占用
sudo memory_pressure

# 查看 Ollama 占用
ps aux | grep ollama

解决:

  • 一次只加载一个大模型
  • 减小 OLLAMA_NUM_CTX(从 65536 降到 32768)
  • 关闭浏览器、IDE 等占内存应用

问题 5:网络下载失败 / 模型拉取中断

# 重新执行 pull,Ollama 支持断点续传
ollama pull qwen2.5-coder:32b-instruct-q4_K_M

如果网络不稳定,可考虑从 HuggingFace 手动下载 GGUF 文件后本地导入:

# 手动导入本地 GGUF 文件
ollama create my-coder -f Modelfile

八、模型资源链接

资源 链接
Qwen2.5-Coder 32B(HuggingFace) https://huggingface.co/Qwen/Qwen2.5-Coder-32B-Instruct
Qwen2.5-VL 7B(HuggingFace) https://huggingface.co/Qwen/Qwen2.5-VL-7B-Instruct
Ollama 模型库 - Qwen2.5-Coder https://ollama.com/library/qwen2.5-coder
Ollama 模型库 - Qwen2.5-VL https://ollama.com/library/qwen2.5vl
OpenClaw 官方文档 https://docs.openclaw.ai
OpenClaw Ollama 集成文档 https://docs.openclaw.ai/providers/ollama
Ollama 官网 https://ollama.com

整体架构总结

你(消息渠道 / Web UI)
        ↓
   OpenClaw 网关
        ↓
   Ollama 本地服务(:11434)
        ↓
qwen2.5-coder:32b  /  qwen2.5vl:7b
(运行在 Mac mini M4 Pro 48GB 本地)

部署完成后完全本地化,零 API 费用,数据不出机器。所有推理在本机 GPU/Neural Engine 上完成,M4 Pro 的 Metal 加速会自动生效。


本文档基于 OpenClaw 2026.x 版本及 Ollama 最新稳定版整理。

为者常成,行者常至