<?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>Continue-Dev on Tarragon</title><link>https://tarrragon.github.io/blog/tags/continue-dev/</link><description>Recent content in Continue-Dev on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Tue, 12 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/continue-dev/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.3 VS Code + Continue.dev 整合</title><link>https://tarrragon.github.io/blog/llm/01-local-llm-services/vscode-continue-integration/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/01-local-llm-services/vscode-continue-integration/</guid><description>&lt;p>把本地 LLM 接到 VS Code 是「本地 LLM 寫 code」工作流的真正起點。前面章節安裝的 Ollama 是&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 是&lt;strong>介面層&lt;/strong>：使用者實際在編輯器裡按快捷鍵、打字、看 inline diff 的工具。&lt;/p>
&lt;p>Continue.dev 是 2026 年 5 月時與本地 LLM 整合最成熟的 VS Code 擴充套件。對應到雲端世界、它的定位類似 Cursor、差別是 Continue.dev 預設綁本地、可以同時連雲端；Cursor 預設綁雲端、本地是次要 surface、設定深度較高。&lt;/p>
&lt;p>本章假設你已經裝好 Ollama 並至少跑過一次 &lt;code>ollama run&lt;/code>。沒裝過請先回 &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 Ollama&lt;/a>。&lt;/p>
&lt;h2 id="本章目標">本章目標&lt;/h2>
&lt;p>讀完本章後，你應該能：&lt;/p>
&lt;ol>
&lt;li>安裝 Continue.dev 擴充套件。&lt;/li>
&lt;li>在 &lt;code>~/.continue/config.json&lt;/code> 設定本地 Ollama 模型。&lt;/li>
&lt;li>用 Cmd+L 開對話、Cmd+I 做行內編輯。&lt;/li>
&lt;li>同時設定本地與雲端模型，按任務切換。&lt;/li>
&lt;li>排除 Continue 連不上 Ollama 的常見問題。&lt;/li>
&lt;/ol>
&lt;h2 id="安裝擴充套件">安裝擴充套件&lt;/h2>
&lt;p>Continue 擴充套件是 VS Code 內接到本地 LLM 的介面層入口、裝完才有 chat panel 與 inline edit 快捷鍵。在 VS Code 內按 Cmd+Shift+X 開啟 extensions panel、搜尋 &lt;code>Continue&lt;/code>。第一個結果作者是 &lt;code>Continue Dev, Inc.&lt;/code>（藍色 verified 標記）、點 Install。&lt;/p>
&lt;p>裝完後左側 sidebar 多一個 Continue icon（一個小方塊）。第一次點開會跳出 onboarding、可以略過。&lt;/p>
&lt;p>擴充套件本身是 open source、Continue Dev 帳號（公司提供的雲端服務 tier、跟 VS Code 的 Microsoft 帳號是兩件事）可選。「本地 LLM」場景使用 open source 部分就足夠、不必登入。&lt;/p>
&lt;h2 id="找到-configjson">找到 config.json&lt;/h2>
&lt;p>Continue 的設定檔在 &lt;code>~/.continue/config.json&lt;/code>（macOS 是 &lt;code>/Users/&amp;lt;你的帳號&amp;gt;/.continue/config.json&lt;/code>）。第一次開 Continue 後檔案會自動產生。&lt;/p>
&lt;p>開檔案：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">code ~/.continue/config.json&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>或在 VS Code Continue panel 點右上角齒輪 icon，會直接開 config.json。&lt;/p>
&lt;p>預設內容包含一些雲端範例 model（OpenAI、Anthropic、Mistral），我們要加自己的本地 model。&lt;/p>
&lt;h2 id="設定本地-ollama-模型">設定本地 Ollama 模型&lt;/h2>
&lt;p>把 &lt;code>models&lt;/code> 陣列改成這樣：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl"> &lt;span class="nt">&amp;#34;models&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> &lt;span class="nt">&amp;#34;title&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Local: Gemma 4 31B MTP&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> &lt;span class="nt">&amp;#34;provider&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;ollama&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> &lt;span class="nt">&amp;#34;model&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;gemma4:31b-coding-mtp-bf16&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &lt;span class="nt">&amp;#34;apiBase&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;http://localhost:11434&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> &lt;span class="nt">&amp;#34;tabAutocompleteModel&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> &lt;span class="nt">&amp;#34;title&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Local autocomplete&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> &lt;span class="nt">&amp;#34;provider&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;ollama&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl"> &lt;span class="nt">&amp;#34;model&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;gemma4:e4b&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl"> &lt;span class="nt">&amp;#34;apiBase&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;http://localhost:11434&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl"> &lt;span class="nt">&amp;#34;embeddingsProvider&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl"> &lt;span class="nt">&amp;#34;provider&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;ollama&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl"> &lt;span class="nt">&amp;#34;model&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;nomic-embed-text&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl"> &lt;span class="nt">&amp;#34;apiBase&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;http://localhost:11434&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每個欄位的意義：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>欄位&lt;/th>
 &lt;th>意義&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>models&lt;/code>&lt;/td>
 &lt;td>可在 chat panel 下拉選擇的對話模型清單&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>tabAutocompleteModel&lt;/code>&lt;/td>
 &lt;td>在編輯器裡邊打邊補完的模型（按 Tab 接受）、建議用小模型加快回應&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>embeddingsProvider&lt;/code>&lt;/td>
 &lt;td>把 codebase 索引成向量、用於語意搜尋的 &lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/embedding-model/" data-link-title="Embedding Model" data-link-desc="把文字轉成向量的模型：用於 codebase 索引與語意搜尋">embedding 模型&lt;/a>。要先 &lt;code>ollama pull nomic-embed-text&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Embedding model 的角色跟 chat / autocomplete model 不同：chat model 負責「跟你對話」、embedding model 負責「把文字壓成向量、用來做語意相似比對」、是 &lt;code>@codebase&lt;/code> 功能的後端引擎。一般 chat model 沒法當 embedding model、要分開設定。&lt;/p></description><content:encoded><![CDATA[<p>把本地 LLM 接到 VS Code 是「本地 LLM 寫 code」工作流的真正起點。前面章節安裝的 Ollama 是<a href="/blog/llm/00-foundations/three-layer-architecture/" data-link-title="0.2 介面 / 伺服器 / 模型三層架構" data-link-desc="把任何本地 LLM 工具放回正確的層級，用三層心智模型看懂工具關係">伺服器層</a>，本章要接的 Continue.dev 是<strong>介面層</strong>：使用者實際在編輯器裡按快捷鍵、打字、看 inline diff 的工具。</p>
<p>Continue.dev 是 2026 年 5 月時與本地 LLM 整合最成熟的 VS Code 擴充套件。對應到雲端世界、它的定位類似 Cursor、差別是 Continue.dev 預設綁本地、可以同時連雲端；Cursor 預設綁雲端、本地是次要 surface、設定深度較高。</p>
<p>本章假設你已經裝好 Ollama 並至少跑過一次 <code>ollama run</code>。沒裝過請先回 <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>。</p>
<h2 id="本章目標">本章目標</h2>
<p>讀完本章後，你應該能：</p>
<ol>
<li>安裝 Continue.dev 擴充套件。</li>
<li>在 <code>~/.continue/config.json</code> 設定本地 Ollama 模型。</li>
<li>用 Cmd+L 開對話、Cmd+I 做行內編輯。</li>
<li>同時設定本地與雲端模型，按任務切換。</li>
<li>排除 Continue 連不上 Ollama 的常見問題。</li>
</ol>
<h2 id="安裝擴充套件">安裝擴充套件</h2>
<p>Continue 擴充套件是 VS Code 內接到本地 LLM 的介面層入口、裝完才有 chat panel 與 inline edit 快捷鍵。在 VS Code 內按 Cmd+Shift+X 開啟 extensions panel、搜尋 <code>Continue</code>。第一個結果作者是 <code>Continue Dev, Inc.</code>（藍色 verified 標記）、點 Install。</p>
<p>裝完後左側 sidebar 多一個 Continue icon（一個小方塊）。第一次點開會跳出 onboarding、可以略過。</p>
<p>擴充套件本身是 open source、Continue Dev 帳號（公司提供的雲端服務 tier、跟 VS Code 的 Microsoft 帳號是兩件事）可選。「本地 LLM」場景使用 open source 部分就足夠、不必登入。</p>
<h2 id="找到-configjson">找到 config.json</h2>
<p>Continue 的設定檔在 <code>~/.continue/config.json</code>（macOS 是 <code>/Users/&lt;你的帳號&gt;/.continue/config.json</code>）。第一次開 Continue 後檔案會自動產生。</p>
<p>開檔案：</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">code ~/.continue/config.json</span></span></code></pre></div><p>或在 VS Code Continue panel 點右上角齒輪 icon，會直接開 config.json。</p>
<p>預設內容包含一些雲端範例 model（OpenAI、Anthropic、Mistral），我們要加自己的本地 model。</p>
<h2 id="設定本地-ollama-模型">設定本地 Ollama 模型</h2>
<p>把 <code>models</code> 陣列改成這樣：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">  <span class="nt">&#34;models&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">      <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Local: Gemma 4 31B MTP&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">      <span class="nt">&#34;provider&#34;</span><span class="p">:</span> <span class="s2">&#34;ollama&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">      <span class="nt">&#34;model&#34;</span><span class="p">:</span> <span class="s2">&#34;gemma4:31b-coding-mtp-bf16&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">      <span class="nt">&#34;apiBase&#34;</span><span class="p">:</span> <span class="s2">&#34;http://localhost:11434&#34;</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">  <span class="p">],</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">  <span class="nt">&#34;tabAutocompleteModel&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">    <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Local autocomplete&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">    <span class="nt">&#34;provider&#34;</span><span class="p">:</span> <span class="s2">&#34;ollama&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">    <span class="nt">&#34;model&#34;</span><span class="p">:</span> <span class="s2">&#34;gemma4:e4b&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">    <span class="nt">&#34;apiBase&#34;</span><span class="p">:</span> <span class="s2">&#34;http://localhost:11434&#34;</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">  <span class="nt">&#34;embeddingsProvider&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">    <span class="nt">&#34;provider&#34;</span><span class="p">:</span> <span class="s2">&#34;ollama&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">    <span class="nt">&#34;model&#34;</span><span class="p">:</span> <span class="s2">&#34;nomic-embed-text&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">    <span class="nt">&#34;apiBase&#34;</span><span class="p">:</span> <span class="s2">&#34;http://localhost:11434&#34;</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><p>每個欄位的意義：</p>
<table>
  <thead>
      <tr>
          <th>欄位</th>
          <th>意義</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>models</code></td>
          <td>可在 chat panel 下拉選擇的對話模型清單</td>
      </tr>
      <tr>
          <td><code>tabAutocompleteModel</code></td>
          <td>在編輯器裡邊打邊補完的模型（按 Tab 接受）、建議用小模型加快回應</td>
      </tr>
      <tr>
          <td><code>embeddingsProvider</code></td>
          <td>把 codebase 索引成向量、用於語意搜尋的 <a href="/blog/llm/knowledge-cards/embedding-model/" data-link-title="Embedding Model" data-link-desc="把文字轉成向量的模型：用於 codebase 索引與語意搜尋">embedding 模型</a>。要先 <code>ollama pull nomic-embed-text</code></td>
      </tr>
  </tbody>
</table>
<p>Embedding model 的角色跟 chat / autocomplete model 不同：chat model 負責「跟你對話」、embedding model 負責「把文字壓成向量、用來做語意相似比對」、是 <code>@codebase</code> 功能的後端引擎。一般 chat model 沒法當 embedding model、要分開設定。</p>
<p><code>provider: ollama</code> 是 Continue 內建的 Ollama 整合、比 <code>provider: openai</code> 多支援 model auto-pull 等功能。<code>apiBase</code> 不需要加 <code>/v1</code>、Continue 內部會處理。</p>
<p>存檔後 Continue 會自動 reload。</p>
<h2 id="用-cmdl-開對話">用 Cmd+L 開對話</h2>
<p>Cmd+L 是把當前 buffer 餵進 chat 的快捷路徑、context 由選取範圍決定。回到 VS Code、按 <code>Cmd+L</code>（macOS）開啟 Continue chat panel。預設快捷鍵：</p>
<table>
  <thead>
      <tr>
          <th>快捷鍵</th>
          <th>動作</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>Cmd+L</code></td>
          <td>開啟 Continue panel、把當前選取的程式碼當 context</td>
      </tr>
      <tr>
          <td><code>Cmd+Shift+L</code></td>
          <td>把當前選取加進現有對話 context</td>
      </tr>
      <tr>
          <td><code>Cmd+I</code></td>
          <td>在編輯器裡開 inline edit prompt</td>
      </tr>
      <tr>
          <td><code>Cmd+;</code></td>
          <td>接受 inline edit 結果</td>
      </tr>
      <tr>
          <td><code>Cmd+'</code></td>
          <td>拒絕 inline edit 結果</td>
      </tr>
  </tbody>
</table>
<p>按 <code>Cmd+L</code> 後 panel 開啟，下方輸入區可以打 prompt。如果先選了一段 code，那段 code 會自動加進 context，你可以直接問「解釋這段 code」「改成 async」「加 type annotation」。</p>
<p>第一次提問時 Ollama 會載入 model（30 ~ 60 秒）、看到 Continue panel 有 spinner 是預期的。之後同一個 model 會留在記憶體（<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">ollama keep_alive</a>）、對話速度會快得多。</p>
<h2 id="用-cmdi-做-inline-edit">用 Cmd+I 做 inline edit</h2>
<p>把游標放在你要修改的 code 上（或選取一段），按 <code>Cmd+I</code> 開 inline prompt。打字描述要做什麼，例如：</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">加 type annotation</span></span></code></pre></div><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">把這個 callback 改成 async/await</span></span></code></pre></div><p>Enter 後 Continue 會把選取的 code + 你的指令送給本地模型，回傳的 diff 直接 inline 顯示。按 <code>Cmd+;</code> 接受、<code>Cmd+'</code> 拒絕。</p>
<p>陷阱是「選取範圍太大」。本地模型的 context window 雖然多半 8K 以上、但塞太多 code 會讓 <a href="/blog/llm/knowledge-cards/ttft/" data-link-title="TTFT" data-link-desc="Time To First Token：送出 prompt 到第一個 token 出現的等待時間">TTFT</a> 暴增。把選取範圍縮在一個 function 或一個 block 內、體感最好。</p>
<h2 id="同時設定本地與雲端模型按任務切換">同時設定本地與雲端模型（按任務切換）</h2>
<p>寫 code 場景的常見配置是「本地當預設、雲端當大難題備援」。修改 <code>config.json</code>：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">  <span class="nt">&#34;models&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">      <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Local: Gemma 4 31B MTP&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">      <span class="nt">&#34;provider&#34;</span><span class="p">:</span> <span class="s2">&#34;ollama&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">      <span class="nt">&#34;model&#34;</span><span class="p">:</span> <span class="s2">&#34;gemma4:31b-coding-mtp-bf16&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">      <span class="nt">&#34;apiBase&#34;</span><span class="p">:</span> <span class="s2">&#34;http://localhost:11434&#34;</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">      <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Cloud: Claude Sonnet 4.6&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">      <span class="nt">&#34;provider&#34;</span><span class="p">:</span> <span class="s2">&#34;anthropic&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">      <span class="nt">&#34;model&#34;</span><span class="p">:</span> <span class="s2">&#34;claude-sonnet-4-6&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">      <span class="nt">&#34;apiKey&#34;</span><span class="p">:</span> <span class="s2">&#34;sk-ant-xxx&#34;</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">      <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Cloud: GPT-5&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">      <span class="nt">&#34;provider&#34;</span><span class="p">:</span> <span class="s2">&#34;openai&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">      <span class="nt">&#34;model&#34;</span><span class="p">:</span> <span class="s2">&#34;gpt-5&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">      <span class="nt">&#34;apiKey&#34;</span><span class="p">:</span> <span class="s2">&#34;sk-xxx&#34;</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">  <span class="p">]</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><p>Continue chat panel 下方有 model selector，可以下拉切換。建議的切換時機：</p>
<table>
  <thead>
      <tr>
          <th>任務類型</th>
          <th>建議模型</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>簡單 function 補完、加 type、寫 docstring</td>
          <td>本地 Gemma 4 31B</td>
      </tr>
      <tr>
          <td>解釋程式碼、寫單元測試</td>
          <td>本地 Gemma 4 31B</td>
      </tr>
      <tr>
          <td>跨檔案重構、規劃新模組</td>
          <td>雲端 Claude Sonnet / GPT-5</td>
      </tr>
      <tr>
          <td>深度 debug、解奇怪 bug</td>
          <td>雲端 Claude Sonnet / GPT-5</td>
      </tr>
      <tr>
          <td>處理含 NDA 的客戶 code</td>
          <td>本地（合規要求 prompt 留在本機時、走本地路線）</td>
      </tr>
      <tr>
          <td>寫 commit message</td>
          <td>本地（隱私 + 任務簡單）</td>
      </tr>
  </tbody>
</table>
<p>詳細的判斷邏輯見 <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>。<strong>安全 / 資料邊界面向</strong>：同個 IDE 同時接本地跟雲端 provider、prompt routing 設錯就會把該走本地的 NDA / 客戶 code 送到雲端、見 <a href="/blog/llm/06-security/cross-cloud-local-data-boundary/" data-link-title="6.4 跨雲端 / 本地的資料邊界" data-link-desc="個人 dev 場景下混用雲端 LLM 跟本地 LLM 時的 prompt 洩漏點：Continue.dev 多 provider 設定、隱私資料流、按敏感度分流的判讀">6.4 跨雲端 / 本地的資料邊界</a>；codebase / 外部文件 / 剪貼簿成為 prompt injection 攻擊面的判讀見 <a href="/blog/llm/06-security/prompt-injection-in-ide/" data-link-title="6.3 IDE 場景的 prompt injection" data-link-desc="個人 dev 場景下 IDE 寫 code 工作流的 prompt injection：codebase 內容、外部文件、剪貼簿作為攻擊面、跟雲端 LLM 場景的差異">6.3 IDE 場景的 prompt injection</a>。</p>
<h2 id="codebase-索引與--命令">Codebase 索引與 @ 命令</h2>
<p><code>@</code> 命令是把外部 context（整個專案 / 終端機輸出 / docs）注入到 chat prompt 的擴充機制、讓 LLM 在回應時能參考超出選取範圍的資料。Continue 支援把整個 codebase 索引成向量資料庫、讓你用 <code>@codebase</code> 參考整個專案。要啟用：</p>
<ol>
<li><code>~/.continue/config.json</code> 設定 <code>embeddingsProvider</code>（前面已給範例）。</li>
<li>開新 chat 後在 prompt 內打 <code>@codebase</code>，Continue 會自動把相關片段加進 context。</li>
<li>第一次索引要 5 ~ 30 分鐘（看 repo 大小），之後增量更新。</li>
</ol>
<p><code>@codebase</code> 對中型專案（&lt; 1000 檔案）效果不錯、本地模型有機會找到合適片段；對大型專案（10000+ 檔案）效果受限於 embedding model 品質。大型專案的退路：拆 workspace 縮小索引範圍、改用 <code>@file</code> 明確指定相關檔案、或換較強的 embedding model（例如雲端 OpenAI <code>text-embedding-3-large</code>）。</p>
<p>其他 <code>@</code> 命令：</p>
<table>
  <thead>
      <tr>
          <th>命令</th>
          <th>用途</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>@codebase</code></td>
          <td>整個專案的語意搜尋</td>
      </tr>
      <tr>
          <td><code>@docs</code></td>
          <td>加進 documentation context（要先設定）</td>
      </tr>
      <tr>
          <td><code>@terminal</code></td>
          <td>把終端機最後一段輸出加進 context</td>
      </tr>
      <tr>
          <td><code>@file</code></td>
          <td>指定特定檔案</td>
      </tr>
      <tr>
          <td><code>@tree</code></td>
          <td>加進專案結構</td>
      </tr>
      <tr>
          <td><code>@open</code></td>
          <td>加進目前開啟的所有 tab</td>
      </tr>
  </tbody>
</table>
<h2 id="處理-continue-連不上-ollama">處理 Continue 連不上 Ollama</h2>
<p>常見錯誤訊息與處理：</p>
<table>
  <thead>
      <tr>
          <th>錯誤訊息</th>
          <th>處理</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>Failed to fetch http://localhost:11434/...</code></td>
          <td>Ollama server 沒在跑。<code>brew services start ollama</code></td>
      </tr>
      <tr>
          <td><code>model 'xxx' not found</code></td>
          <td>還沒 pull。<code>ollama pull xxx</code></td>
      </tr>
      <tr>
          <td><code>address already in use</code>（Ollama 那邊）</td>
          <td>已有 instance 在跑，<code>pkill -f &quot;ollama serve&quot;</code> 重啟</td>
      </tr>
      <tr>
          <td>Continue 無回應、長時間 spinner</td>
          <td>Model 正在載入。第一次 30 ~ 60 秒正常</td>
      </tr>
      <tr>
          <td>對話內容亂碼 / 一直重複</td>
          <td>模型品質不夠或 temperature 太高，換較大模型或調 temp</td>
      </tr>
      <tr>
          <td>Tab autocomplete 完全沒觸發</td>
          <td>確認 <code>tabAutocompleteModel</code> 設定、模型已 pull</td>
      </tr>
  </tbody>
</table>
<p>排錯時先用 curl 驗證 Ollama 本身正常：</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">curl http://localhost:11434/api/tags</span></span></code></pre></div><p>如果這個都回不出來、問題在 Ollama；如果這個正常但 Continue 連不上、問題在 Continue 設定。</p>
<p>排錯時的機制判讀：</p>
<ul>
<li><strong><code>Failed to fetch</code></strong>：通常是 Ollama 沒跑、或 listen address 配置不一致（Continue config 跟 <code>OLLAMA_HOST</code> 對不上）。</li>
<li><strong><code>address already in use</code></strong>：另一個 Ollama instance 佔了 port、或 LM Studio 啟動時也搶 11434。先用 <code>lsof -i :11434</code> 找佔用方。</li>
<li><strong>長時間 spinner</strong>：第一次載入大模型（30 ~ 60 秒）正常；如果每次新 chat 都這樣、可能 keep_alive 太短、模型每次被 unload。</li>
<li><strong>對話內容亂碼 / 一直重複</strong>：小模型 capacity 不足以維持長 context 連貫性、或 <code>repeat_penalty</code> 預設值對該模型不合適。先換較大模型驗證是不是 model 本身的問題、再回頭調 temperature / repeat_penalty。</li>
<li><strong>Tab autocomplete 沒觸發</strong>：autocomplete 模型沒 pull 成功、或 model 名稱拼錯。<code>ollama list</code> 確認 model 真的在。</li>
</ul>
<h2 id="何時-continuedev-不適合">何時 Continue.dev 不適合</h2>
<p>Continue.dev 是 VS Code 環境內最成熟的本地 LLM 介面層、但在以下情境會撞到設計邊界、需要找替代路徑：</p>
<table>
  <thead>
      <tr>
          <th>情境</th>
          <th>替代路徑</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>非 VS Code-family 編輯器（Vim / Emacs / Sublime）</td>
          <td>各 editor 有自己的 LLM plugin（如 Vim 的 <code>llm.nvim</code>、Emacs 的 <code>gptel</code>）、Continue 本身僅支援 VS Code / JetBrains</td>
      </tr>
      <tr>
          <td>Jupyter Notebook 環境</td>
          <td>Notebook 的 cell 結構跟 .py 檔不同、Continue 對 .ipynb 支援有限、改用 Jupyter-AI 或自己用 LangChain</td>
      </tr>
      <tr>
          <td>大型 monorepo（10000+ 檔案）</td>
          <td><code>@codebase</code> 索引效果受 embedding 品質限制、改拆 workspace 或用 <code>@file</code> 明確指定</td>
      </tr>
      <tr>
          <td>CLI-first / git-aware 工作流</td>
          <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；先把基底跑穩再進階">aider</a> 直接在 CLI 操作 git + LLM、適合「沒打開 IDE 也想用 LLM」</td>
      </tr>
      <tr>
          <td>想跑 multi-step agent（自動探索 + 多輪修改）</td>
          <td>Cline、aider 等較完整 agent 工具的設計目標更貼近、Continue 偏單輪 chat + inline edit</td>
      </tr>
  </tbody>
</table>
<p>Continue 的甜蜜點是「VS Code 內、單檔到中型專案、人在駕駛位的 chat + inline edit」。離這個甜蜜點越遠、收益越低、改用 Cline / aider / Cursor 等工具更直接。</p>
<h2 id="continuedev-跟-cursor-的取捨">Continue.dev 跟 Cursor 的取捨</h2>
<p>如果你正考慮 Continue.dev vs Cursor，下表是寫 code 場景的取捨：</p>
<table>
  <thead>
      <tr>
          <th>維度</th>
          <th>Continue.dev</th>
          <th>Cursor</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>本地 LLM 支援</td>
          <td>First-class，多家 provider 完整支援</td>
          <td>有，但設定較深、不是主要使用情境</td>
      </tr>
      <tr>
          <td>雲端 LLM 支援</td>
          <td>多家 provider（OpenAI、Anthropic、本地）</td>
          <td>主要綁 Cursor 自己的服務、能接 OpenAI / Anthropic</td>
      </tr>
      <tr>
          <td>訂閱費</td>
          <td>免費（本地 LLM 完全免費；接雲端要自己付 API）</td>
          <td>月費 USD 20（含若干雲端用量）</td>
      </tr>
      <tr>
          <td>Inline edit 體驗</td>
          <td>良好（Cmd+I）</td>
          <td>優秀（Cursor 的招牌）</td>
      </tr>
      <tr>
          <td>Agent 模式</td>
          <td>較陽春，主打 chat + edit</td>
          <td>較完整，有 multi-step agent</td>
      </tr>
      <tr>
          <td>Codebase 索引</td>
          <td>自家 embedding（本地或雲端）</td>
          <td>雲端索引（要 opt-out）</td>
      </tr>
      <tr>
          <td>隱私</td>
          <td>完全可控（純本地）</td>
          <td>預設送 Cursor 雲端 telemetry</td>
      </tr>
  </tbody>
</table>
<p>對「本地 LLM 為主」的使用者，Continue.dev 是更直接的選擇。Cursor 是「雲端 LLM 為主、偶爾本地」的選擇。</p>
<h2 id="下一章">下一章</h2>
<p>下一章：<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 寫 code 場景的模型選型優先順序</a>，回答「Ollama 跑起來該裝哪個 model」。</p>
]]></content:encoded></item><item><title>6.4 跨雲端 / 本地的資料邊界</title><link>https://tarrragon.github.io/blog/llm/06-security/cross-cloud-local-data-boundary/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/06-security/cross-cloud-local-data-boundary/</guid><description>&lt;p>寫 code 工作流常混用本地 LLM 跟雲端 LLM、混用的好處是組合兩邊優勢、代價是 prompt 在不同信任邊界之間流動。本章把「哪些 prompt 該留本機、哪些可以送雲端、怎麼配置才不會誤送」整理成可操作的分流判讀。本章是 &lt;a href="https://tarrragon.github.io/blog/llm/00-foundations/privacy-data-flow/" data-link-title="0.7 隱私 / 資安的資料流原理" data-link-desc="從「位置」到「資料流」的思考升級：信任邊界、合約模型、零信任原則套用到 LLM 工作流">0.7 隱私資料流原理&lt;/a>「資料流 thinking + 信任邊界」的具體落地、跟 &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 VS Code + Continue.dev 整合&lt;/a> 的 multi-provider 配置直接對應。信任邊界詞彙見 backend &lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/trust-boundary/" data-link-title="Trust Boundary" data-link-desc="說明系統哪些位置開始不能沿用原本的信任假設">trust-boundary&lt;/a> 卡、PII 跟資料分類見 backend &lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/pii/" data-link-title="PII" data-link-desc="說明可識別個人的資料如何影響權限、遮罩、保留與稽核">pii&lt;/a> / &lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/data-classification/" data-link-title="Data Classification" data-link-desc="說明資料分級如何決定保護、存取、保留與匯出規則">data-classification&lt;/a> 卡、API key 管理見 backend &lt;a href="https://tarrragon.github.io/blog/backend/knowledge-cards/secret-management/" data-link-title="Secret Management" data-link-desc="說明 token、key、password 與憑證如何保存、輪替與撤銷">secret-management&lt;/a> 卡。本章 framing 是個人 dev 視角；production 場景的 log / PII 治理見 &lt;a href="https://tarrragon.github.io/blog/backend/07-security-data-protection/llm-log-and-pii-governance/" data-link-title="LLM Log 與 PII 治理" data-link-desc="production LLM 服務的 prompt log 累積、PII 偵測與過濾、保留期限與合規對齊">backend/07 LLM log 與 PII 治理&lt;/a>。&lt;/p>
&lt;p>讀完本章後、你應該能對自己的 IDE 工作流回答：每個 LLM provider 收到什麼 prompt、雲端服務的資料政策大致長怎樣、哪些任務該分到本地、哪些可以送雲端、配置誤送的常見路徑跟對應防護。&lt;/p>
&lt;h2 id="本章目標">本章目標&lt;/h2>
&lt;ol>
&lt;li>認識「prompt 邊界」在多 provider 工作流的位置。&lt;/li>
&lt;li>區分本地 LLM 跟雲端 LLM 在資料流上的差異。&lt;/li>
&lt;li>認識主流雲端 LLM 服務的資料政策大致分類。&lt;/li>
&lt;li>用「敏感度 × 任務類型」軸把工作流分流到本地或雲端。&lt;/li>
&lt;li>認識多 provider 設定下、prompt 誤送的常見路徑跟對應防護。&lt;/li>
&lt;/ol>
&lt;h2 id="prompt-邊界在哪">prompt 邊界在哪&lt;/h2>
&lt;p>在多 provider 工作流下、prompt 邊界長這樣：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl"> ┌───────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl"> │ 使用者 + 本機 codebase │ ← trust zone A：完全本地
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> └───────────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> ↓ prompt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> ┌─────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> │ IDE LLM client（Continue.dev） │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> │ ↓ route by config │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> │ ├── 本地 model（Ollama / llama-server）│ ← trust zone B：仍在本機
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl"> │ ├── 商業雲端（Anthropic / OpenAI） │ ← trust zone C：雲端 vendor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> │ └── 第三方 LLM 聚合（OpenRouter etc.） │ ← trust zone D：聚合層 + 上游 vendor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> └─────────────────────────────────────────┘&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每跨一條邊界、prompt 都會被另一個主體看到。trust zone B 是本機 process（包括其他可能 dump 流量的工具）、C 是商業 LLM vendor、D 是聚合層加上游 vendor、複雜度跟洩漏面隨層數增加。&lt;/p></description><content:encoded><![CDATA[<p>寫 code 工作流常混用本地 LLM 跟雲端 LLM、混用的好處是組合兩邊優勢、代價是 prompt 在不同信任邊界之間流動。本章把「哪些 prompt 該留本機、哪些可以送雲端、怎麼配置才不會誤送」整理成可操作的分流判讀。本章是 <a href="/blog/llm/00-foundations/privacy-data-flow/" data-link-title="0.7 隱私 / 資安的資料流原理" data-link-desc="從「位置」到「資料流」的思考升級：信任邊界、合約模型、零信任原則套用到 LLM 工作流">0.7 隱私資料流原理</a>「資料流 thinking + 信任邊界」的具體落地、跟 <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> 的 multi-provider 配置直接對應。信任邊界詞彙見 backend <a href="/blog/backend/knowledge-cards/trust-boundary/" data-link-title="Trust Boundary" data-link-desc="說明系統哪些位置開始不能沿用原本的信任假設">trust-boundary</a> 卡、PII 跟資料分類見 backend <a href="/blog/backend/knowledge-cards/pii/" data-link-title="PII" data-link-desc="說明可識別個人的資料如何影響權限、遮罩、保留與稽核">pii</a> / <a href="/blog/backend/knowledge-cards/data-classification/" data-link-title="Data Classification" data-link-desc="說明資料分級如何決定保護、存取、保留與匯出規則">data-classification</a> 卡、API key 管理見 backend <a href="/blog/backend/knowledge-cards/secret-management/" data-link-title="Secret Management" data-link-desc="說明 token、key、password 與憑證如何保存、輪替與撤銷">secret-management</a> 卡。本章 framing 是個人 dev 視角；production 場景的 log / PII 治理見 <a href="/blog/backend/07-security-data-protection/llm-log-and-pii-governance/" data-link-title="LLM Log 與 PII 治理" data-link-desc="production LLM 服務的 prompt log 累積、PII 偵測與過濾、保留期限與合規對齊">backend/07 LLM log 與 PII 治理</a>。</p>
<p>讀完本章後、你應該能對自己的 IDE 工作流回答：每個 LLM provider 收到什麼 prompt、雲端服務的資料政策大致長怎樣、哪些任務該分到本地、哪些可以送雲端、配置誤送的常見路徑跟對應防護。</p>
<h2 id="本章目標">本章目標</h2>
<ol>
<li>認識「prompt 邊界」在多 provider 工作流的位置。</li>
<li>區分本地 LLM 跟雲端 LLM 在資料流上的差異。</li>
<li>認識主流雲端 LLM 服務的資料政策大致分類。</li>
<li>用「敏感度 × 任務類型」軸把工作流分流到本地或雲端。</li>
<li>認識多 provider 設定下、prompt 誤送的常見路徑跟對應防護。</li>
</ol>
<h2 id="prompt-邊界在哪">prompt 邊界在哪</h2>
<p>在多 provider 工作流下、prompt 邊界長這樣：</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">                │  使用者 + 本機 codebase   │ ← trust zone A：完全本地
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">                └───────────────────────────┘
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">                            ↓ prompt
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">        ┌─────────────────────────────────────────┐
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">        │  IDE LLM client（Continue.dev）         │
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">        │   ↓ route by config                     │
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">        │   ├── 本地 model（Ollama / llama-server）│ ← trust zone B：仍在本機
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">        │   ├── 商業雲端（Anthropic / OpenAI）     │ ← trust zone C：雲端 vendor
</span></span><span class="line"><span class="ln">10</span><span class="cl">        │   └── 第三方 LLM 聚合（OpenRouter etc.） │ ← trust zone D：聚合層 + 上游 vendor
</span></span><span class="line"><span class="ln">11</span><span class="cl">        └─────────────────────────────────────────┘</span></span></code></pre></div><p>每跨一條邊界、prompt 都會被另一個主體看到。trust zone B 是本機 process（包括其他可能 dump 流量的工具）、C 是商業 LLM vendor、D 是聚合層加上游 vendor、複雜度跟洩漏面隨層數增加。</p>
<h2 id="本地-llm-vs-雲端-llm-在資料流上的差異">本地 LLM vs 雲端 LLM 在資料流上的差異</h2>
<table>
  <thead>
      <tr>
          <th>維度</th>
          <th>本地 LLM</th>
          <th>雲端 LLM</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>prompt 走向</td>
          <td>留本機</td>
          <td>送到 vendor、依政策可能 log / 訓練用</td>
      </tr>
      <tr>
          <td>模型權重</td>
          <td>在本機</td>
          <td>在 vendor</td>
      </tr>
      <tr>
          <td>帳號需求</td>
          <td>無</td>
          <td>需註冊、有 API key</td>
      </tr>
      <tr>
          <td>監管 / 合規</td>
          <td>跟本機資料保護一致</td>
          <td>跟 vendor 政策（GDPR、HIPAA 等）對齊</td>
      </tr>
      <tr>
          <td>商業機密內容</td>
          <td>較適合</td>
          <td>看 vendor 政策、enterprise plan 通常承諾不訓練</td>
      </tr>
      <tr>
          <td>大模型能力</td>
          <td>視本機硬體</td>
          <td>較高（GPT-5、Claude 等旗艦）</td>
      </tr>
      <tr>
          <td>反應速度</td>
          <td>視本機硬體</td>
          <td>視網路 + vendor</td>
      </tr>
      <tr>
          <td>持續成本</td>
          <td>一次硬體投入</td>
          <td>按 token / call 收費</td>
      </tr>
  </tbody>
</table>
<p>混用的好處：</p>
<ol>
<li><strong>敏感任務留本地</strong>：機密 codebase、PII、合約等不送雲端。</li>
<li><strong>能力受限任務送雲端</strong>：跨檔案重構、複雜推理用旗艦雲端模型。</li>
<li><strong>離線可用</strong>：本地當 fallback、雲端不可用時仍能基本運作。</li>
</ol>
<p>混用的風險：<strong>配置稍微錯一步、原本想留本地的 prompt 被誤送到雲端</strong>。</p>
<h2 id="主流雲端-llm-服務的資料政策大致分類">主流雲端 LLM 服務的資料政策（大致分類）</h2>
<p>各家雲端 LLM 服務的資料政策依方案跟版本變化、大致可以分成幾類：</p>
<table>
  <thead>
      <tr>
          <th>政策類別</th>
          <th>典型描述</th>
          <th>個人 dev 視角</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Enterprise / API 預設不訓練</td>
          <td>透過 API 送的內容不用於訓練、僅依條款保留</td>
          <td>商業 API 的常見預設、個人 dev 用 API key 通常套用</td>
      </tr>
      <tr>
          <td>Consumer 預設可能用於訓練</td>
          <td>ChatGPT.com、Claude.ai 等網頁版、預設可能用於訓練</td>
          <td>看清楚當前條款跟 opt-out 開關</td>
      </tr>
      <tr>
          <td>30 天 abuse log 保留</td>
          <td>為了 abuse detection 保留 30 天、之後刪除</td>
          <td>多數商業 API 的常見做法</td>
      </tr>
      <tr>
          <td>Zero retention（特殊方案）</td>
          <td>enterprise 或特殊申請、不保留任何內容</td>
          <td>個人 dev 通常用不到</td>
      </tr>
  </tbody>
</table>
<blockquote>
<p><strong>事實查核註</strong>：上面是 2026 年 5 月主流商業 LLM 服務的常見政策分類、具體條款依 vendor、地區、方案、版本快速變化、且各家詞彙不一致（如「training」「improve our services」「abuse review」可能指不同範圍）。引用前以對應 vendor 的當前官方<a href="https://www.anthropic.com/legal/privacy">資料政策頁面</a>、<a href="https://openai.com/policies/">OpenAI Data Policy</a> 等為準。</p></blockquote>
<p>判讀重點不是「哪家最嚴」、是「我送進去的內容、貼合我的預期嗎」。</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">  公開 / 一般 / 機密 / 高機密（PII、合約、未公開 codebase）
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</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">  補完 / 解釋 / 重構 / 設計討論 / 端到端 agent</span></span></code></pre></div><p>對應的分流建議：</p>
<table>
  <thead>
      <tr>
          <th>任務 \ 敏感度</th>
          <th>公開 / 一般</th>
          <th>機密</th>
          <th>高機密（PII、合約、未公開核心）</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>補完</td>
          <td>雲端或本地皆可、看速度</td>
          <td>本地優先</td>
          <td>本地、且 disable codebase RAG</td>
      </tr>
      <tr>
          <td>解釋程式碼</td>
          <td>雲端較流暢</td>
          <td>本地、視內容</td>
          <td>本地、避免送整檔</td>
      </tr>
      <tr>
          <td>跨檔案重構</td>
          <td>雲端旗艦能力較強</td>
          <td>看 enterprise plan 的政策</td>
          <td>本地、或人工切片送雲端</td>
      </tr>
      <tr>
          <td>設計討論</td>
          <td>雲端較流暢</td>
          <td>enterprise plan 或本地</td>
          <td>本地、且過濾掉具體 entity 名稱</td>
      </tr>
      <tr>
          <td>端到端 agent</td>
          <td>雲端旗艦</td>
          <td>本地、且降低 tool 副作用範圍</td>
          <td>不適合 agent、改用 chat-only 本地</td>
      </tr>
  </tbody>
</table>
<p>實務上的常見模式：</p>
<ol>
<li><strong>預設本地、特定任務開雲端</strong>：日常工作走本地、需要旗艦能力時手動切。</li>
<li><strong>預設雲端、敏感任務切本地</strong>：日常走雲端旗艦、開機密 repo 時切本地。</li>
<li><strong>依 repo 切</strong>：用 Continue.dev / IDE 工具的「per-workspace config」、每個 repo 自己決定。</li>
</ol>
<p>選哪種模式取決於工作流的敏感度分布。多數寫 code 個人 dev 屬於「一般 / 機密混合」、值得用模式 1 或模式 3。「哪個任務適合本地、哪個適合雲端」的任務面判讀見 <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>、本章補上「分流之後的資料邊界」面。</p>
<h2 id="continuedev-多-provider-配置範例">Continue.dev 多 provider 配置範例</h2>
<p>Continue.dev 基礎安裝跟單一 provider config 見 <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>、本節聚焦多 provider 共存下的安全性設計。下面是一個合理的 Continue.dev 配置範例、把本地 + 雲端混用、清楚標出每個 model 的走向：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">  <span class="nt">&#34;models&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">      <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Local 30B MoE (default)&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">      <span class="nt">&#34;provider&#34;</span><span class="p">:</span> <span class="s2">&#34;ollama&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">      <span class="nt">&#34;model&#34;</span><span class="p">:</span> <span class="s2">&#34;qwen3-30b-a3b&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">      <span class="nt">&#34;apiBase&#34;</span><span class="p">:</span> <span class="s2">&#34;http://localhost:11434&#34;</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">      <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Local 14B (fast)&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">      <span class="nt">&#34;provider&#34;</span><span class="p">:</span> <span class="s2">&#34;ollama&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">      <span class="nt">&#34;model&#34;</span><span class="p">:</span> <span class="s2">&#34;qwen3-14b&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">      <span class="nt">&#34;apiBase&#34;</span><span class="p">:</span> <span class="s2">&#34;http://localhost:11434&#34;</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">      <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Cloud Claude (premium only)&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">      <span class="nt">&#34;provider&#34;</span><span class="p">:</span> <span class="s2">&#34;anthropic&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">      <span class="nt">&#34;model&#34;</span><span class="p">:</span> <span class="s2">&#34;claude-sonnet-4-6&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">      <span class="nt">&#34;apiKey&#34;</span><span class="p">:</span> <span class="s2">&#34;${env:ANTHROPIC_API_KEY}&#34;</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">  <span class="p">],</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl">  <span class="nt">&#34;tabAutocompleteModel&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl">    <span class="nt">&#34;title&#34;</span><span class="p">:</span> <span class="s2">&#34;Local autocomplete&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">    <span class="nt">&#34;provider&#34;</span><span class="p">:</span> <span class="s2">&#34;ollama&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl">    <span class="nt">&#34;model&#34;</span><span class="p">:</span> <span class="s2">&#34;qwen3-14b&#34;</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><p>關鍵設計：</p>
<ol>
<li><strong>預設模型是本地</strong>：list 第一個是 local、tabAutocomplete 也是 local。</li>
<li><strong>雲端模型 title 明確標記</strong>：「Cloud Claude」開頭、避免選錯。</li>
<li><strong>autocomplete 永遠本地</strong>：補完的 prompt 流量大、autocomplete 屬於高頻、留本地。</li>
<li><strong>API key 從環境變數</strong>：不寫死在 config 裡、避免 commit 進 git。</li>
</ol>
<blockquote>
<p><strong>事實查核註</strong>：Continue.dev 的 config 格式跟 provider 支援度依版本變化、本範例為示意、實際引用以當前 Continue.dev 官方文件為準。</p></blockquote>
<h2 id="prompt-誤送的常見路徑">prompt 誤送的常見路徑</h2>
<p>個人 dev 場景下常見的 prompt 誤送路徑：</p>
<ol>
<li><strong>預設 model 設成雲端、按了 hotkey 沒看到當前 model</strong>：把寫到一半的機密 prompt 送到雲端。對應防護：預設改本地、雲端 model 用名稱前綴明確。</li>
<li><strong>autocomplete 設成雲端</strong>：補完每幾秒就觸發、prompt 包含當前游標附近 code、流量大且持續。對應防護：autocomplete 必定本地。</li>
<li><strong>codebase RAG 索引到 <code>.env</code> / secrets</strong>：RAG 把 secret 加進 prompt、再送雲端。對應防護：IDE search exclude 加上 <code>.env</code>、<code>*.key</code>、<code>secrets/</code>、<code>.aws/</code>。RAG 把外部內容引入 prompt 的整體機制與失敗模式見 <a href="/blog/llm/04-applications/rag-principles/" data-link-title="4.1 RAG 原理：retrieval &#43; augmentation 模式" data-link-desc="為什麼模型需要外掛知識、語意相似 vs 字面相似、chunking 的本質取捨、retrieval 失敗的根本原因">4.1 RAG 原理</a>。</li>
<li><strong>多 client 同時跑、key 共用</strong>：Cursor / Continue.dev / Claude Code 等多 client 共用 API key、難追是哪個 client 的流量。對應防護：給每個 client 各自的 API key、有問題能追溯。</li>
<li><strong>聚合服務不知道實際送到哪</strong>：用 OpenRouter / together.ai 等聚合層、prompt 經過聚合層後送到上游 vendor、上游可能是不同 region 不同政策。對應防護：個人 dev 場景傾向不用聚合、直接接 vendor。</li>
<li><strong>forgot prompt history 含 sensitive content</strong>：某次貼了機密內容後、後續同 conversation 都帶著、不知不覺重複送。對應防護：機密 prompt 用獨立 conversation、用完清空。</li>
</ol>
<h2 id="個人-dev-場景的最低防護建議">個人 dev 場景的最低防護建議</h2>
<ol>
<li><strong>預設模型設成本地</strong>：避免誤觸發雲端。</li>
<li><strong>autocomplete 必定本地</strong>：流量大、持續、適合本機處理。</li>
<li><strong>API key 從環境變數讀、不寫死 config</strong>：dotfile commit 不會洩漏。</li>
<li><strong>codebase search exclude <code>.env</code> / secrets 路徑</strong>：避免 RAG 索引到 secret。</li>
<li><strong>看完 prompt 內容再送雲端</strong>：對重要任務、value 不大但風險高時 prefer 本地。</li>
<li><strong>不同 client 用不同 API key</strong>：流量追溯。</li>
<li><strong>機密 prompt 用獨立 conversation</strong>：用完清空、不污染後續。</li>
</ol>
<h2 id="雲端-vendor-的-enterprise-plan-選擇">雲端 vendor 的 enterprise plan 選擇</h2>
<p>當個人 dev 工作流穩定後、若要把雲端 LLM 用得更深、可以評估 enterprise plan：</p>
<table>
  <thead>
      <tr>
          <th>Plan 類型</th>
          <th>典型差異</th>
          <th>個人 dev 適用性</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Consumer / Free</td>
          <td>預設可能用於訓練、有 opt-out</td>
          <td>不適合機密內容</td>
      </tr>
      <tr>
          <td>API key（pay-as-you-go）</td>
          <td>通常預設不訓練、保留 30 天 abuse log</td>
          <td>多數個人 dev 用這個</td>
      </tr>
      <tr>
          <td>Team / Pro 訂閱</td>
          <td>多人共用、可能有額外 data control</td>
          <td>個人或小團隊適用</td>
      </tr>
      <tr>
          <td>Enterprise</td>
          <td>zero retention、SLA、客製合約</td>
          <td>個人 dev 通常用不到</td>
      </tr>
  </tbody>
</table>
<p>選擇判讀：個人 dev 主要看「API key 預設政策」、若不夠用、再評估升級。</p>
<h2 id="給讀者的跨邊界判讀流程">給讀者的跨邊界判讀流程</h2>
<p>每次設新工作流 / 換 LLM client / 加新 model 時的判讀流程：</p>
<ol>
<li><strong>盤點 model 列表</strong>：每個 model 是本地還是雲端、走哪家 vendor。</li>
<li><strong>看 vendor 的當前政策</strong>：別憑印象、看當前官方文件。</li>
<li><strong>設定 default model + autocomplete model</strong>：default 跟 autocomplete 是高頻路徑、優先本地。</li>
<li><strong>加 codebase RAG exclude</strong>：把 secret / sensitive path 排除。</li>
<li><strong>跑簡單測試</strong>：開個假機密 prompt（如「我的 SSH key 是 fake-key-test」）、觀察 client log 跟 vendor dashboard、確認流量去向符合預期。</li>
</ol>
<h2 id="下一章">下一章</h2>
<p><strong>靜態網站 / 沒 backend 場景的 prompt 邊界</strong>（API key 暴露、CORS、SaaS 信任、client-side abuse）見 <a href="/blog/llm/04-applications/static-and-serverless-rag-deployment/" data-link-title="4.16 靜態 / serverless RAG deployment：架構選擇與資安取捨" data-link-desc="沒 backend 的場景怎麼做 RAG：四種 deployment 方案、API key 暴露問題、CORS / abuse / 第三方信任、跟模組六的 routing">4.16 靜態 / serverless RAG deployment</a> 的資安段。</p>
<p>下一章：<a href="/blog/llm/06-security/routing-to-production-security/" data-link-title="6.5 跨進 production 的 routing 中樞" data-link-desc="個人 dev → 團隊 → production LLM 服務的三層演化、跟 backend/07 對應卡片的 routing 清單">6.5 跨進 production 的 routing 中樞</a>、整合本模組到 backend/07 production 場景的路由。</p>
]]></content:encoded></item></channel></rss>