生活

Mac Mini M4 開發筆記:oMLX 本地模型與 MiniMax 雲端模型自動切換實踐

這篇文章在講什麼?簡單來說,黃醫師在開發 ACHEOFF 醫療設備軟體時,遇到了一個問題:AI 輔助工具要花錢,但免費額度用完就沒了。於是我參考了網路上的方法——讓 AI 自動在「免費」和「花錢」之間切換,就像手機訊號不好時會自動切換網路一樣。

🎯 黃醫師遇到什麼問題?

在開發 ACHEOFF 醫療設備軟體時,需要 AI 幫忙寫程式碼。一開始使用 MiniMax M2.5(很強的 AI 模型),但免費額度用完後就不能用了。

大多數人的選擇:

  • 付費繼續使用(但金額會累積)
  • 改用免費但較弱的 AI(但速度慢、能力有限)

不想多花錢的黃醫師選擇第三條路:兩個都要!

🛠️ 硬體設備

配備 規格
電腦 Mac Mini M4(2024 年版本)
記憶體 16GB 統一記憶體
系統 macOS 15+

一台普通的 Mac Mini,不是特別貴的那種。

💡 核心概念:「本地優先,雲端補位」

這句話聽起來很專業,但其實概念很簡單:

想像你在開車出遊:

  • 油箱滿的時候(雲端額度夠)→ 開快一點,用更強的 AI
  • 油快用完的時候(雲端額度不足)→ 切換到省油模式,用本地端的 AI

  • 本地端 AI 就像「自行車」,隨時可用但速度慢一點
  • 雲端 AI 就像「跑車」,很快但需要花錢加油

🔧 系統設定說明(白話版)

1. 在家裡放一個「AI 服務生」

黃醫師在 Mac Mini 裡安裝了一個叫做 oMLX 的軟體,這個軟體專門用來「跑」AI 模型。

因為電腦只有 16GB 記憶體(RAM),所以選擇了一個比較「輕量」的模型叫做 Qwen3.5-9B,這個模型大約佔用 5.82GB 的記憶體,還剩空間給其他程式用。

2. 設定「自動切換開關」

寫了一個小小的程式(叫做 auto_switch.sh),每當 MiniMax 雲端的額度低於 20 次時,系統就會自動切換:

「唉呀!免費額度快用完了,切換到本地端的 Qwen3.5 模型吧!」

等到下個月額度重置後,又會自動切回 MiniMax M2.5。

3. 讓手機通知他

還設定了 Telegram 機器人,每當 AI 切換模式的時候,手機會收到通知,就像這樣:

🔄 會話啟動!目前使用:Qwen3.5-9B,內容使用率:97%

📊 效果如何?

之前 之後
用另一個類似軟體(ollama)跑同樣的查詢 23 分鐘
用 oMLX + Qwen3.5 幾秒鐘就完成

速度提升超級多! 從 23 分鐘變成幾秒鐘,這是因為 oMLX 這個軟體特別優化過,能更有效地利用 Mac Mini 的硬體。

🎁 這樣做有什麼好處?

    1.  

    1. 省錢:免費額度用完後,自動切到本地端 AI,不用花冤枉錢

  1.  

    1. 不停工:AI 額度用完不會突然就不能用,系統會無縫切換

  1.  

    1. 速度快:本地端 AI 反應比雲端快(不用等網路傳輸)

  1.  

    1. 隱私安全:某些程式碼可以完全在本地端處理,不會傳到網路上

🔑 總結

這方法結合了「雲端 AI」(厲害但要花錢)和「本地 AI」(較弱但免費),並寫了一個自動切換系統,讓我們在開發軟體時既能用到最強的 AI,又不會因為額度用完而中斷工作。


啟發是:如果你的工作需要用到 AI 程式輔助,可以參考這個概念——不要把所有雞蛋放在同一個籃子裡,免費的和付費的搭配使用,才能兼顧效能和成本。

這就是這篇技術文章的通俗解說版本,希望對你有幫助!

下面是技術性較高的正文 (其實黃醫師也不全瞭解—拜Vibe Coding所賜😅)

為了在進行 ACHEOFF 醫療設備開發時擁有高效且不間斷的 AI 輔助,我設計了一套「本地優先,雲端補位」的系統。當 MiniMax 雲端額度充足時,利用其強大的推理能力;當額度用罄或需離線處理時,自動切換至優化過的本地 Qwen3.5 模型。

混合 AI 算力架構:在 Mac Mini M4 上整合 oMLX 與 MiniMax

為了在進行 ACHEOFF 醫療設備開發時擁有高效且不間斷的 AI 輔助,我設計了一套「本地優先,雲端補位」的系統。當 MiniMax 雲端額度充足時,利用其強大的推理能力;當額度用罄或需離線處理時,自動切換至優化過的本地 Qwen3.5 模型。

硬體環境:
機型:Mac Mini M4 (2024)
記憶體:16GB 統一記憶體 (Unified Memory)
系統:macOS 15+

一、 本地端配置:oMLX 與 Qwen3.5 9B

參考了 freedidi.com 的部署建議,針對 16GB RAM 的限制,我選擇了 4-bit 量化的 Qwen3.5-9B-MLX。透過 oMLX 伺服器,我們能精準控制記憶體邊界並啟用高效快取。

oMLX 關鍵設定

{
  "max_memory": "11.52GB",      // 預留空間給系統與其他應用
  "hot_cache_max_size": "8.00GB", // 提升 KV Cache 回應速度
  "max_context_window": 32768,    // 兼顧深度與記憶體穩定性
  "paged_ssd_cache": "Enabled"    // 當 RAM 壓力過大時,自動分頁至 SSD
}

這種配置下,Qwen3.5 9B 模型實際佔用約 5.82GB RAM,配合 11.7GB 的程序限制,能確保系統在高負載下依然穩定。

二、 OpenClaw 整合設定

OpenClaw 作為核心調度器,負責連接 oMLX 提供的 OpenAI 相容接口以及 MiniMax 雲端 API。

openclaw.json 配置摘要

{
  "models": {
    "providers": {
      "minimax": {
        "baseUrl": "https://api.minimax.io/v1",
        "apiKey": "sk-cp-xxxxxxxxxxxx", // 雲端 Coding Plan Key
        "models": [{ "id": "MiniMax-M2.5", "contextWindow": 204800 }]
      },
      "omlx": {
        "baseUrl": "http://127.0.0.1:8000/v1",
        "apiKey": "local-auth",
        "models": [{ "id": "Qwen3.5-9B-MLX-4bit", "contextWindow": 49152 }]
      }
    }
  },
  "agents": {
    "defaults": { "model": { "primary": "minimax/MiniMax-M2.5" } }
  }
}

三、 自動化切換腳本:auto_switch.sh

為了避免 MiniMax Coding Plan 超量導致工作中斷,我撰寫了一個 Bash 腳本,每隔一段時間檢查雲端餘額,並在必要時自動修改 OpenClaw 配置並重啟 Gateway。

#!/bin/bash
# 檢查 MiniMax 餘額並自動切換模型
API_KEY="sk-cp-xxxxxxxxxxxx"
THRESHOLD=20 # 剩餘次數低於此值則切換

# 1. 獲取剩餘額度
BODY=$(curl -s "https://api.minimax.io/v1/api/openplatform/coding_plan/remains" -H "Authorization: Bearer $API_KEY")
REMAINS=$(echo "$BODY" | jq -r '.model_remains[0] | .current_interval_total_count - .current_interval_usage_count')

# 2. 判定邏輯
if [ "$REMAINS" -lt "$THRESHOLD" ]; then
    # 切換至本地 oMLX
    openclaw config set agents.defaults.model.primary "omlx/Qwen3.5-9B-MLX-4bit"
    openclaw gateway restart
else
    # 額度充足則保持或換回 MiniMax
    openclaw config set agents.defaults.model.primary "minimax/MiniMax-M2.5"
    openclaw gateway restart
fi

四、 Telegram 狀態監控:從靜態配置到動態通知

為了確保在 ACHEOFF 開發過程中能即時掌握系統狀態,我實作了兩層級的 Telegram 監控:系統級通訊埠配置任務級動態狀態回報

1. 系統級:OpenClaw Channel 配置

首先在 openclaw.json 中啟用原生 Telegram Channel 支援。這允許我直接透過 Telegram 手機端對 Agent 下達指令,同時定義了存取權限 white-list。

"channels": {
  "telegram": {
    "enabled": true,
    "botToken": "873359xxxx:AAFC0rRa...", // 向 @BotFather 申請的憑證
    "allowFrom": ["11064xxxxx"],         // 限制僅限我的 Chat ID 存取
    "streaming": "partial"
  }
}

2. 邏輯級:自動切換通知 (Shell Integration)

我在 auto_switch.sh 腳本中整合了 Telegram Bot API。當系統偵測到 MiniMax 額度低於門檻並觸發切換至本地 oMLX/Qwen3.5 時,會同步發送 Push Notification。

# 在 auto_switch.sh 中加入的通知邏輯
if [[ "$CURRENT_MODEL" != *"$LOCAL_MODEL"* ]]; then
    # 執行切換...
    curl -s -X POST https://api.telegram.org/bot$TG_TOKEN/sendMessage \
    -d chat_id=$TG_ID \
    -d text="⚠️ MiniMax 額度不足!已自動切換至本地 oMLX 運算。"
fi

3. 任務級:Context 佔用率監測 (Startup Sequence)

針對 Mac Mini M4 16G 的記憶體限制,我設定了 Agent 的「啟動序列 (Startup Sequence)」。每當新建會話(New Session)時,Agent 會自動執行以下工具流:

    •  

    • session_status:調用內部工具獲取目前 Context 佔用百分比(例如:97% used)。

    • exec (curl):將獲取到的 Token 數據與當前使用的模型名稱(Qwen3.5 9B vs MiniMax M2.5)封裝成 JSON 透過 curl 傳送至手機。

監控優勢:
透過這套配置,Agent 在啟動時會主動回報:"🔄 會話啟動!當前模型: Qwen3.5-9B-MLX, Context: 31.9k/32.8k (97%)"。這讓我能即時判斷是否需要手動下達 /reset 來釋放 KV Cache,避免因記憶體溢出導致的 ACHEOFF 代碼生成中斷。

五、 故障排除與優化

  • 目錄權限:修復了 Telegram 插件找不到 telegram.jsonENOENT 錯誤,確保了狀態持久化。
  • 執行路徑:在 crontab 任務中明確定義了 export PATH,解決了 cron 環境下找不到 jq 的問題。
  • 本地端效能:實測顯示 Qwen3.5 9B MLX 在 4-bit 量化下,對 Mac Mini M4 的負載極低,是完美的備援方案。

六、 結語

這套架構完美解決了開發 ACHEOFF 時對強大算力的需求,同時透過 oMLX 的 SSD 分頁技術克服了物理記憶體的不足。透過自動化腳本,我再也不需要手動檢查餘額,能夠專注在代碼與產品開發上。

之前是運用ollama serve qwen3.5:9b, 雖然經過一段時間努力是能跑了,但是回應一個查詢,MiniMax 套餐剩餘多少prompt可用的問題,竟然跑了23分鐘才回答出來😅。這套oMLX可能是在有限記憶體下,運用SSD swap記憶體運用的最有效模式了

👍這套混合算力系統在 2026 年 3 月 16 日正式達成全自動化運作。它不僅讓我們在開發 ACHEOFF 醫療設備時無懼額度限制,更透過本地與雲端的協作,將 Mac Mini M4 的效能壓榨到了極限。這不僅是軟體配置的勝利,更是對自動化維運與資源管理的實踐證明。

報告生成時間:2026-03-16 01:32 (Taipei Time)