<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Local-Llm-Services on Tarragon</title><link>https://tarrragon.github.io/blog/tags/local-llm-services/</link><description>Recent content in Local-Llm-Services on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Mon, 11 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/local-llm-services/index.xml" rel="self" type="application/rss+xml"/><item><title>模組一：本地 LLM 服務的安裝與應用</title><link>https://tarrragon.github.io/blog/llm/01-local-llm-services/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/01-local-llm-services/</guid><description>&lt;p>本模組的核心目標是把 &lt;a href="https://tarrragon.github.io/blog/llm/00-foundations/" data-link-title="模組零：基礎知識與心智模型" data-link-desc="建立本地 LLM 的心智模型、釐清 MLX / MTP / oMLX 等常被混淆的術語、Apple Silicon 記憶體現實">模組零&lt;/a> 的心智模型落地到實際安裝步驟與工作流。網路上多數本地 LLM 教學是「列三個工具裝法」，缺乏選型脈絡與期望管理；本模組會先回答「為什麼選這個」，再給「怎麼裝」與「裝完之後該調哪些設定」。&lt;/p>
&lt;p>讀完本模組後，你應該能在自己的 Mac 上裝好一個本地 LLM 工作流，並知道它的能力邊界、什麼時候該切回雲端。&lt;/p>
&lt;h2 id="章節列表">章節列表&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>章節&lt;/th>
 &lt;th>主題&lt;/th>
 &lt;th>關鍵收穫&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/01-local-llm-services/ollama/" data-link-title="1.0 Ollama：主流推論伺服器" data-link-desc="一行 brew 裝完、ollama run 一鍵跑 Gemma 4 MTP、OpenAI 相容 API on localhost:11434">1.0&lt;/a>&lt;/td>
 &lt;td>Ollama：主流推論伺服器&lt;/td>
 &lt;td>一行 brew 裝完、&lt;code>ollama run&lt;/code> 一鍵跑 Gemma 4 MTP、OpenAI 相容 API on 11434&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/01-local-llm-services/lm-studio/" data-link-title="1.1 LM Studio：GUI 探索模型" data-link-desc="GUI 取向的本地推論伺服器：內建模型瀏覽器、speculative decoding 設定面板、適合探索新模型">1.1&lt;/a>&lt;/td>
 &lt;td>LM Studio：GUI 探索模型&lt;/td>
 &lt;td>內建模型瀏覽器、speculative decoding 設定面板、適合探索新模型&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/01-local-llm-services/llama-cpp/" data-link-title="1.2 llama.cpp：底層推論引擎" data-link-desc="GGUF 格式、量化、MTP 仍 beta；多數讀者不需要直接接觸，Ollama 已經包好">1.2&lt;/a>&lt;/td>
 &lt;td>llama.cpp：底層引擎&lt;/td>
 &lt;td>直接面對 GGUF 與量化選項、MTP 仍 beta、需要進階設定&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/01-local-llm-services/vscode-continue-integration/" data-link-title="1.3 VS Code &amp;#43; Continue.dev 整合" data-link-desc="安裝 Continue 擴充套件、config.json 設定、Cmd&amp;#43;L 對話 / Cmd&amp;#43;I 行內編輯快捷鍵">1.3&lt;/a>&lt;/td>
 &lt;td>VS Code + Continue.dev 整合&lt;/td>
 &lt;td>安裝擴充套件、config.json 設定、Cmd+L / Cmd+I 快捷鍵&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/01-local-llm-services/model-selection-priority/" data-link-title="1.4 寫 code 場景的模型選型優先順序" data-link-desc="Gemma 4 31B MTP → Qwen3-Coder 30B → Qwen3 14B → gpt-oss 20B 的取捨與適用情境">1.4&lt;/a>&lt;/td>
 &lt;td>寫 code 場景的模型選型優先順序&lt;/td>
 &lt;td>Gemma 4 31B MTP → Qwen3-Coder 30B → Qwen3 14B → gpt-oss 20B 的取捨理由&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/01-local-llm-services/expectation-management/" data-link-title="1.5 期望管理：本地 LLM 的擅長領域與分工" data-link-desc="本地 LLM 是免費的初階 pair programmer：辨識它的擅長領域、跟雲端旗艦做結構性分工">1.5&lt;/a>&lt;/td>
 &lt;td>期望管理：本地 LLM 的擅長領域與分工&lt;/td>
 &lt;td>本地是免費的初階 pair programmer，不是 Claude 替代品；混用是現階段正解&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/01-local-llm-services/extension-paths/" data-link-title="1.6 延伸方向：Web UI、coding agent、產圖" data-link-desc="日常路徑跑穩後可以玩的延伸：Open WebUI、aider、ComfyUI；先把基底跑穩再進階">1.6&lt;/a>&lt;/td>
 &lt;td>延伸方向：Web UI、coding agent、產圖&lt;/td>
 &lt;td>先把寫 code 跑穩，再評估 Open WebUI、aider 等延伸；產圖另闢戰場&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/01-local-llm-services/troubleshooting/" data-link-title="1.7 排錯方法論：用三層架構做故障定位" data-link-desc="故障定位的分層思考、症狀到層級的對應反射、log 在三層的角色差異、最小可重現的縮減策略">1.7&lt;/a>&lt;/td>
 &lt;td>排錯方法論：用三層架構做故障定位&lt;/td>
 &lt;td>先定位哪一層壞、log 角色差異、最小可重現、跨層級誤判模式&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/llm/01-local-llm-services/hands-on/" data-link-title="Hands-on：本地 AI 工具實作筆記" data-link-desc="Ollama / ComfyUI / Whisper / Piper TTS：實際安裝、驗證、跑通的紀錄。隨工具版本演化、跟 1.x 原理章節互補。">Hands-on&lt;/a>&lt;/td>
 &lt;td>實作筆記：Ollama / ComfyUI / Whisper / Piper TTS / RAG / MCP&lt;/td>
 &lt;td>實際安裝指令、驗證流程、跟 1.x 原理章節互補的當下快照&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="推論伺服器選型總表">推論伺服器選型總表&lt;/h2>
&lt;p>模組零已建立的三層架構視角告訴你 Ollama、LM Studio、llama.cpp 都屬於&lt;strong>伺服器層&lt;/strong>。本模組要回答的是這三者的具體差異：&lt;/p></description><content:encoded><![CDATA[<p>本模組的核心目標是把 <a href="/blog/llm/00-foundations/" data-link-title="模組零：基礎知識與心智模型" data-link-desc="建立本地 LLM 的心智模型、釐清 MLX / MTP / oMLX 等常被混淆的術語、Apple Silicon 記憶體現實">模組零</a> 的心智模型落地到實際安裝步驟與工作流。網路上多數本地 LLM 教學是「列三個工具裝法」，缺乏選型脈絡與期望管理；本模組會先回答「為什麼選這個」，再給「怎麼裝」與「裝完之後該調哪些設定」。</p>
<p>讀完本模組後，你應該能在自己的 Mac 上裝好一個本地 LLM 工作流，並知道它的能力邊界、什麼時候該切回雲端。</p>
<h2 id="章節列表">章節列表</h2>
<table>
  <thead>
      <tr>
          <th>章節</th>
          <th>主題</th>
          <th>關鍵收穫</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/llm/01-local-llm-services/ollama/" data-link-title="1.0 Ollama：主流推論伺服器" data-link-desc="一行 brew 裝完、ollama run 一鍵跑 Gemma 4 MTP、OpenAI 相容 API on localhost:11434">1.0</a></td>
          <td>Ollama：主流推論伺服器</td>
          <td>一行 brew 裝完、<code>ollama run</code> 一鍵跑 Gemma 4 MTP、OpenAI 相容 API on 11434</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/01-local-llm-services/lm-studio/" data-link-title="1.1 LM Studio：GUI 探索模型" data-link-desc="GUI 取向的本地推論伺服器：內建模型瀏覽器、speculative decoding 設定面板、適合探索新模型">1.1</a></td>
          <td>LM Studio：GUI 探索模型</td>
          <td>內建模型瀏覽器、speculative decoding 設定面板、適合探索新模型</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/01-local-llm-services/llama-cpp/" data-link-title="1.2 llama.cpp：底層推論引擎" data-link-desc="GGUF 格式、量化、MTP 仍 beta；多數讀者不需要直接接觸，Ollama 已經包好">1.2</a></td>
          <td>llama.cpp：底層引擎</td>
          <td>直接面對 GGUF 與量化選項、MTP 仍 beta、需要進階設定</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/01-local-llm-services/vscode-continue-integration/" data-link-title="1.3 VS Code &#43; Continue.dev 整合" data-link-desc="安裝 Continue 擴充套件、config.json 設定、Cmd&#43;L 對話 / Cmd&#43;I 行內編輯快捷鍵">1.3</a></td>
          <td>VS Code + Continue.dev 整合</td>
          <td>安裝擴充套件、config.json 設定、Cmd+L / Cmd+I 快捷鍵</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/01-local-llm-services/model-selection-priority/" data-link-title="1.4 寫 code 場景的模型選型優先順序" data-link-desc="Gemma 4 31B MTP → Qwen3-Coder 30B → Qwen3 14B → gpt-oss 20B 的取捨與適用情境">1.4</a></td>
          <td>寫 code 場景的模型選型優先順序</td>
          <td>Gemma 4 31B MTP → Qwen3-Coder 30B → Qwen3 14B → gpt-oss 20B 的取捨理由</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/01-local-llm-services/expectation-management/" data-link-title="1.5 期望管理：本地 LLM 的擅長領域與分工" data-link-desc="本地 LLM 是免費的初階 pair programmer：辨識它的擅長領域、跟雲端旗艦做結構性分工">1.5</a></td>
          <td>期望管理：本地 LLM 的擅長領域與分工</td>
          <td>本地是免費的初階 pair programmer，不是 Claude 替代品；混用是現階段正解</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/01-local-llm-services/extension-paths/" data-link-title="1.6 延伸方向：Web UI、coding agent、產圖" data-link-desc="日常路徑跑穩後可以玩的延伸：Open WebUI、aider、ComfyUI；先把基底跑穩再進階">1.6</a></td>
          <td>延伸方向：Web UI、coding agent、產圖</td>
          <td>先把寫 code 跑穩，再評估 Open WebUI、aider 等延伸；產圖另闢戰場</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/01-local-llm-services/troubleshooting/" data-link-title="1.7 排錯方法論：用三層架構做故障定位" data-link-desc="故障定位的分層思考、症狀到層級的對應反射、log 在三層的角色差異、最小可重現的縮減策略">1.7</a></td>
          <td>排錯方法論：用三層架構做故障定位</td>
          <td>先定位哪一層壞、log 角色差異、最小可重現、跨層級誤判模式</td>
      </tr>
      <tr>
          <td><a href="/blog/llm/01-local-llm-services/hands-on/" data-link-title="Hands-on：本地 AI 工具實作筆記" data-link-desc="Ollama / ComfyUI / Whisper / Piper TTS：實際安裝、驗證、跑通的紀錄。隨工具版本演化、跟 1.x 原理章節互補。">Hands-on</a></td>
          <td>實作筆記：Ollama / ComfyUI / Whisper / Piper TTS / RAG / MCP</td>
          <td>實際安裝指令、驗證流程、跟 1.x 原理章節互補的當下快照</td>
      </tr>
  </tbody>
</table>
<h2 id="推論伺服器選型總表">推論伺服器選型總表</h2>
<p>模組零已建立的三層架構視角告訴你 Ollama、LM Studio、llama.cpp 都屬於<strong>伺服器層</strong>。本模組要回答的是這三者的具體差異：</p>
<table>
  <thead>
      <tr>
          <th>維度</th>
          <th>Ollama</th>
          <th>LM Studio</th>
          <th>llama.cpp</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>介面</td>
          <td>CLI + REST API</td>
          <td>GUI + REST API</td>
          <td>CLI only（server 子命令需自編譯）</td>
      </tr>
      <tr>
          <td>學習曲線</td>
          <td>低（一行裝完）</td>
          <td>低（一鍵安裝）</td>
          <td>中高（編譯、量化、參數要自己選）</td>
      </tr>
      <tr>
          <td>模型瀏覽器</td>
          <td>命令列 <code>ollama list</code>，registry 在網頁</td>
          <td>GUI 內建，直接搜尋下載</td>
          <td>沒有，要自己去 Hugging Face 下載</td>
      </tr>
      <tr>
          <td>Gemma 4 MTP（2026/5）</td>
          <td>v0.23.1 內建</td>
          <td>支援，要在 UI 開啟 speculative</td>
          <td>仍 beta，drafter 整合是 feature request</td>
      </tr>
      <tr>
          <td>適合誰</td>
          <td>多數工程師、想快速開始</td>
          <td>GUI 派、探索模型階段</td>
          <td>進階使用者、研究、特殊量化</td>
      </tr>
      <tr>
          <td>同台共存</td>
          <td>可以，預設 port 11434</td>
          <td>可以，預設 port 1234</td>
          <td>可以，預設 port 8080</td>
      </tr>
  </tbody>
</table>
<p>讀完本表後的決策建議是：<strong>先裝 Ollama，跑穩後再評估其他</strong>。LM Studio 可以同時裝來探索模型，但日常主力建議 Ollama；llama.cpp 暫時不需要直接接觸（Ollama 內部已經用 llama.cpp）。</p>
<h2 id="為什麼這個順序">為什麼這個順序</h2>
<p>本模組章節順序的設計脈絡：</p>
<ol>
<li><strong>先 1.0 Ollama</strong>：學習曲線最低、生態最成熟、Gemma 4 MTP 一鍵支援。多數讀者裝完這個就能開始用。</li>
<li><strong>再 1.1 LM Studio</strong>：給「想要可視化探索」的讀者另一條路；也可以跟 Ollama 並存。</li>
<li><strong>接 1.2 llama.cpp</strong>：澄清網路上「llama.cpp 才是真本地」的迷思，給進階讀者完整背景。</li>
<li><strong>再 1.3 VS Code + Continue.dev</strong>：把伺服器接到日常工作環境，這才是寫 code 的真正起點。</li>
<li><strong>然後 1.4 模型選型</strong>：伺服器跑起來後該裝哪個模型，給優先順序。</li>
<li><strong>再 1.5 期望管理</strong>：用一週後該怎麼判斷「值不值得繼續用」「什麼時候切雲端」。</li>
<li><strong>最後 1.6 延伸方向</strong>：日常路徑穩了再玩 Web UI、coding agent、產圖。</li>
</ol>
<p>每一章可以單獨讀，但若你是第一次接觸本地 LLM，照順序讀最不容易迷路。</p>
<h2 id="一個小時的最短路徑">一個小時的最短路徑</h2>
<p>如果你沒時間讀完整本模組、只想用一小時搞定本地 LLM 寫 code 的最基本工作流，下面是最短路徑：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c1"># 1. 裝 Ollama（5 分鐘）</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">brew install ollama
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">ollama serve <span class="p">&amp;</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="c1"># 2. 拉模型（首次下載約 20 ~ 30 分鐘，看網速）</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">ollama run gemma4:31b-coding-mtp-bf16
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="c1"># 3. 在 VS Code 裝 Continue 擴充套件（2 分鐘）</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="c1"># 4. 設定 ~/.continue/config.json（5 分鐘）</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="c1"># 5. 試用 Cmd+L（對話）、Cmd+I（行內編輯）（剩下時間）</span></span></span></code></pre></div><p>需要 32GB+ Mac 才能流暢跑這個 model；16GB / 24GB 請改用 <a href="/blog/llm/01-local-llm-services/model-selection-priority/" data-link-title="1.4 寫 code 場景的模型選型優先順序" data-link-desc="Gemma 4 31B MTP → Qwen3-Coder 30B → Qwen3 14B → gpt-oss 20B 的取捨與適用情境">1.4 模型選型</a> 的對照表選對應大小的模型。完整步驟在 <a href="/blog/llm/01-local-llm-services/ollama/" data-link-title="1.0 Ollama：主流推論伺服器" data-link-desc="一行 brew 裝完、ollama run 一鍵跑 Gemma 4 MTP、OpenAI 相容 API on localhost:11434">1.0 Ollama</a> 跟 <a href="/blog/llm/01-local-llm-services/vscode-continue-integration/" data-link-title="1.3 VS Code &#43; Continue.dev 整合" data-link-desc="安裝 Continue 擴充套件、config.json 設定、Cmd&#43;L 對話 / Cmd&#43;I 行內編輯快捷鍵">1.3 VS Code + Continue.dev</a>。</p>
<h2 id="跑穩之後該做什麼">跑穩之後該做什麼</h2>
<p>裝完不是終點。本地 LLM 跟雲端的差別在於「需要持續調教」。跑穩後建議的後續工作：</p>
<ol>
<li><strong>用一週實測</strong>：把日常工作流真實餵進去、記錄通過率與痛點、用真實任務當判讀依據而非示範任務。</li>
<li><strong>建立切換習慣</strong>：明確哪些任務交給本地、哪些切雲端。詳見 <a href="/blog/llm/01-local-llm-services/expectation-management/" data-link-title="1.5 期望管理：本地 LLM 的擅長領域與分工" data-link-desc="本地 LLM 是免費的初階 pair programmer：辨識它的擅長領域、跟雲端旗艦做結構性分工">1.5 期望管理</a>。</li>
<li><strong>觀察記憶體與發熱</strong>：開 Activity Monitor 看記憶體 swap 狀態、機殼溫度是否過高。</li>
<li><strong>追新模型</strong>：本地模型發布速度很快、每 2 ~ 3 個月會有新候選、值得追蹤。</li>
<li><strong>判斷是否升級硬體</strong>：用一個月後若限制都來自記憶體、再評估升級 Mac；先確認痛點再投資硬體。</li>
</ol>
<h2 id="不在本模組內的主題">不在本模組內的主題</h2>
<p>本模組不討論：</p>
<ol>
<li>訓練、fine-tuning、LoRA 微調 — 跟「跑現成模型」是不同的工程問題。</li>
<li>部署到雲端 GPU、Linux server — 本指南範圍只在 Apple Silicon Mac。</li>
<li>Cursor、Windsurf、Cline 等其他 IDE 整合 — Continue.dev 是與本地 LLM 整合最成熟的選擇，其他工具的整合度視版本而定。</li>
<li>詳細的 benchmark 跑分方法 — 本指南只引用官方數據，自己跑分屬於另一個工程主題。</li>
</ol>
<p>需要這些主題時請另尋專門資源；硬塞進來只會讓「Mac 本地寫 code」這條最短路徑被淹沒。</p>
]]></content:encoded></item><item><title>1.7 排錯方法論：用三層架構做故障定位</title><link>https://tarrragon.github.io/blog/llm/01-local-llm-services/troubleshooting/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/01-local-llm-services/troubleshooting/</guid><description>&lt;p>本地 LLM 工作流出問題時、第一個本能反應常是「重啟試試看」。本章建立另一種反射：用&lt;a href="https://tarrragon.github.io/blog/llm/00-foundations/three-layer-architecture/" data-link-title="0.2 介面 / 伺服器 / 模型三層架構" data-link-desc="把任何本地 LLM 工具放回正確的層級，用三層心智模型看懂工具關係">三層架構&lt;/a>（介面 / &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/inference-server/" data-link-title="Inference Server" data-link-desc="載入模型權重、處理 prompt、產生 token 的常駐 process">推論伺服器&lt;/a> / 模型）的視角先確認「哪一層壞」、再針對該層做具體診斷。這個方法不依賴記住每個工具的具體錯誤訊息、跨工具世代都成立。&lt;/p>
&lt;p>具體錯誤訊息對照表（「&lt;code>address already in use&lt;/code> 要這樣修」「&lt;code>model not found&lt;/code> 要那樣修」）不在本章——這些隨工具版本變、查 release notes 跟 GitHub issue 更快。本章寫的是「換工具之後仍成立」的排錯思維。&lt;/p>
&lt;h2 id="本章目標">本章目標&lt;/h2>
&lt;p>讀完本章後、你應該能：&lt;/p>
&lt;ol>
&lt;li>看到症狀時、先定位是介面 / 伺服器 / 模型哪一層的問題。&lt;/li>
&lt;li>知道在每一層該看什麼 log。&lt;/li>
&lt;li>用「最小可重現」策略快速縮減問題範圍。&lt;/li>
&lt;li>識別「跨層級的誤判」常見模式、把 server 層問題正確歸位、避開瞎調 model 的繞路。&lt;/li>
&lt;/ol>
&lt;h2 id="故障定位的核心原則先確認哪一層壞">故障定位的核心原則：先確認哪一層壞&lt;/h2>
&lt;p>模組零 &lt;a href="https://tarrragon.github.io/blog/llm/00-foundations/three-layer-architecture/" data-link-title="0.2 介面 / 伺服器 / 模型三層架構" data-link-desc="把任何本地 LLM 工具放回正確的層級，用三層心智模型看懂工具關係">三層架構&lt;/a> 的視角延伸到排錯：故障可能落在介面層（Continue.dev / Cursor 等 IDE 整合）、伺服器層（Ollama / LM Studio / llama.cpp）、或模型層（權重檔本身的能力 / 量化選擇）。在不知道哪一層壞之前、任何修法都是亂槍打鳥——重啟 Continue.dev 解不了模型量化太激進的問題、重 pull 模型解不了 IDE 設定錯的問題。&lt;/p>
&lt;p>先定位再修補的 ROI 高於直接修補、因為沒有定位的修法常常掃過正確答案還不知道是哪個動作生效。定位用的工具不複雜：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>直接 curl 伺服器 API&lt;/strong>：繞過介面層、直接驗證伺服器是否回應正常。&lt;/li>
&lt;li>&lt;strong>&lt;code>ollama ps&lt;/code> / 等價指令&lt;/strong>：看伺服器層 model 狀態、確認 model 真的載入。&lt;/li>
&lt;li>&lt;strong>換 model 試試&lt;/strong>：同樣 prompt、不同 model 表現一致就是介面 / 伺服器層、不一致就是 model 層。&lt;/li>
&lt;li>&lt;strong>換 prompt 試試&lt;/strong>：簡單 prompt OK、複雜 prompt 崩、可能是 context 長度或 model 容量問題。&lt;/li>
&lt;/ul>
&lt;p>這四個動作能 cover 90% 的定位需求。學會這個反射、排錯時間大幅縮短。&lt;/p>
&lt;h2 id="症狀到層級的對應反射">症狀到層級的對應反射&lt;/h2>
&lt;p>不同症狀對應到不同最有可能的故障層、建立對應反射能省下大量試錯時間。下表是寫 code 場景常見症狀的對應：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>症狀&lt;/th>
 &lt;th>最可能層級&lt;/th>
 &lt;th>第一步驗證&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Continue.dev 完全沒回應&lt;/td>
 &lt;td>介面層 / 伺服器層&lt;/td>
 &lt;td>curl 伺服器、看伺服器是否正常&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Continue.dev 報「connection refused」&lt;/td>
 &lt;td>伺服器層&lt;/td>
 &lt;td>伺服器沒在跑 / port 不對&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Continue.dev 顯示請求送出但無回應&lt;/td>
 &lt;td>介面層 / 伺服器層&lt;/td>
 &lt;td>curl 同 prompt、比較行為&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>回答內容亂碼 / 一直重複&lt;/td>
 &lt;td>模型層&lt;/td>
 &lt;td>換&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/quantization/" data-link-title="Quantization" data-link-desc="用較少 bits 表示模型權重：壓縮記憶體佔用、加快生字速度，代價是少量品質衰減">量化&lt;/a>等級或換模型試&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>回答邏輯離譜 / 答非所問&lt;/td>
 &lt;td>模型層&lt;/td>
 &lt;td>model 能力不足、考慮換大一點 model&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>TTFT 異常變長&lt;/td>
 &lt;td>模型層 / 推論機制&lt;/td>
 &lt;td>prompt 變長了？KV cache 失效？&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>整台 Mac 變慢、Ollama 沒崩&lt;/td>
 &lt;td>伺服器層 / 系統&lt;/td>
 &lt;td>記憶體 swap、看 Activity Monitor&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ollama 自己 crash&lt;/td>
 &lt;td>伺服器層&lt;/td>
 &lt;td>看 server log、通常 OOM 或 bug&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>跨 session 設定遺失&lt;/td>
 &lt;td>介面層&lt;/td>
 &lt;td>IDE 設定沒存或被 reset&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Tab autocomplete 完全不觸發&lt;/td>
 &lt;td>介面層&lt;/td>
 &lt;td>autocomplete model 沒配對 / 沒 pull&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>對應的具體驗證指令範例：&lt;/p></description><content:encoded><![CDATA[<p>本地 LLM 工作流出問題時、第一個本能反應常是「重啟試試看」。本章建立另一種反射：用<a href="/blog/llm/00-foundations/three-layer-architecture/" data-link-title="0.2 介面 / 伺服器 / 模型三層架構" data-link-desc="把任何本地 LLM 工具放回正確的層級，用三層心智模型看懂工具關係">三層架構</a>（介面 / <a href="/blog/llm/knowledge-cards/inference-server/" data-link-title="Inference Server" data-link-desc="載入模型權重、處理 prompt、產生 token 的常駐 process">推論伺服器</a> / 模型）的視角先確認「哪一層壞」、再針對該層做具體診斷。這個方法不依賴記住每個工具的具體錯誤訊息、跨工具世代都成立。</p>
<p>具體錯誤訊息對照表（「<code>address already in use</code> 要這樣修」「<code>model not found</code> 要那樣修」）不在本章——這些隨工具版本變、查 release notes 跟 GitHub issue 更快。本章寫的是「換工具之後仍成立」的排錯思維。</p>
<h2 id="本章目標">本章目標</h2>
<p>讀完本章後、你應該能：</p>
<ol>
<li>看到症狀時、先定位是介面 / 伺服器 / 模型哪一層的問題。</li>
<li>知道在每一層該看什麼 log。</li>
<li>用「最小可重現」策略快速縮減問題範圍。</li>
<li>識別「跨層級的誤判」常見模式、把 server 層問題正確歸位、避開瞎調 model 的繞路。</li>
</ol>
<h2 id="故障定位的核心原則先確認哪一層壞">故障定位的核心原則：先確認哪一層壞</h2>
<p>模組零 <a href="/blog/llm/00-foundations/three-layer-architecture/" data-link-title="0.2 介面 / 伺服器 / 模型三層架構" data-link-desc="把任何本地 LLM 工具放回正確的層級，用三層心智模型看懂工具關係">三層架構</a> 的視角延伸到排錯：故障可能落在介面層（Continue.dev / Cursor 等 IDE 整合）、伺服器層（Ollama / LM Studio / llama.cpp）、或模型層（權重檔本身的能力 / 量化選擇）。在不知道哪一層壞之前、任何修法都是亂槍打鳥——重啟 Continue.dev 解不了模型量化太激進的問題、重 pull 模型解不了 IDE 設定錯的問題。</p>
<p>先定位再修補的 ROI 高於直接修補、因為沒有定位的修法常常掃過正確答案還不知道是哪個動作生效。定位用的工具不複雜：</p>
<ul>
<li><strong>直接 curl 伺服器 API</strong>：繞過介面層、直接驗證伺服器是否回應正常。</li>
<li><strong><code>ollama ps</code> / 等價指令</strong>：看伺服器層 model 狀態、確認 model 真的載入。</li>
<li><strong>換 model 試試</strong>：同樣 prompt、不同 model 表現一致就是介面 / 伺服器層、不一致就是 model 層。</li>
<li><strong>換 prompt 試試</strong>：簡單 prompt OK、複雜 prompt 崩、可能是 context 長度或 model 容量問題。</li>
</ul>
<p>這四個動作能 cover 90% 的定位需求。學會這個反射、排錯時間大幅縮短。</p>
<h2 id="症狀到層級的對應反射">症狀到層級的對應反射</h2>
<p>不同症狀對應到不同最有可能的故障層、建立對應反射能省下大量試錯時間。下表是寫 code 場景常見症狀的對應：</p>
<table>
  <thead>
      <tr>
          <th>症狀</th>
          <th>最可能層級</th>
          <th>第一步驗證</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Continue.dev 完全沒回應</td>
          <td>介面層 / 伺服器層</td>
          <td>curl 伺服器、看伺服器是否正常</td>
      </tr>
      <tr>
          <td>Continue.dev 報「connection refused」</td>
          <td>伺服器層</td>
          <td>伺服器沒在跑 / port 不對</td>
      </tr>
      <tr>
          <td>Continue.dev 顯示請求送出但無回應</td>
          <td>介面層 / 伺服器層</td>
          <td>curl 同 prompt、比較行為</td>
      </tr>
      <tr>
          <td>回答內容亂碼 / 一直重複</td>
          <td>模型層</td>
          <td>換<a href="/blog/llm/knowledge-cards/quantization/" data-link-title="Quantization" data-link-desc="用較少 bits 表示模型權重：壓縮記憶體佔用、加快生字速度，代價是少量品質衰減">量化</a>等級或換模型試</td>
      </tr>
      <tr>
          <td>回答邏輯離譜 / 答非所問</td>
          <td>模型層</td>
          <td>model 能力不足、考慮換大一點 model</td>
      </tr>
      <tr>
          <td>TTFT 異常變長</td>
          <td>模型層 / 推論機制</td>
          <td>prompt 變長了？KV cache 失效？</td>
      </tr>
      <tr>
          <td>整台 Mac 變慢、Ollama 沒崩</td>
          <td>伺服器層 / 系統</td>
          <td>記憶體 swap、看 Activity Monitor</td>
      </tr>
      <tr>
          <td>Ollama 自己 crash</td>
          <td>伺服器層</td>
          <td>看 server log、通常 OOM 或 bug</td>
      </tr>
      <tr>
          <td>跨 session 設定遺失</td>
          <td>介面層</td>
          <td>IDE 設定沒存或被 reset</td>
      </tr>
      <tr>
          <td>Tab autocomplete 完全不觸發</td>
          <td>介面層</td>
          <td>autocomplete model 沒配對 / 沒 pull</td>
      </tr>
  </tbody>
</table>
<p>對應的具體驗證指令範例：</p>
<ul>
<li><strong>回答亂碼 / 重複</strong>：<code>ollama list</code> 確認當前 model tag、改跑 <code>ollama run &lt;較高量化版本&gt;</code>（例如 Q4 → Q5）；同 prompt 換 model 確認是不是 model 本身能力問題、不是伺服器。</li>
<li><strong>TTFT 異常變長</strong>：<code>ollama ps</code> 看 model 是否被 unload 又重載（<a href="/blog/llm/01-local-llm-services/ollama/#%e6%a8%a1%e5%9e%8b%e5%b8%b8%e9%a7%90keep_alive" data-link-title="1.0 Ollama：主流推論伺服器" data-link-desc="一行 brew 裝完、ollama run 一鍵跑 Gemma 4 MTP、OpenAI 相容 API on localhost:11434">keep_alive</a> 太短）；檢查 prompt 字數是否暴增（10K+ tokens 進入 <a href="/blog/llm/knowledge-cards/prefill/" data-link-title="Prefill" data-link-desc="Prompt 首次處理時的計算階段：把整段輸入跑過模型、產生 KV cache">prefill</a> 痛點區）。</li>
<li><strong>Ollama 自己 crash</strong>：<a href="/blog/llm/knowledge-cards/launchd-service/" data-link-title="launchd Service" data-link-desc="macOS 原生的服務管理機制、把 process 註冊成自動啟動的 daemon 或 agent">launchd service</a> 模式看 <code>/opt/homebrew/var/log/ollama.log</code>、前景模式看啟動 terminal 的 stderr。</li>
</ul>
<p>這張表的核心訊號：</p>
<ul>
<li>「沒回應」「connection 系」→ 通常 server 層。</li>
<li>「內容怪」「答非所問」「重複」→ 通常 model 層。</li>
<li>「設定怪」「快捷鍵不對」→ 通常介面層。</li>
<li>「整機卡」→ 系統資源、不一定哪層的「bug」、可能是規格不夠。</li>
</ul>
<p>把這個 mapping 內化、看症狀立刻有第一手猜測、不用每次從零思考。</p>
<h2 id="log-在三層的角色差異">Log 在三層的角色差異</h2>
<p>每一層的 log 看的東西不同、用法不同：</p>
<h3 id="介面層-log">介面層 log</h3>
<ul>
<li><strong>位置</strong>：IDE plugin 的 console（VS Code Developer Tools、JetBrains 的 plugin log）。</li>
<li><strong>看什麼</strong>：請求是否發出、發到哪個 endpoint、回應 status code、parse error。</li>
<li><strong>常見訊號</strong>：請求根本沒發 → 介面層配置錯；請求發了但伺服器拒 → 伺服器層；請求成功但 parse 失敗 → 介面層或伺服器層回應格式不對。</li>
</ul>
<h3 id="伺服器層-log">伺服器層 log</h3>
<ul>
<li><strong>位置</strong>：Ollama 在 <code>~/.ollama/logs/server.log</code> 或類似位置、LM Studio 在 console 輸出、llama.cpp 在啟動 terminal。</li>
<li><strong>看什麼</strong>：模型載入過程、推論進度、error trace、記憶體狀態。</li>
<li><strong>常見訊號</strong>：載入 model 卡住 / 失敗 → model file 損壞或記憶體不足；推論時 OOM → 量化太激進或 context 太長；連線錯誤 → port 配置或 host binding。</li>
</ul>
<h3 id="模型層的觀察訊號">模型層的觀察訊號</h3>
<p>模型層通常沒有獨立的 log——權重檔本身不會 log、行為要透過伺服器層觀察。判讀模型問題的訊號通常是：</p>
<ul>
<li>「載入成功、推論時崩」→ 量化等級或記憶體配對問題。</li>
<li>「載入成功、推論結果差」→ 模型能力或量化品質問題。</li>
<li>「不同 prompt 表現不一致」→ 可能是 model 對特定 pattern 弱、不是 bug。</li>
</ul>
<p>模型層問題多半不是「壞了」、是「能力上限」——換更大模型或調量化是主要解法、不是「修 bug」。</p>
<h3 id="log-level-預設夠用針對性提升">log level 預設夠用、針對性提升</h3>
<p>實務上 default log level 提供的訊息已涵蓋多數排錯需要；全部開 verbose 反而把 noise 蓋過 signal、要找的關鍵錯誤被淹沒。有問題時針對該層提升 log level（其他層保持 default）、定位完再降回來。</p>
<h2 id="最小可重現的縮減策略">最小可重現的縮減策略</h2>
<p>症狀複雜時、把問題縮到最小、再逐步加回來。這個方法在所有軟體 debug 都通用、套用到 LLM 場景的具體流程：</p>
<ol>
<li>
<p><strong>直接 curl 伺服器、用最簡 prompt 復現</strong>：</p>
<ul>
<li>繞過介面層、確認伺服器本身行為。</li>
<li>prompt 用 <code>&quot;Hello&quot;</code> 這種最短的、排除 prompt 複雜度因素。</li>
<li>如果這步就崩 → 伺服器 / 模型層問題、可以排除介面層。</li>
</ul>
</li>
<li>
<p><strong>換不同 model 試</strong>：</p>
<ul>
<li>同樣 prompt、換 <code>gemma4:e4b</code> 或 <code>llama3.2:1b</code>。</li>
<li>不同 model 都正常 → 原 model 問題。</li>
<li>不同 model 也崩 → 伺服器層問題。</li>
</ul>
</li>
<li>
<p><strong>換不同伺服器試</strong>：</p>
<ul>
<li>Ollama 接不上、用 LM Studio 同模型試。</li>
<li>兩個都崩 → 模型或系統層問題。</li>
<li>一個好一個壞 → 該伺服器特有問題。</li>
</ul>
</li>
<li>
<p><strong>改變一個變數一次</strong>：</p>
<ul>
<li>每次只改一個變數（設定 / model / IDE 重啟三選一）、確保行為變化能對應到具體動作。</li>
<li>每次只改一項、觀察行為變化。</li>
</ul>
</li>
<li>
<p><strong>記錄每一步</strong>：</p>
<ul>
<li>排錯 30 分鐘還沒解時、開始會忘記試過什麼。</li>
<li>簡單 notebook 記錄「改了什麼、行為怎麼變」、避免轉圈。</li>
</ul>
</li>
</ol>
<p>這個方法看起來慢、實際上比「亂試一通」快很多。亂試的代價是「以為改了 A 沒效、其實改 A 跟改 B 互相抵銷、不知道」。最小可重現是 disciplined approach、值得花時間建立習慣。</p>
<h2 id="跨層級的常見誤判">跨層級的常見誤判</h2>
<p>排錯時常踩的陷阱是「把某層的問題誤判成另一層」、修錯方向白費力氣。常見誤判模式：</p>
<h3 id="把伺服器問題誤當模型問題">把伺服器問題誤當模型問題</h3>
<p>例：Ollama 因為 port 被佔啟動失敗、IDE 看到 connection refused、誤以為「model 載不起來、需要換 model」。實際上換 model 也救不了、要看 server log 才知道是 port 問題。</p>
<p>判讀：connection 系問題 → server 層、不是 model 層。</p>
<h3 id="把模型問題誤當伺服器問題">把模型問題誤當伺服器問題</h3>
<p>例：用 Q3 量化跑 7B 模型、輸出全是亂碼、誤以為「Ollama bug」、開 issue 報。實際上是量化太激進、模型本身輸出崩、換 Q4 就好。</p>
<p>判讀：「server 看起來正常、輸出怪」→ 通常 model 層、改量化或換 model。</p>
<h3 id="把介面問題誤當伺服器問題">把介面問題誤當伺服器問題</h3>
<p>例：Continue.dev 的 <code>config.json</code> 寫錯 <code>apiBase</code>、IDE 顯示 connection error、誤以為「Ollama 掛了」。實際上 Ollama 正常、curl 過得去、IDE 配置錯。</p>
<p>判讀：curl 過得去、IDE 過不去 → 介面層配置問題。</p>
<h3 id="把系統資源問題誤當軟體-bug">把系統資源問題誤當軟體 bug</h3>
<p>例：32GB Mac 跑 31B + 同時開大量 app、Mac 整體變慢、誤以為「Ollama 越來越慢」。實際上是記憶體 swap、Ollama 沒問題。</p>
<p>判讀：Activity Monitor 看 Memory Pressure 變紅 / swap 大量、是系統資源、不是軟體 bug。</p>
<h3 id="把-prompt-問題誤當模型問題">把 prompt 問題誤當模型問題</h3>
<p>例：給 model 超長 <a href="/blog/llm/knowledge-cards/context-window/" data-link-title="Context Window" data-link-desc="模型一次能處理的最大 token 數量：prompt 加生成的總和上限">context</a>（30K token）、<a href="/blog/llm/knowledge-cards/ttft/" data-link-title="TTFT" data-link-desc="Time To First Token：送出 prompt 到第一個 token 出現的等待時間">TTFT</a> 30 秒、誤以為「model 變慢了」。實際上是 <a href="/blog/llm/knowledge-cards/prefill/" data-link-title="Prefill" data-link-desc="Prompt 首次處理時的計算階段：把整段輸入跑過模型、產生 KV cache">prefill</a> 階段需要時間、跟 model 沒變慢無關。</p>
<p>判讀：短 prompt 正常、長 prompt 慢 → prefill 問題、可預期、不是 bug。</p>
<p>每種誤判的根因都是「症狀對應到錯的層級」。內化「症狀 → 層級」對應反射、能避開多數誤判。</p>
<h2 id="排錯工具箱">排錯工具箱</h2>
<p>四個基本工具能 cover 90% 的排錯場景：</p>
<h3 id="curl">curl</h3>
<ul>
<li><strong>角色</strong>：直接打伺服器 API、繞過介面層。</li>
<li><strong>用法</strong>：<code>curl http://localhost:11434/api/version</code> 看伺服器是否回應、<code>curl http://localhost:11434/v1/chat/completions</code> 帶最簡 prompt 試完整流程（11434 是 Ollama 預設 <a href="/blog/llm/knowledge-cards/port-and-localhost/" data-link-title="Port 與 Localhost" data-link-desc="TCP port 與 listen address 如何決定 API server 的對外暴露範圍">port</a>、見 <a href="/blog/llm/01-local-llm-services/ollama/" data-link-title="1.0 Ollama：主流推論伺服器" data-link-desc="一行 brew 裝完、ollama run 一鍵跑 Gemma 4 MTP、OpenAI 相容 API on localhost:11434">1.0 Ollama</a>）。</li>
<li><strong>價值</strong>：排除介面層、確認伺服器層行為。</li>
</ul>
<h3 id="ollama-ps--等價指令"><code>ollama ps</code> / 等價指令</h3>
<ul>
<li><strong>角色</strong>：看伺服器層當前 model 狀態。</li>
<li><strong>用法</strong>：<code>ollama ps</code> 列出載入記憶體的 model、看 size、idle timer。</li>
<li><strong>價值</strong>：確認「我以為載入了」跟「真的載入了」是否一致；看記憶體佔用是否合理。</li>
</ul>
<h3 id="activity-monitor--system-monitor">Activity Monitor / system monitor</h3>
<ul>
<li><strong>角色</strong>：看系統資源狀態。</li>
<li><strong>用法</strong>：Memory Pressure 是否變紅、CPU / GPU 使用率、swap 量、過熱降頻。</li>
<li><strong>價值</strong>：區分「軟體 bug」跟「規格不夠」。多數本地 LLM 慢的問題是規格、不是 bug。</li>
</ul>
<h3 id="ide-開發者工具">IDE 開發者工具</h3>
<ul>
<li><strong>角色</strong>：看介面層請求 / 回應。</li>
<li><strong>用法</strong>：VS Code 的 Help → Toggle Developer Tools、看 Network tab、看 Console。</li>
<li><strong>價值</strong>：確認介面層真的把請求發出去、看 server 回什麼。</li>
</ul>
<p>這四個工具學會用、寫 code 場景 90% 的排錯都能處理。剩 10% 的 deep issue（如 driver 問題、模型權重檔損壞、framework 內部 bug）需要更專業的工具、但這 10% 對寫 code 使用者來說、通常該求助社群或回報 maintainer、不是自己 debug。</p>
<h2 id="排錯流程的決策樹">排錯流程的決策樹</h2>
<p>把上面的內容整合成一個流程：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln"> 1</span><span class="cl">症狀出現
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">  ↓
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">curl 伺服器（伺服器層活著嗎）
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">  ├─ curl 失敗 → 看 server log（伺服器層問題）
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">  │   ├─ port 衝突 → 改 port 或 kill 舊 instance
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">  │   ├─ model 載入失敗 → 看 file / 記憶體
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">  │   └─ crash → bug report、看版本是否最新
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">  └─ curl 成功 → 介面層或 model 層問題
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">      ↓
</span></span><span class="line"><span class="ln">10</span><span class="cl">      換最簡 prompt 試（model 在簡單 prompt 上正常嗎）
</span></span><span class="line"><span class="ln">11</span><span class="cl">      ├─ 簡單 prompt 也崩 → model 層問題
</span></span><span class="line"><span class="ln">12</span><span class="cl">      │   ├─ 換 model 試 → 不同 model 都崩 → 系統或伺服器
</span></span><span class="line"><span class="ln">13</span><span class="cl">      │   └─ 同 model 換量化等級 → 量化太激進
</span></span><span class="line"><span class="ln">14</span><span class="cl">      └─ 簡單 prompt OK、複雜 prompt 崩
</span></span><span class="line"><span class="ln">15</span><span class="cl">          ↓
</span></span><span class="line"><span class="ln">16</span><span class="cl">          看 prompt 長度跟 context 限制
</span></span><span class="line"><span class="ln">17</span><span class="cl">          ├─ context 超出 → 縮短 prompt 或換 long-context model
</span></span><span class="line"><span class="ln">18</span><span class="cl">          └─ context 在範圍內 → model 能力上限、考慮換大 model
</span></span><span class="line"><span class="ln">19</span><span class="cl">              ↓
</span></span><span class="line"><span class="ln">20</span><span class="cl">              （如果伺服器、prompt、model 都檢查過還是壞）
</span></span><span class="line"><span class="ln">21</span><span class="cl">              介面層配置問題
</span></span><span class="line"><span class="ln">22</span><span class="cl">              ├─ 看 IDE plugin developer console
</span></span><span class="line"><span class="ln">23</span><span class="cl">              ├─ 比對 config.json 跟最簡 working example
</span></span><span class="line"><span class="ln">24</span><span class="cl">              └─ reset 設定後重試</span></span></code></pre></div><p>這棵樹不是「按順序跑完」、是「定位後對應到具體分支」。學會用症狀直接 jump 到對應分支、不必每次從根跑起。</p>
<h2 id="何時不適用本章方法論">何時不適用本章方法論</h2>
<p>本章「三層架構定位」假設「單機、單 user、單一伺服器實例、人在駕駛位」的個人開發場景。以下情境的方法論需要擴充：</p>
<table>
  <thead>
      <tr>
          <th>情境</th>
          <th>為什麼三層定位失效 / 需要擴充</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Multi-tenant 共用伺服器</td>
          <td>多個 user 共用 Ollama instance、症狀可能是「不同 user 的請求互相干擾」、單純三層定位看不出、需加 user / session 層</td>
      </tr>
      <tr>
          <td>容器化部署（Docker / k8s）</td>
          <td>介面 / 伺服器之間多一層網路命名空間、connection refused 可能是 container network 配置、不是伺服器層</td>
      </tr>
      <tr>
          <td>跨機器分散式 inference</td>
          <td>伺服器層拆成多 process / 多 node、單一 <code>ollama ps</code> 看不到全貌、需 cluster-level observability</td>
      </tr>
      <tr>
          <td>後端 production 服務</td>
          <td>排錯依賴 SLI / SLO + 監控告警支撐、而非「重啟試試」的探索式做法；本章方法論偏個人開發、production 場景需另尋資料中心 SRE 教材</td>
      </tr>
      <tr>
          <td>Agent loop 內部失敗</td>
          <td>失敗可能在 LLM 規劃 / tool execution / state machine 任一處、超出三層定位、見 <a href="/blog/llm/04-applications/agent-architecture/" data-link-title="4.4 Agent 架構原理" data-link-desc="Agent loop 結構、失敗模式、什麼任務適合 vs 不適合、跟人類審查的協作模型">4.4 Agent 架構</a></td>
      </tr>
  </tbody>
</table>
<p>本章方法論的甜蜜點是「個人 Mac、一個 IDE、一個 Ollama instance」的場景。離開這個甜蜜點、要把「三層」擴充成更多層（user / network / cluster）、或改用 production-grade 觀察工具。</p>
<h2 id="何時過時--何時不過時">何時過時 / 何時不過時</h2>
<p><strong>不會過時的部分</strong>：</p>
<ul>
<li>三層架構視角排錯（介面 / 伺服器 / 模型）。</li>
<li>「先定位、再修補」的反射。</li>
<li>最小可重現的縮減策略。</li>
<li>五類跨層級誤判模式的識別。</li>
<li>四個基本工具的概念（curl / process status / system monitor / dev tools）。</li>
</ul>
<p><strong>會變的部分</strong>：</p>
<ul>
<li>具體錯誤訊息文字（隨 Ollama / LM Studio / Continue.dev 版本變）。</li>
<li>log 檔位置（隨工具更新可能調整）。</li>
<li>特定指令名稱（如 <code>ollama ps</code> 將來可能改名）。</li>
<li>特定工具的開發者面板路徑。</li>
</ul>
<p>換工具或工具升級之後、本章的方法仍適用、只需要重新對應到「新工具的對應指令在哪」。看到新錯誤訊息時、回到三層架構定位、用最小可重現縮減——這比 google 錯誤訊息字面快得多、也比「重啟一次再試」可靠得多。</p>
<h2 id="下一章">下一章</h2>
<p>下一章：<a href="/blog/llm/02-math-foundations/" data-link-title="模組二：LLM 的數學基礎" data-link-desc="整理 LLM 推論背後需要理解的線性代數、機率與資訊論、最佳化、數值精度等數學概念">模組二 LLM 的數學基礎</a>、或回到 <a href="/blog/llm/01-local-llm-services/" data-link-title="模組一：本地 LLM 服務的安裝與應用" data-link-desc="Ollama、LM Studio、llama.cpp 的安裝與差異、VS Code &#43; Continue.dev 整合、模型選型與期望管理">模組一首頁</a> 看其他章節。</p>
]]></content:encoded></item></channel></rss>