Hands-on Quickstart:clone repo 後跑通所有 demo
本篇是 hands-on 系列的導讀——把分散在 ollama-setup / rag-demo / mcp-demo / permission-boundary 各章節的 setup 步驟整合成一條最短路徑、讓 clone repo 的人能在 15 分鐘內跑通所有 demo(RAG、MCP、權限邊界三個 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 後需要:
- 裝 Ollama daemon + 拉 model(一次性)
- 跑
ingest.py建 RAG index(corpus 變動時重跑) - 之後 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 found | Ollama 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。