# 當你的 Mac 終於能跑 AI Coding Agent 了:oMLX 如何用一顆 SSD 解決所有人忽略的問題

<!--
SEO Meta Description: oMLX 是專為 Apple Silicon 打造的本地 LLM 推論伺服器,透過分層式 SSD KV Cache 將 coding agent 的 TTFT 從 90 秒降到 3 秒。完整技術架構解析與實戰設定指南。
Keywords: oMLX, Apple Silicon LLM, 本地推論, MLX inference, SSD KV cache, Claude Code 本地模型
-->
凌晨兩點,我盯著終端機裡 Claude Code 的游標閃了整晚。
不是網路斷了,不是 API 炸了——是我前幾天搭的本地推論伺服器,在處理第十二輪 tool calling 之後,終於撐不住了。每一輪對話,context 越疊越長,每次都要從頭算一遍 prefill。50K token 的 context,等個一分半鐘才吐出第一個字。
說真的,這種體驗還不如直接用 API。
然後我在 Hacker News 上看到一個帖子:「SSD-backed KV cache cuts coding agent TTFT from 90s to 1s on Mac」。
一秒?我差點從椅子上摔下去。
---
## 問題到底出在哪

先說清楚,為什麼本地跑 LLM 搭配 coding agent 這麼痛苦。
用過 Claude Code、OpenClaw、Codex 這類工具的人應該都有感覺——它們和一般聊天不一樣。一般聊天是你一句我一句,context 長度很穩定。但 coding agent 不是。它會讀檔案、呼叫工具、拿到結果、再決定下一步,一來一回之間 context 像吹氣球一樣膨脹。
關鍵在於:每一輪的 prompt prefix 都在變。
你讀了一個檔案,context 裡多了 2000 行程式碼。你呼叫了 grep,結果塞進去又多了 500 行。但 system prompt、之前的對話歷史——這些佔了 80% 的 context,根本沒變。
傳統推論伺服器怎麼做?**全部重算。**
每次 prefix 變了,KV cache 直接作廢,從第一個 token 重新做 prefill。在 50K-100K token 的 context 下,這意味著 30 到 90 秒的等待。每一輪都是。
oMLX 的作者 Jun Kim(首爾的一位資料工程師)顯然也被這件事搞瘋了。他在 GitHub 上寫道:
> "I build the tools I wish existed for my Mac — then open-source them."
於是他做了一個非常簡單但巧妙的設計:**把 KV cache 存到 SSD 上。**
---
## 分層式 KV Cache——這才是真正的創新

說到 oMLX 的核心技術,不需要什麼高深的論文才能理解。它的設計邏輯就像你電腦裡的記憶體階層——CPU cache、RAM、SSD、硬碟,各有各的速度和容量。
oMLX 把同樣的思路搬到了 LLM 推論上。
```mermaid
graph TD
A[新請求進入] --> B{前綴是否已快取?}
B -->|是| C[從 Hot/Cold Tier 還原 KV blocks]
B -->|否| D[完整 Prefill 計算]
C --> E[只計算新增的 tokens]
D --> F[將 KV blocks 存入 Hot Tier]
E --> G[生成回應]
F --> G
G --> H{Hot Tier 超過容量?}
H -->|是| I[LRU 淘汰至 Cold Tier SSD]
H -->|否| J[保持在記憶體]
```
**Hot Tier**(熱層)住在 GPU 統一記憶體裡,放最近、最常用的 KV blocks。你可以用 `--hot-cache-max-size 20%` 控制它佔多少記憶體。
**Cold Tier**(冷層)住在 SSD 上,用 safetensors 格式存。那些暫時不用但以後可能用到的 KV blocks,不是被丟掉,而是被「冷藏」起來。
**Prefix Matching Engine** 負責比對:下一個請求的前綴跟之前的有多少重疊?重疊的部分直接從快取還原,只有新增的 tokens 需要計算。
效果有多誇張?根據 [oMLX 官網](https://omlx.ai/) 和 [Hacker News 討論](https://news.ycombinator.com/item?id=47247294)的數據:
| 場景 | 無 SSD Cache | 有 SSD Cache |
|------|-------------|-------------|
| **TTFT(第二輪起)** | 30-90 秒 | < 5 秒 |
| **重啟後快取** | 全部遺失 | 從 SSD 還原 |
| **10+ 輪 agent 對話** | 越來越慢 | 穩定快速 |
而且——伺服器重啟後快取還在。因為它存在磁碟上啊。這聽起來很理所當然,但之前沒人這麼做。
---
## 不只是 KV Cache:一台完整的推論伺服器

如果 oMLX 只是一個 KV cache 的 hack,它不會在一個月內拿到 [4,500 顆星](https://github.com/jundot/omlx)。它是一台功能完整的推論伺服器,而且體驗做得出乎意料地好。
### EnginePool:同時跑五種模型
不只是 LLM。oMLX 的 EnginePool 能同時管理五種類型的模型:
- **LLM**(Qwen、Llama、DeepSeek、Mistral)
- **VLM** 視覺語言模型(Qwen3.5-VL、GLM-4V)
- **Embedding**(BGE-M3、ModernBERT)
- **Reranker**(Qwen3-Reranker、XLM-RoBERTa)
- **OCR**(DeepSeek-OCR、GLM-OCR)
用 LRU 策略自動管理記憶體,用完自動卸載,常用的可以 pin 住。8GB 的 MacBook Air?v0.2.10 之後也能用了——之前的版本會預留 8GB 給系統,等於 8GB 機器 0 可用,後來改成百分比制才解決。
### API 相容:OpenAI + Anthropic 都支援
這很關鍵。oMLX 同時支援 OpenAI 和 Anthropic 兩種 API 格式,意味著你不管用 Claude Code、OpenClaw、Codex 還是 OpenCode,都能直接接上去。
```bash
# Claude Code 接本地 oMLX
export ANTHROPIC_BASE_URL=http://localhost:5050/v1
# 或者任何 OpenAI 相容的工具
export OPENAI_BASE_URL=http://localhost:5050/v1
```
在 Admin Dashboard 裡甚至可以一鍵設定這些整合——不用手動改 config 檔。
### macOS Menu Bar 原生應用
下載 DMG,拖進 Applications,系統列多一個圖示,搞定。不是 Electron,是原生的。自動更新會根據你的 macOS 版本(Sequoia 或 Tahoe)選對應的 DMG。M5 用戶還有 Neural Accelerator 專屬支援。
---
## 實測效能:數字說話
Reddit 上一位 M3 Ultra 512GB 的用戶[分享了他的 benchmark](https://www.reddit.com/r/LocalLLaMA/comments/1rdkze3/),這些數字相當有參考價值:
| 模型 | Prompt TPS | Generation TPS | Batching 加速比 |
|------|-----------|----------------|----------------|
| Qwen3-Coder-Next 8bit | 1,462-2,009 | 45-59 | **4.14x** @ 8 concurrent |
| Qwen3.5-122B-A10B 4bit | 768-941 | 42-57 | — |
| MiniMax-M2.5 8bit | 426-704 | 15-34 | **3.71x** |
| GLM-5 4bit | 78-187 | 11-17 | **3.61x** |
*測試環境:M3 Ultra 512GB,oMLX v0.2.x*
另一位用戶在 [Reddit](https://www.reddit.com/r/LocalLLaMA/comments/1r3qwyi/) 上的評價更直白:
> "Claude Code is actually **usable on M4 Max 128GB with 6-bit Qwen3-Coder-Next**. This is the wow factor frankly; I had given up on trying to use agentic CLI locally because it's so damn slow."
根據學術研究([arxiv: 2511.05502](https://arxiv.org/abs/2511.05502)),MLX 在 Apple Silicon 上的推論吞吐量已經比 llama.cpp 高 21%-87%。oMLX 在這個基礎上再加分層 KV cache,在多輪 agent 場景下的體驗差距就更大了。
---
## 跟 Ollama、LM Studio 比,到底選誰

這是大家最想知道的問題。直接上表:
| 特性 | oMLX | Ollama | LM Studio |
|------|------|--------|-----------|
| **推論後端** | MLX 原生 | llama.cpp (GGUF) | llama.cpp + MLX |
| **KV Cache 持久化** | SSD 分層 | 無 | 無 |
| **Continuous Batching** | 有 | 無 | 部分 |
| **API 格式** | OpenAI + Anthropic | OpenAI | OpenAI |
| **Coding Agent 整合** | 一鍵設定 | 手動 | 手動 |
| **MCP 工具** | 有 | 無 | 無 |
| **跨平台** | macOS only | 全平台 | 全平台 |
| **GUI** | Menu Bar + Web | CLI | 桌面應用 |
| **模型格式** | MLX safetensors | GGUF | GGUF + MLX |
怎麼選?其實很簡單:
**用 Mac + 跑 coding agent = oMLX。** SSD KV cache 在這個場景下是不可取代的優勢,其他工具做不到。
**需要跨平台或 NVIDIA GPU = Ollama / LM Studio。** oMLX 只吃 Apple Silicon,不吃別的。
**想要最簡單的上手體驗 = LM Studio。** GUI 做得最好,適合入門。
**想要極致控制 = Ollama。** 純 CLI,Docker 友善,伺服器場景首選。
---
## 30 天 30 個版本:這個開發速度有點誇張

oMLX 在 2026 年 2 月 13 日上線。到我寫這篇文章的今天(3 月 15 日),已經發了 30 個 release。
沒有打錯,**幾乎每天一版。**
光看最近一週的更新就很驚人——Agent session stall 修復、M5 Neural Accelerator 支援、Qwen3-Reranker 整合、OpenAI Responses API、繁體中文 locale(台灣開發者 @JianShan-1214 貢獻的)、8GB 裝置支援修復、[oMLX.ai 效能比較平台](https://omlx.ai/)上線,社群已經提交了近一萬筆 benchmark 數據。
但說實話,這種開發節奏也讓我有點緊張。
---
## 踩坑紀錄:這些問題你會遇到
快速迭代的另一面就是穩定性還在路上。從 GitHub Issues 和社群回報整理幾個已知的坑:
**Context Compacting 導致模型遺失(#230)**——多輪對話後,context 壓縮機制偶爾會觸發模型狀態丟失。如果你發現 agent 突然「失憶」,很可能是這個問題。
**Tool Call Streaming 洩漏(#159, #172, #174)**——Claude Code 使用時,tool call 的封裝標記 `[Tool call: ...]` 有時會作為純文字洩漏到輸出中,造成對話卡住。v0.2.8 和 v0.2.9 陸續修了好幾波,但邊界情況可能還有。
**VLM 位置編碼汙染(#131)**——如果第一個請求包含圖片,第二個純文字請求可能輸出亂碼。原因是 mRoPE position state 沒清乾淨。v0.2.8 已修復。
**8GB 裝置完全無法載入模型(#137)**——原本的 `max_model_memory: auto` 會固定保留 8GB 給系統,8GB 機器等於零可用。v0.2.10 改成百分比制解決。
> **踩坑提醒**:如果你用 Homebrew 安裝遇到 pydantic-core dylib fixup failure,那是因為 bundled wheel 的動態連結庫有問題。v0.2.8 之後改為從原始碼編譯 pydantic-core。
---
## 快速上手:從安裝到跑起來
> **前置條件**
> - macOS 15.0+(Sequoia 或 Tahoe)
> - Apple Silicon(M1 / M2 / M3 / M4 / M5)
> - 16GB RAM 最低需求,64GB+ 建議
> - Python 3.10+(僅原始碼安裝需要)
三種安裝方式,選最適合你的:
```bash
# 方法一:DMG(最快,推薦一般用戶)
# 從 https://github.com/jundot/omlx/releases 下載
# M5 用戶務必選 macos26-tahoe 版本
# 方法二:Homebrew
brew tap jundot/omlx https://github.com/jundot/omlx
brew install omlx
# 方法三:原始碼安裝(開發者用)
git clone https://github.com/jundot/omlx.git
cd omlx
pip install -e ".[mcp]" # 包含 MCP 支援
```
啟動伺服器:
```bash
# 基本啟動
omlx serve --model-dir ~/models
# 完整設定:啟用 SSD cache + 記憶體限制 + batch 調優
omlx serve \
--model-dir ~/models \
--paged-ssd-cache-dir ~/.omlx/cache \
--max-process-memory 80% \
--prefill-batch-size 8 \
--completion-batch-size 32
```
接上 Claude Code:
```bash
# 方法一:Admin Dashboard 一鍵設定
# 打開 http://localhost:5050/admin → Integrations → Claude Code
# 方法二:手動設定
export ANTHROPIC_BASE_URL=http://localhost:5050/v1
```
如果你已經有 [LM Studio](https://lmstudio.ai/) 下載的模型,可以直接把 `--model-dir` 指向 LM Studio 的模型目錄,oMLX 會自動偵測。
---
## 該不該現在就用
我的看法很直接。
如果你是 Mac 用戶,重度使用 Claude Code 或類似的 coding agent,而且受夠了每輪等一分鐘的推論延遲——現在就試。SSD KV cache 的體驗差距是量級上的,不是微調等級的改善。
但如果你需要穩定的生產環境,再等等。這個專案才一個月大,Issues 裡還有系統崩潰(#234)和 context 遺失(#230)這種等級的問題。單一維護者主導的專案,長期可持續性也是個問號——雖然社群貢獻正在快速增長。
我會建議在非關鍵的開發場景先用起來,等 v0.3.x 穩定之後再考慮更正式的使用。
這個專案填補了一個非常精確的市場空白。不是更快的推論引擎(那是 MLX 本身的功勞),而是**讓本地推論在 agent 場景下真正可用的那最後一塊拼圖**。有時候,改變遊戲規則的不是什麼 breakthrough,只是有人看到了一個所有人都忽略的問題,然後用最直覺的方式解決它。
把 KV cache 存到 SSD 上。就這麼簡單。
---
## 延伸閱讀
- [GitHub: jundot/omlx](https://github.com/jundot/omlx) — 原始碼與文件
- [oMLX.ai](https://omlx.ai/) — 官網與社群 benchmark 資料庫
- [Hacker News: Show HN 討論串](https://news.ycombinator.com/item?id=47247294) — 作者與社群的技術問答
- [vllm-mlx 研究論文](https://arxiv.org/abs/2511.05502) — Apple Silicon 推論效能研究
- [Reddit: r/LocalLLaMA oMLX 討論](https://www.reddit.com/r/LocalLLaMA/comments/1r3qwyi/) — 社群使用回饋
- [Ken Huang: 本地跑 35B Coding Agent](https://kenhuangus.substack.com/p/i-ran-a-35b-ai-coding-agent-locally) — 實戰經驗分享