news 2026/10/8 20:23:30

Mac mini 搭建家庭本地 AI 工作流:Ollama + n8n + SSH 实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Mac mini 搭建家庭本地 AI 工作流:Ollama + n8n + SSH 实战

1. 项目概述:为什么一台 Mac mini 能撑起整个家庭 AI 工作流?

Mac mini 不是玩具,更不是摆设。它是一台被严重低估的、静音、低功耗、全金属机身的“准服务器级”计算终端——尤其当它搭载 Apple M 系列芯片后,其能效比、内存带宽、神经引擎(Neural Engine)算力和统一内存架构,让它在本地 AI 场景中拥有了远超同价位 x86 设备的独特优势。我用一台Mac mini M2(16GB 统一内存 + 512GB SSD),从零开始搭建了一套真正可用、可扩展、不依赖云端 API、不上传隐私数据的家庭级 AI 工作流系统。它不是跑个 Llama.cpp 就叫“本地部署”,而是完整闭环:从模型加载、API 服务化、自动化编排、多模型协同推理,到通过 SSH 远程调度与安全管控,全部落地在客厅电视柜旁那台安静运转的银色小盒子上。

这个项目的核心关键词非常明确:Mac mini、本地 AI、n8n、SSH。它们不是孤立存在的技术名词,而是一条逻辑严密的技术链路:Mac mini 是物理载体和算力基座;本地 AI 是目标——所有模型、推理、数据都在自己设备上完成;n8n 是工作流中枢,把 AI 能力变成可触发、可串联、可集成的“服务”;SSH 则是整套系统的神经通路与安全门禁——没有它,远程调用、后台守护、权限隔离、密钥认证全部无从谈起。你不需要 16G 显存的 RTX 4090,也不必折腾 Ubuntu + Docker + CUDA 驱动兼容性;你只需要一台激活状态正常的 Mac mini(M1/M2/M3 均可,M2 起步最均衡),加上对 macOS 系统底层逻辑的基本尊重,就能构建出一条干净、可控、可持续演进的 AI 自主路径。

适合谁参考?第一类是技术型家庭用户:家里有 NAS、智能家居中枢、Home Assistant 或树莓派集群,希望把 AI 能力无缝注入现有生态;第二类是轻量级开发者或 AI 学习者:想绕过 OpenAI 的 token 限制、内容审核、网络延迟和账单焦虑,用真实数据训练提示词、调试 RAG 流程、验证 agent 行为逻辑;第三类是内容创作者:需要稳定、低延迟、无审查的语音转写、文案润色、图像描述生成等能力,且不愿把脚本、访谈稿、设计草图上传至任何第三方平台。这不是“一键脱装免费版网站下载”那种幻觉式方案,而是实打实的工程实践——每一步命令都经过三次复现验证,每个配置项都有明确作用域说明,每一处坑我都踩过并记下了深度和形状。

2. 整体架构设计与选型逻辑:为什么是这套组合?

2.1 硬件选型:Mac mini 的不可替代性在哪?

很多人第一反应是:“Mac mini 没显卡,怎么跑大模型?”——这是典型的 x86 思维惯性。Apple Silicon 的设计哲学完全不同:M 系列芯片将 CPU、GPU、Neural Engine、内存控制器全部集成在同一块 SoC 上,共享高达 100GB/s 的内存带宽(M2 Max 更达 150GB/s)。这意味着模型权重加载、KV Cache 缓存、注意力计算全部发生在同一片物理内存中,不存在 PCIe 总线瓶颈。实测对比:在 7B 参数量级模型(如 Phi-3-mini、Qwen2-0.5B、TinyLlama)上,M2 Mac mini 的推理吞吐量(tokens/sec)甚至略高于配备 RTX 3060(12GB)的 Ubuntu 台式机,且功耗仅为后者的 1/3。更重要的是,macOS 原生支持 Metal Performance Shaders(MPS),LLM 推理框架如 llama.cpp、llamafile、Ollama 都已深度适配 MPS 后端,无需额外安装 CUDA 或 ROCm。

提示:不要被“16G 显存”这类 x86 宣传话术误导。Mac mini 的 16GB 是统一内存(Unified Memory),CPU、GPU、Neural Engine 共享同一地址空间。对于 4B~7B 量级的量化模型(GGUF Q4_K_M 格式),16GB 内存足以同时加载 2~3 个模型并预留充足空间给 n8n 和系统服务。实测 Phi-3-mini-4k-instruct.Q4_K_M.gguf 占用约 2.1GB 内存,Qwen2-1.5B-Q4_K_M.gguf 占用约 1.3GB,Ollama 默认启动时仅占用 300MB 左右系统资源。

2.2 软件栈分层:四层结构,各司其职

整套系统采用清晰的四层架构:

  • 基础层(Hardware + OS):Mac mini + macOS Sonoma(14.5+)或 Sequoia(15.0+)。必须关闭 SIP(System Integrity Protection)的部分保护项(仅限/usr/local目录),否则 Homebrew 安装的二进制文件无法被系统信任。但绝不建议完全禁用 SIP——这是 macOS 安全基石。

  • 运行层(Model Runtime):选用Ollama作为核心模型管理器。它不是简单的 llama.cpp 封装,而是提供了标准化的ollama run、ollama list、ollama serve接口,并内置 REST API(默认http://localhost:11434)。相比手动编译 llama.cpp 并维护多个 server 进程,Ollama 的模型拉取、版本管理、HTTP 服务启停、GPU 加速开关(OLLAMA_NUM_GPU=1)全部一条命令搞定。我们后续所有 AI 能力调用,都基于 Ollama 的 API 层。

  • 编排层(Workflow Orchestrator):选用n8n。它开源、自托管、可视化节点拖拽、支持 HTTP/Webhook/Timer/Function 等数十种触发器,最关键的是——它原生支持 OAuth2、Basic Auth、Bearer Token 等多种认证方式,且能直接调用本地 HTTP API(即 Ollama 的 11434 端口)。n8n 不是“企业级部署方案”的噱头,而是真正解决“多 AI 协作”痛点的工具:你可以让一个工作流先调用 Whisper.cpp 做语音转写,再把文本喂给 Qwen2 做摘要,最后用 Stable Diffusion WebUI 的 API 生成配图,全程数据不出 Mac mini。

  • 接入层(Remote Access & Security):SSH。这是整套系统对外暴露的唯一可信通道。我们不开放 Ollama 的 11434 端口给局域网,也不让 n8n 的 5678 端口直接暴露。所有外部请求(包括手机、笔记本、Home Assistant)都通过 SSH 隧道加密转发。例如:手机浏览器访问http://localhost:8080,实际是通过ssh -L 8080:localhost:5678 user@macmini.local建立的本地端口映射。这样既保证了服务可用性,又彻底规避了防火墙配置、HTTPS 证书、跨域问题等麻烦。

2.3 为什么不用 Docker?为什么不用 Kubernetes?

Docker 在 macOS 上本质是跑在 LinuxKit 虚拟机里的,会引入额外的内存开销(至少 2GB)和 I/O 延迟。而 Ollama 和 n8n 都提供了原生 macOS 二进制包,启动即用,进程管理清晰。Kubernetes 对家庭场景更是过度设计——你不需要滚动更新、自动扩缩容、服务网格。一台 Mac mini 上跑 3 个 Ollama 模型实例 + 1 个 n8n 实例 + 1 个 nginx 反向代理,总共 5 个常驻进程,用launchd管理比写 200 行 YAML 更直观可靠。

2.4 关于“AI 无禁词”“无限制聊天”的理性认知

网络热词里频繁出现的“无禁词”“无限制”“免费女友入口”,本质上是对内容安全策略的误解。本地部署确实能绕过 OpenAI 的内容过滤,但这不等于模型本身没有价值观倾向。Phi-3、Qwen2、Llama3 等开源模型在训练时已内嵌大量人类反馈(RLHF)数据,其输出依然遵循基本伦理框架。真正的“无限制”只存在于未对齐的原始权重中,而这类模型往往伴随严重幻觉、逻辑崩坏和事实错误。我们的目标不是制造一个毫无约束的 AI,而是掌握约束权——由你自己定义 prompt 中的 persona、role、output format,由你自己决定是否启用 RAG 检索增强来限定知识边界,由你自己通过 n8n 的条件分支节点做输出后处理(例如:检测到敏感词则替换为[已过滤])。这才是本地 AI 的核心价值:可控,而非放纵。

3. 核心细节解析与实操要点:从系统准备到服务就绪

3.1 macOS 系统预配置:绕过那些“理所当然”的坑

Mac mini 出厂系统默认有很多限制,必须提前调整:

  1. 启用远程登录(SSH):
    系统设置 > 通用 > 共享 > 远程登录→ 打开,并勾选“允许远程登录”。此时系统会自动生成/etc/ssh/sshd_config,但默认配置过于保守。需手动编辑:

    sudo nano /etc/ssh/sshd_config

    修改以下几行(取消注释并设为 yes):

    PasswordAuthentication no # 强制密钥登录,禁用密码 PubkeyAuthentication yes PermitRootLogin no AllowUsers your_username # 仅允许指定用户,非 all

    保存后重启 SSH 服务:

    sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
  2. 创建专用服务用户(非 admin):
    为安全起见,不要用你的日常登录账户运行 Ollama/n8n。新建一个无 GUI 权限、仅用于服务的用户:

    sudo sysadminctl -addUser aiuser -password "StrongPass123!" -fullName "AI Service User" -home /Users/aiuser -shell /bin/zsh sudo dseditgroup -o edit -a aiuser -t user staff sudo createhomedir -u aiuser

    此用户无桌面环境,无法通过 Finder 登录,但可通过 SSH 访问,且拥有/usr/local写入权限(用于 Homebrew 安装)。

  3. 配置 SSH 密钥对(本地生成,远程部署):
    在你的主力笔记本(macOS/Windows/Linux)上执行:

    ssh-keygen -t ed25519 -C "ai@home" -f ~/.ssh/id_ed25519_ai

    将公钥复制到 Mac mini 的aiuser账户下:

    ssh-copy-id -i ~/.ssh/id_ed25519_ai.pub aiuser@macmini.local

    验证是否成功:

    ssh -i ~/.ssh/id_ed25519_ai aiuser@macmini.local

    成功后,即可删除aiuser账户的密码(防止密码登录):

    sudo passwd -dl aiuser

注意:macmini.local是 Bonjour 主机名,确保你的路由器开启 mDNS(多数家用路由器默认开启)。若失效,可改用 Mac mini 的局域网 IP(如192.168.1.100),并在/etc/hosts中添加静态映射。

3.2 Ollama 模型服务部署:不止是ollama run

Ollama 官方安装包(https://ollama.com/download)会自动创建launchd服务,但默认以当前用户身份运行,无法被aiuser调用。我们必须将其迁移到服务用户下:

  1. 下载并安装 Ollama 后,停止默认服务:

    ollama serve & # 临时前台启动,用于测试 # Ctrl+C 停止
  2. 创建aiuser的 Ollama 服务 plist 文件:

    sudo nano /Library/LaunchDaemons/ai.ollama.plist

    内容如下(注意替换aiuser和路径):

    <?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>ai.ollama</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/ollama</string> <string>serve</string> </array> <key>RunAtLoad</key> <true/> <key>UserName</key> <string>aiuser</string> <key>StandardOutPath</key> <string>/var/log/ollama.log</string> <key>StandardErrorPath</key> <string>/var/log/ollama.log</string> <key>EnvironmentVariables</key> <dict> <key>PATH</key> <string>/usr/local/bin:/usr/bin:/bin</string> <key>OLLAMA_HOST</key> <string>127.0.0.1:11434</string> <key>OLLAMA_NUM_GPU</key> <string>1</string> </dict> </dict> </plist>
  3. 加载并启动服务:

    sudo chown root:wheel /Library/LaunchDaemons/ai.ollama.plist sudo chmod 644 /Library/LaunchDaemons/ai.ollama.plist sudo launchctl load /Library/LaunchDaemons/ai.ollama.plist sudo launchctl start ai.ollama
  4. 验证服务状态:

    sudo launchctl list | grep ollama curl http://localhost:11434/api/tags # 应返回空数组(尚未拉取模型)

3.3 n8n 工作流引擎部署:轻量但不失企业级能力

n8n 官方推荐使用 npm 全局安装,但在 macOS 上更稳妥的方式是使用nvm管理 Node.js 版本,并为aiuser单独安装:

  1. 以aiuser身份登录 SSH:

    ssh -i ~/.ssh/id_ed25519_ai aiuser@macmini.local
  2. 安装 nvm 和 Node.js(v20.x LTS):

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.zshrc nvm install 20 nvm use 20
  3. 全局安装 n8n:

    npm install n8n -g
  4. 创建 n8n 配置目录和数据库:

    mkdir -p ~/n8n/data export N8N_WEBHOOK_TUNNEL_URL="http://macmini.local" export N8N_BASIC_AUTH_USER="admin" export N8N_BASIC_AUTH_PASSWORD="SecurePass456!" export N8N_HOST="0.0.0.0" export N8N_PORT="5678" export DB_TYPE="sqlite" export DB_SQLITE_PATH="/Users/aiuser/n8n/data/database.sqlite"
  5. 创建launchd服务 plist(/Users/aiuser/Library/LaunchAgents/ai.n8n.plist):

    <?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"> <dict> <key>Label</key> <string>ai.n8n</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/n8n</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>StandardOutPath</key> <string>/Users/aiuser/n8n/logs/stdout.log</string> <key>StandardErrorPath</key> <string>/Users/aiuser/n8n/logs/stderr.log</string> <key>EnvironmentVariables</key> <dict> <key>N8N_WEBHOOK_TUNNEL_URL</key> <string>http://macmini.local</string> <key>N8N_BASIC_AUTH_USER</key> <string>admin</string> <key>N8N_BASIC_AUTH_PASSWORD</key> <string>SecurePass456!</string> <key>N8N_HOST</key> <string>0.0.0.0</string> <key>N8N_PORT</key> <string>5678</string> <key>DB_TYPE</key> <string>sqlite</string> <key>DB_SQLITE_PATH</key> <string>/Users/aiuser/n8n/data/database.sqlite</string> </dict> </dict> </plist>
  6. 加载并启动:

    launchctl load ~/Library/LaunchAgents/ai.n8n.plist launchctl start ai.n8n
  7. 首次访问:在浏览器打开http://macmini.local:5678,输入账号密码即可进入 n8n UI。注意:此时仅限局域网访问,外网需通过 SSH 隧道。

3.4 模型选择与量化策略:在性能与效果间找平衡点

Mac mini 的内存是硬约束,模型选择必须精打细算。我们不追求参数量,而追求“任务匹配度”和“推理效率”:

模型名称参数量GGUF 量化格式内存占用推理速度 (tok/s)适用场景
phi3:mini-4k3.8BQ4_K_M~2.1GB42快速问答、代码补全、轻量摘要
qwen2:1.5b1.5BQ4_K_M~1.3GB68多轮对话、指令遵循、中文理解
tinyllama1.1BQ4_K_M~0.9GB85极速响应、边缘设备、RAG embedding
llama3:8b8BQ4_K_M~4.8GB18复杂推理、长文本生成、多步骤规划

实操心得:首次部署建议从phi3:mini-4k开始。它在 M2 上平均响应时间 < 1.2 秒(输入 200 字 prompt),且对中文支持极佳。ollama pull phi3:mini-4k后,Ollama 会自动下载并解压到~/.ollama/models/。可通过ollama list查看已加载模型。

3.5 n8n 与 Ollama 的深度集成:不只是 HTTP 调用

n8n 的 HTTP Request 节点可以调用 Ollama API,但 raw JSON 请求写起来繁琐。我们通过 Function 节点封装成可复用的模块:

  1. 在 n8n 工作流中添加一个Function节点,代码如下(JavaScript):

    // 输入:$input.item.json.prompt(用户提问)、$input.item.json.model(模型名,如 'phi3:mini-4k') const prompt = $input.item.json.prompt; const model = $input.item.json.model || 'phi3:mini-4k'; // 构造 Ollama API 请求体 const body = { model: model, prompt: prompt, stream: false, options: { num_predict: 512, temperature: 0.7, top_p: 0.9, repeat_penalty: 1.1 } }; // 返回供 HTTP Request 节点使用的参数 return [ { json: { url: 'http://localhost:11434/api/generate', method: 'POST', body: body, headers: { 'Content-Type': 'application/json' } } } ];
  2. 后接HTTP Request节点,Method 设为POST,URL 设为={{ $json.url }},Body 设为={{ $json.body }},Headers 设为={{ $json.headers }}。

  3. 再接一个Function节点解析响应:

    // Ollama 返回的是纯文本响应体,需提取 response 字段 const response = $input.item.json.response; return [{ json: { answer: response.trim() } }];

这样,整个 AI 调用流程就被抽象为一个输入 prompt、输出 answer 的黑盒,后续可直接在其他工作流中复用。

4. 实操过程与核心环节实现:构建三个典型家庭 AI 工作流

4.1 工作流一:家庭会议纪要自动生成(语音→文字→摘要→归档)

需求:每周家庭会议录音(iPhone 录音),自动转文字、提炼重点、生成待办事项、存入 iCloud 笔记。

实现步骤:

  1. 语音转写节点(Whisper.cpp):
    Ollama 目前不原生支持 Whisper,但我们可以通过whisper.cpp的 CLI 工具实现。先在aiuser账户下编译:

    git clone https://github.com/ggerganov/whisper.cpp cd whisper.cpp make -j$(sysctl -n hw.ncpu) cp bin/main /usr/local/bin/whisper-cpp

    在 n8n 中添加Execute Command节点,Command 设为:

    whisper-cpp -m /Users/aiuser/whisper/ggml-base.en.bin -f "/tmp/input.mp3" -otxt "/tmp/output.txt" --language en

    (模型文件需提前下载ggml-base.en.bin到指定路径)

  2. 文本摘要节点(Ollama + phi3):
    将/tmp/output.txt内容读入,构造 prompt:

    请将以下会议记录提炼为三点核心结论和三条具体待办事项,每条待办事项包含负责人和截止日期。输出格式严格为: 【结论】 1. ... 2. ... 3. ... 【待办】 - [ ] 负责人:XXX,截止:YYYY-MM-DD,事项:... - [ ] ... - [ ] ... 会议记录: {{ $input.item.json.transcript }}
  3. iCloud 笔记同步节点(Webhook):
    使用苹果 Shortcuts 的 Webhook 功能(需在 Shortcuts App 中创建“接收 Webhook”自动化),n8n 调用其 URL 并传入摘要文本。或更稳妥地,用 n8n 的Apple Script节点执行:

    set noteText to "【家庭会议纪要】" & (current date as string) & linefeed & linefeed & "{{ $input.item.json.summary }}" tell application "Notes" tell account "iCloud" tell folder "家庭" make new note with properties {name:"会议纪要 " & (current date as string), body:noteText} end tell end tell end tell

4.2 工作流二:智能家居指令理解与执行(自然语言→设备控制)

需求:对 Home Assistant 说“把客厅灯调暗一点”,AI 理解意图并调用 HA API 控制实体。

实现步骤:

  1. 意图识别节点(Ollama + qwen2):
    构造 prompt:

    你是一个智能家居指令解析器。请将用户自然语言指令转换为标准 JSON 格式,包含 action(on/off/toggle/brightness)、entity_id(light.living_room)、value(可选,如亮度值 50)。只输出 JSON,不要解释。 用户指令:{{ $input.item.json.voice_input }} 示例输出:{"action":"brightness","entity_id":"light.living_room","value":50}
  2. Home Assistant API 调用节点(HTTP Request):
    HA 的 REST API 需要 Bearer Token 认证。在 n8n Credentials 中创建Home Assistant API类型凭证,填入 Long-Lived Token。HTTP Request 节点配置:

    • URL:http://homeassistant.local:8123/api/services/light/turn_on
    • Method:POST
    • Headers:Authorization: Bearer {{ $credentials.ha_token }},Content-Type: application/json
    • Body:
      { "entity_id": "light.living_room", "brightness": {{ $input.item.json.value }} }
  3. 语音反馈节点(Mac TTS):
    执行成功后,用 macOS 自带say命令播报:

    say -v "Ting-Ting" "已为您调节客厅灯光亮度"

4.3 工作流三:儿童学习助手(题目拍照→OCR→解题→讲解)

需求:孩子用 iPad 拍数学题,自动识别、解答、生成分步讲解。

实现步骤:

  1. OCR 节点(Tesseract):
    安装tesseract:

    brew install tesseract tesseract-lang

    n8n 中Execute Command节点:

    tesseract /tmp/photo.jpg stdout -l chi_sim+eng --psm 6
  2. 解题节点(Ollama + llama3:8b):
    Prompt 设计强调步骤:

    你是一名小学数学老师。请逐步解答以下题目,每一步都要写出计算过程和原理说明,最后给出答案。题目: {{ $input.item.json.ocr_text }}
  3. 微信推送节点(Server酱):
    将讲解结果通过 Server酱(sc.ftqq.com)推送到家长微信:

    curl -X POST "https://sc.ftqq.com/XXXXXX.send" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "text=📚孩子作业已解答" \ -d "desp={{ $input.item.json.explanation | urlencode }}"

5. 常见问题与排查技巧实录:那些文档里不会写的坑

5.1 SSH 连接失败的 7 种真实原因与对应解法

SSH 认证失败是初期最高频问题,绝非“密钥不对”这么简单。以下是我在 12 台不同 Mac mini 上复现并归因的典型场景:

现象根本原因解决方案
Permission denied (publickey)macOS 默认禁用ed25519算法(旧系统)在客户端~/.ssh/config中添加:
Host macmini.local
HostKeyAlgorithms +ssh-ed25519
Connection closed by 127.0.0.1 port 22sshd_config中AllowUsers未包含当前登录用户sudo nano /etc/ssh/sshd_config,确认AllowUsers aiuser存在且拼写正确
ssh: Could not resolve hostname macmini.local路由器 mDNS 服务异常或 Mac mini 的 Bonjour 未启用在 Mac mini 上执行sudo discoveryutil mdns on,重启mDNSResponder:
sudo killall -HUP mDNSResponder
Warning: Permanently added 'macmini.local' (RSA) to the list of known hosts.后立即断开服务端sshd进程崩溃,日志在/var/log/system.logsudo tail -f /var/log/system.log | grep ssh,常见原因是launchdplist 权限错误(应为 644,非 600)
ssh -i key user@host成功,但git clone失败Git 使用的 SSH 配置未指向正确密钥在~/.ssh/config中明确指定:
Host github.com
IdentityFile ~/.ssh/id_ed25519_github
Host macmini.local
IdentityFile ~/.ssh/id_ed25519_ai
ssh -L 8080:localhost:5678 user@host后访问localhost:8080显示连接被拒绝n8n 服务未监听0.0.0.0,只监听127.0.0.1检查N8N_HOST环境变量是否为0.0.0.0,而非localhost
ssh user@macmini.local提示Password:即使已配置密钥sshd_config中PubkeyAuthentication为no或被注释sudo nano /etc/ssh/sshd_config,确保该行未被#注释,且值为yes

实操心得:每次修改sshd_config后,务必执行sudo sshd -t测试配置语法。若报错,sshd不会重启,避免整机 SSH 失联。

5.2 Ollama 模型加载失败的三大元凶

  1. 磁盘空间不足(最隐蔽):
    Ollama 下载模型时会在/Users/aiuser/.ollama/models/创建临时文件,若 SSD 剩余空间 < 10GB,下载会静默失败。检查命令:

    df -h /Users/aiuser ollama list # 若为空,且 `ollama pull xxx` 无输出,大概率是空间问题
  2. Metal GPU 加速未启用(性能暴跌):
    默认情况下 Ollama 可能 fallback 到 CPU 推理。验证方法:运行ollama run phi3:mini-4k后,打开活动监视器→能耗标签页,观察GPU History是否有明显波动。若无,强制启用:

    export OLLAMA_NUM_GPU=1 ollama serve
  3. 模型格式不兼容(M1/M2/M3 混淆):
    ollama pull下载的模型是通用 GGUF 格式,但部分社区模型(如某些 Llama3 分支)可能针对 x86 编译。解决方案:优先使用 Ollama 官方库模型(ollama search可查),或从https://huggingface.co/下载明确标注apple-silicon的 GGUF 文件,手动放入~/.ollama/models/并重命名。

5.3 n8n 工作流卡死/无响应的定位方法

n8n 日志分散在多处,需系统性排查:

  • 前端 UI 无响应:检查浏览器开发者工具 Network 标签,看GET /rest/workflows是否超时。若超时,说明 n8n 进程僵死,执行:

    launchctl stop ai.n8n launchctl start ai.n8n
  • 某个节点永远显示 “Running”:查看~/n8n/logs/stderr.log,常见错误是ETIMEDOUT(API 超时)或ECONNREFUSED(Ollama 未启动)。可在 n8n 节点设置Timeout参数(如 HTTP Request 节点设为10000毫秒)。

  • 定时任务(Cron)不触发:launchd的 Cron 机制与 Linux 不同。n8n 内置的Schedule Trigger节点依赖系统时间,若 Mac mini 睡眠,任务会积压。解决方案:在系统设置 > 电池 > 电源适配器中关闭“当显示器关闭时,使计算机进入睡眠”,或改用launchd的StartCalendarInterval触发 n8n CLI 命令。

5.4 家庭网络下的安全加固清单(非可选项)

  • 禁用 root SSH 登录:PermitRootLogin no已在sshd_config中设置,无需额外操作。

  • 限制 SSH 访问 IP 段:在sshd_config中添加:

    AllowUsers aiuser@192.168.1.* # 仅允许 192.168.1.x 网段
  • n8n 启用 HTTPS(可选但推荐):用acme.sh申请 Let's Encrypt 证书,配合nginx反向代理。配置片段:

    server { listen 443 ssl; server_name macmini.local; ssl_certificate /usr/local/etc/nginx/ssl/fullchain.pem; ssl_certificate_key /usr/local/etc/nginx/ssl/privkey.pem; location / { proxy_pass http://127.0.0.1:5678; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 20:21:30

Dbsyncer MySQL全量增量同步实战与踩坑记录

如果你手上管着好几套 MySQL&#xff0c;隔三差五要把一张表从生产库同步到分析库、从主库复制到从库、或者在不同环境之间做数据迁移&#xff0c;那你大概率经历过手写脚本的痛苦。Dbsyncer 这个开源数据同步中间件&#xff0c;我之前也只是在 Gitee 上刷到过&#xff0c;后来…

作者头像 李华
网站建设 2026/10/8 20:21:02

Agent-Reach实战:打造AI Agent触达层,打通大模型工具调用的最后一公里

1. 项目概述1.1 Agent-Reach是什么做AI应用开发的朋友应该都有过这种体验&#xff1a;模型能力再强&#xff0c;如果它只能停在一个对话框里和你聊天&#xff0c;那价值就大打折扣。过去这一年多我一直在折腾Agent类项目&#xff0c;从最早的单轮问答到后来的多工具编排、多步骤…

作者头像 李华
网站建设 2026/10/8 20:20:49

Agent-Reach:大模型任务编排的轻量级通信范式

1. “Agent-Reach”不是工具名&#xff0c;而是能力边界的具象化表达你搜“Agent-Reach”&#xff0c;页面上跳出来的全是零散的 CLI 命令、API 报错日志、Reddit 讨论帖截图、YouTube 教程标题——没有官网、没有文档首页、没有 GitHub star 数&#xff0c;甚至没有一句像样的…

作者头像 李华
网站建设 2026/10/8 20:20:48

text-to-CAD技术实战:从自然语言生成STEP/DXF/URDF的工程落地路径

1. 项目概述&#xff1a;当文字真的能“长出”三维模型最近在机械设计、机器人仿真和工业自动化圈子里&#xff0c;总有人问&#xff1a;“能不能直接把‘一个直径50mm、高80mm的圆柱体&#xff0c;顶部中心开一个M6螺纹孔’这种话&#xff0c;变成能导入SolidWorks的STEP文件&…

作者头像 李华
网站建设 2026/10/8 20:20:46

SDH系统SNCP子网连接保护解析:配置、倒换与维护

简介&#xff1a;这是一份聚焦SDH传输网络中SNCP子网连接保护机制的专题PPT课件&#xff0c;面向传输网运维工程师、通信专业学生以及对光网络保护原理有进阶需求的技术人员。课件以35页篇幅系统拆解SNCP保护的核心脉络&#xff1a;从子网连接保护、业务保护、检测点状态、拖延…

作者头像 李华