【硬核实战】Mac mini M4 部署 OpenClaw + Ollama 本地大模型:从零到一打通飞书机器人

【硬核实战】Mac mini M4 部署 OpenClaw + Ollama 本地大模型:从零到一打通飞书机器人

文章目录

📅 前言随着 Mac mini M4 的发布,16GB 统一内存成为了本地跑 AI Agent 的绝佳土壤。本文将记录如何利用 OpenClaw 框架,配合 Ollama 运行的 Qwen 2.5 系列模型,通过 WebSocket 长连接 接入飞书,实现一个完全私有化、极速响应的个人助理。

一、 核心环境准备

硬件:Apple Mac mini M4 (16GB RAM)
系统:macOS Sequoia
模型后端:Ollama (运行 Qwen 2.5-7B)
Agent 框架:OpenClaw (v2026.3.2)
Node 版本:v24.14.0 (通过 nvm 管理)

二、 避坑指南:环境初始化在 Mac 终端部署时,首要解决的是权限与路径问题。

1. 终端常用快捷键* Control + C:强制停止当前运行的命令(如安装卡死时)。

  • sudo:以管理员身份运行。若遇到权限不足,在指令前加 sudo 即可。

2. Node.js 环境修复若遇到 zsh: command not found: openclaw,说明 NVM 路径未加载。

3. 临时加载环境

source ~/.nvm/nvm.sh && nvm use 24 

4. 永久写入配置

echo 'export NVM_DIR="$HOME/.nvm"\n[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.zshrc && source ~/.zshrc 

三、 模型选择:M4 性能调优

针对 16GB 内存,我测试了不同参数量的模型:

  1. Qwen 2.5-14B:逻辑极强,但占用约 9GB 显存,响应稍慢。
  2. DeepSeek-R1-8B:推理能力卓越,但对 OpenClaw 的 Tools (函数调用) 兼容性一般。
  3. Qwen 2.5-7B (推荐):秒回速度,完美支持自动化工具协议,是 M4 下的最佳平衡点。

安装命令:

ollama run qwen2.5:7b 

四、 OpenClaw 配置手术 (JSON 详解)

手动编辑 ~/.openclaw/openclaw.json 是解决配置报错的最快方式。
关键配置项说明:

  • baseUrl: 必须指向 http://127.0.0.1。
  • appSecret: 飞书后台的真实密钥(非 cli_ 开头)。

tools.profile: 设置为 minimal 或 none 以减少小模型工具调用的报错。

在这里插入图片描述

最终稳定版配置参考:

{ "models": { "providers": { "custom-127-0-0-1-11434": { "baseUrl": "http://127.0.0.1", "apiKey": "ollama", "api": "openai-completions", "models": [{ "id": "qwen2.5:7b", "reasoning": false }] } } }, "agents": { "defaults": { "model": { "primary": "custom-127-0-0-1-11434/qwen2.5:7b" } } }, "channels": { "feishu": { "enabled": true, "appId": "cli_xxxxxxxx", "appSecret": "xxxxxxxxxxxx", "connectionMode": "websocket" } }, "gateway": { "port": 18789, "mode": "local" } } 

五、 飞书机器人接入:最后的临门一脚

很多同学卡在“机器人已上线但不回复”,请务必检查飞书后台:

  1. 启用机器人:在“应用功能”中确认开启。
  2. 事件订阅:必须添加 接收消息 (im.message.receive_v1) 事件。
  3. WebSocket 模式:在“事件订阅”中开启 WebSocket 模式。

版本发布:改了权限或事件后,必须创建新版本并点击“申请上线”,否则改动不生效!

在这里插入图片描述

六、 运行与调试

启动网关并观察日志:

启动 Gateway

openclaw gateway --allow-unconfigured 

第一次发消息需授权 (Pairing)

openclaw pairing approve feishu [验证码] 
在这里插入图片描述

当日志出现 [ws] ws client ready 时,你的 M4 机器人就已经正式“活”过来了。

在这里插入图片描述

💡 结语

通过 OpenClaw 与本地模型的结合,我们成功让 Mac mini M4 变成了一个 7x24 小时在线的智能助理,当然目前本地部署的7b模型还是远远不够的,后续可以使用付费token提升模型智力
Q&A:

  • Q: 为什么报错 400: deepseek does not support tools?
  • A: 推理模型暂时无法处理 OpenClaw 的 JSON 函数调用格式,建议将 tools.profile 改为 minimal 或换用 Qwen 模型。

如果你也拥有一台 M4 Mac,不妨按此指南尝试部署,开启你的本地 Agent 之旅!

Read more

Spring Web MVC 入门秘籍:从概念到实践的快速通道(上)

Spring Web MVC 入门秘籍:从概念到实践的快速通道(上)

个人主页:♡喜欢做梦 欢迎  👍点赞  ➕关注  ❤️收藏  💬评论 目录 一、什么是Spring Web MVC? 1.定义 2.关于MVC 2.1什么是MVC? 二、学习Sring MVC 1.项目准备 2.@RestController注解的介绍 3.@RequestMapping注解 1.@RequestMapping只用在类上(相当于“只给文件夹起名,不给文件起名”) 2.@RequestMapping只用在方法上(相当于“只给文件起名,不给文件夹起名”) 3.@RequestMapping用在类和方法上(相当于给文件夹和文件都取名) 三、Postman 1.什么是Postman? 2.关于API 3.传参介绍 1.普通传参:

JavaScript前端对接OCR服务:Ajax异步请求处理识别结果

JavaScript前端对接OCR服务:Ajax异步请求处理识别结果 📖 项目简介与技术背景 随着数字化办公和智能文档处理需求的快速增长,OCR(Optical Character Recognition,光学字符识别) 技术已成为前端智能化的重要一环。无论是发票识别、证件扫描还是路牌文字提取,用户期望通过简单的图片上传即可快速获取结构化文本信息。 传统的OCR方案多依赖本地重型软件或云端闭源服务,存在部署复杂、成本高、响应慢等问题。为此,本项目推出一款轻量级、高精度、支持中英文识别的通用OCR服务,基于 CRNN(Convolutional Recurrent Neural Network)模型 构建,专为无GPU环境优化,适用于资源受限但对识别质量有要求的场景。 该服务不仅提供直观的 WebUI 操作界面,更开放了标准化的 RESTful API 接口,便于前端开发者通过 JavaScript 发起 Ajax 请求,实现无缝集成。本文将重点讲解如何使用原生 fetch 或 jQuery 的 $.ajax

Docker 部署 OpenClaw 踩坑实录:Web UI 访问、飞书配对及自定义模型配置

最近在使用 Docker 部署 OpenClaw 时遇到了一些典型的环境与配置问题。为了方便大家排查,我将这几个核心问题的表现、解决思路以及如何接入公司自己配置的大模型节点进行了梳理。 一、问题一:安装成功但 Web UI 无法访问 1. 现象描述 * 终端提示安装成功,但在浏览器中访问http://127.0.0.1:18789 时,页面提示连接被重置。 * 使用具体的局域网 IP(如192.168.5.30:18789)访问时,同样提示无法连接或无法访问此网站。 2. 原因分析 * 在排除了代理服务器和系统防火墙的干扰后,根本原因在于 OpenClaw 核心网关的跨域访问(CORS)安全机制。 * 系统默认包含白名单配置,它的作用是告诉 OpenClaw 的核心网关:“只有从这些特定的网址(域名或IP)打开的控制台网页,才被允许连接我并下发控制指令”

【前端】使用Vue3过程中遇到加载无效设置点击方法提示不存在的情况,原来是少加了一个属性

【前端】使用Vue3过程中遇到加载无效设置点击方法提示不存在的情况,原来是少加了一个属性

🌹欢迎来到《小5讲堂》🌹 🌹这是《前端》系列文章,每篇文章将以博主理解的角度展开讲解。🌹 🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!🌹 目录 * 前言 * 提示报错 * 问题分析 * 1. **Options API vs Composition API 风格差异** * ✅ **Options API 写法(方法直接放在外面)** * ✅ **Composition API 写法(方法必须在 setup 中定义)** * ✅ **`<script setup>` 语法糖(最简洁的 Composition API)** * 2. **为什么你的代码会报错?** * 3. **解决方案** * 方案 1:改用 **Options API**(适合从 Vue