# 當你的 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) — 實戰經驗分享
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.