本篇是 hands-on 系列的導讀——把分散在 ollama-setup / rag-demo / mcp-demo / permission-boundary 各章節的 setup 步驟整合成一條最短路徑、讓 clone repo 的人能在 15 分鐘內跑通所有 demo(RAGMCP、權限邊界三個 demo、RAG 是「retrieval 找相關內容 + LLM 回答」、MCP 是「LLM application ↔ tool server 的標準協議」)。

每篇 hands-on 文章 focus 在「為什麼這樣設計」、本篇 focus 在「按順序跑通」。讀完想懂原理再進對應章節讀。

驗證日期:2026-05-12 環境:macOS 14+、Apple Silicon、Ollama 0.23.2、Python 3.11+ 總時間:~15 分鐘(含 model 下載) 磁碟需求:Step 1 ~ 4 約 ~5 GB(Ollama 200 MB + nomic-embed-text 274 MB + gemma3:1b 815 MB + room for index);Step 5 ComfyUI 可選加 ~10 GB(SDXL base 模型)。 適用平台:本快速路徑只在 Apple Silicon Mac 驗證過;Intel Mac / Linux 上 Ollama 仍可裝、但 GPU 加速跟 model tag 行為可能不同、實際以官方 release notes 為準。

適合誰讀

你是本篇對你
剛 clone 我的 blog repo、想跑 demo 試試看從本篇開始、按步驟做
想懂某個 demo 的設計取捨跑通後再進 RAG demo / MCP demo / permission-boundary
想懂 Ollama / ComfyUI 安裝細節Ollama setup / ComfyUI setup
想看 production 怎麼想資源評估4.9 Production resource planning

為什麼不是「pre-built、clone 就能跑」

衍生產物(index.pkl__pycache__/、Ollama model weights、即「跑出來的 cache / index / weight」、跟 source code 區別)刻意不進 git、原因見 4.10 衍生產物管理原理。所以 clone repo 後需要:

  1. 裝 Ollama daemon + 拉 model(一次性)
  2. ingest.py 建 RAG index(corpus 變動時重跑)
  3. 之後 demo 就能用

本篇是這個流程的 step-by-step。

Step 1:裝 Ollama daemon(brew install ollama + brew services start

daemon = 常駐 background process、開機自動啟動、見 launchd service 卡

1brew install ollama
2brew services start ollama

驗證:

1curl -s http://localhost:11434/api/version
2# {"version":"0.x.x"}

詳細安裝跟 troubleshooting 見 Ollama setup 章節

Step 2:拉 model(embed + chat 兩種角色)

為什麼要拉兩個 model:RAG 需要 embedding model 把文字壓成向量做語意比對、chat model 負責根據 retrieval 結果生成回答、兩者訓練目標不同、不能互通(見 3.1 embedding 空間)。

1# Embedding model(RAG / MCP 都要、274 MB)
2ollama pull nomic-embed-text
3
4# Chat model(推薦從 1B 開始驗證、之後可換大)
5ollama pull gemma3:1b

驗證:

1ollama list
2# NAME                       SIZE      MODIFIED
3# gemma3:1b                  815 MB    ...
4# nomic-embed-text:latest    274 MB    ...

選 chat model 大小的取捨見 1.4 模型選型優先順序。本 quickstart 用 1B 主要驗證流程跑通;長段 daily use(需要 follow 多段格式指令、複雜推理)建議 4B / 8B 起跳(見 instruction-following-test)、極短句驗證 / 簡單問答 1B 也可。本系列預設用 instruction-tuned model 變體(tag 含 :Xb 不含 -base)、適合對話 / 寫 code。

Step 3:建 RAG index(跑 ingest.py

1cd /path/to/blog
2python3 scripts/rag-demo/ingest.py

預期輸出:

1Found 71 markdown files under content/llm
2  [10/71] 86 chunks in 4.5s
3  ...
4Wrote 463 records to scripts/rag-demo/index.pkl (22.3s)

實際數字看你的 blog content 量。Index file 在 scripts/rag-demo/index.pkl、3-50 MB 不等。

詳細的 chunking 策略、embedding 設計、為什麼 pickle、見 RAG demo 章節

Step 4:跑 RAG / MCP / permission demo

完成 step 1-3 後、四個 demo 都能跑了:

RAG demo(語意搜尋 + LLM 回答)

1python3 scripts/rag-demo/query.py --show-retrieved "你的問題"

例:

1python3 scripts/rag-demo/query.py --show-retrieved "什麼是 MCP?"

預期看到 retrieved chunks(含相似度跟來源 path)+ LLM 用這些 context 生的答案。

MCP demo(stdio JSON-RPC server)

1python3 scripts/mcp-demo/test_client.py

預期看到 5 個階段的 JSON-RPC 對話:initialize / tools/list / tools/call (search_blog) / tools/call (read_chunk) / error。

Permission boundary demo(LLM-mediated file edit)

 1# 備份要試的檔案
 2cp content/llm/knowledge-cards/token.md /tmp/token-orig.md
 3
 4# Dry-run(預設、不寫檔、印 diff)
 5python3 scripts/permission-demo/edit_with_llm.py \
 6  content/llm/knowledge-cards/token.md \
 7  "加一句說明"
 8
 9# 還原(如果剛剛沒用 dry-run)
10cp /tmp/token-orig.md content/llm/knowledge-cards/token.md

詳細的 --dry-run / --confirm / --auto 三種 mode 取捨見 Permission boundary 章節

Step 5(可選):ComfyUI text-to-image demo

需要額外裝 ComfyUI + 拉 SDXL model(~10 GB 磁碟)、流程獨立:

1# 跟 step 1 平行的軌道、見 ComfyUI setup 章節
2cd ~/Projects
3git clone --depth 1 https://github.com/comfyanonymous/ComfyUI.git
4cd ComfyUI
5python3 -m venv venv
6source venv/bin/activate
7pip install -r requirements.txt
8# 下載 SDXL base:~/Projects/ComfyUI/models/checkpoints/
9# 見 ComfyUI setup 章節指令

啟動 + 跑 generation:

1cd ~/Projects/ComfyUI && source venv/bin/activate && nohup python main.py > /tmp/comfyui.log 2>&1 &
2# 等 server ready
3until curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8188/ | grep -q 200; do sleep 2; done
4
5# 跑 generation(用 repo 內的 script)
6cd /path/to/blog
7python3 scripts/comfyui-test/generate.py --steps 15

詳細裝法 + workflow JSON 解讀見 ComfyUI setup 章節

Cleanup(完事釋放資源)

1# 停 Ollama daemon
2brew services stop ollama
3
4# kill ComfyUI(如果有跑)
5pkill -9 -f "ComfyUI/main.py"
6
7# 清 build artifact(可選、可重建)
8rm -f scripts/rag-demo/index.pkl
9find scripts -name __pycache__ -type d -exec rm -rf {} +

詳細的 resource lifecycle 跟 cleanup idiom 見 Resource management 章節

跑通後該往哪讀

想懂什麼讀哪
「RAG 為什麼 retrieval 對 / generation 弱」RAG demo
「MCP wire protocol 細節」MCP demo
「為什麼 LLM 寫 rm -rf 不會真的執行」Permission boundary
「不同 model 在 instruction following 上的差距」Instruction following test
「跑 demo 占多少 RAM、怎麼釋放」Resource management + RAG/MCP 資源 footprint
「production 部署該怎麼想」4.9 Production resource planning
「什麼該進 git、什麼不該」4.10 衍生產物管理原理

跑不過時

症狀對應章節
ollama: command not foundOllama setup § 常見前置設定問題
curl http://localhost:11434/api/version 沒回應同上
python3 ingest.py 報 HTTP error確認 Ollama daemon 跑著、nomic-embed-text 已 pull
RAG retrieval 結果都不相關4.1 RAG § Retrieval 失敗的根本原因
MCP test_client 卡住MCP demo § subprocess 跟 bufsize
一切都不對1.7 排錯方法論

何時這篇會過時

會變的部分

  • brew install ollama 流程(macOS 跟 brew 演化)
  • ollama pull 的具體 model tag(model 會新陳代謝)
  • Python 版本相容性(3.11 → 3.14 各有 quirk)

不會過時的部分

  • 4 步驟的順序(裝 daemon → 拉 model → 建 index → 跑 demo)是 RAG / MCP / 任何 LLM 應用的通用 setup pattern
  • 衍生產物(index、cache)不進 git 的設計取捨
  • Cleanup 步驟跟釋放邏輯

跑指令時報錯先看 step 對應章節的 troubleshooting section、再 Google 或開 issue。