Lesson 025:Local LLM 已經建立一個核心概念:模型可以在你控制的電腦或伺服器上執行,不一定每次都送去外部 API。
但下載一堆模型權重之後,新的問題馬上出現:
怎麼把模型真正啟動、管理,甚至讓自己的程式呼叫它?
Ollama 就是很常見的一種答案。
Ollama 不是模型
Ollama 是一套讓你在本機下載、管理與執行模型的工具。
可以延續上一篇 Hugging Face 的圖書館比喻:
- 模型權重像一本很厚的書。
- Ollama 像幫你把書搬回辦公室、整理好版本,再開一個櫃台讓其他程式來使用。
所以 Ollama、Gemma、Qwen、Llama 不是同一層東西。
Ollama 是工具;模型名稱才是你要執行的模型。
第一個指令:pull
常見流程會看到:
ollama pull gemma3
這是在 Lesson 027 的 CLI / Terminal 裡輸入的命令。
拆開來看:
ollama:執行 Ollama CLI。pull:把指定模型需要的資料取得到本機。gemma3:模型名稱或模型標籤。
所以它的直覺是:
「把 gemma3 這個模型準備到我的本機 Ollama 環境。」
這和 Git 的 git pull 名字剛好也有 pull,但不是同一個系統。
git pull拉的是 Git repository 的版本更新。ollama pull拉的是 Ollama 管理的模型內容。
看到命令時要先看「前面的工具名稱是誰」。
run:真正把模型拿來互動
接著:
ollama run gemma3
run 的意思是執行。
這個命令會使用指定模型開啟互動,讓你可以直接在 Terminal 裡輸入問題。
所以:
pull = 準備 / 取得模型
run = 使用 / 執行模型
這個差異很重要。
下載成功不代表模型一直在算東西;只有真的收到推論工作時,CPU / GPU 才會開始處理。
list:我到底已經有哪些模型?
ollama list
這個指令通常用來列出目前 Ollama 已經管理的模型。
它不會下載模型,也不會重新訓練模型。
只是回答:
「我本機現在有哪些模型可以用?」
遇到「模型明明下載過,但名稱打錯」時,ollama list 很實用。
模型名稱後面的大小是什麼?
有些模型會有不同變體或 Tag,例如不同參數量、量化版本。
Lesson 025 已經介紹過:
B常代表 billion = 10 億個參數等級。- Quantization 可以降低模型權重的儲存與記憶體需求。
所以選模型時,不要只問「哪個名字比較強」。
你還要看:
- 自己的 RAM / VRAM
- 模型大小
- 量化方式
- 任務需求
- 語言能力
- License
Ollama 可以讓別的程式呼叫模型
真正進入 AI 開發後,你通常不會只想在 Terminal 跟模型聊天。
你可能想做:
- 網頁聊天工具
- RAG
- Agent
- 文件摘要器
- 自己的桌面 App
這時就會接回 Lesson 018:API:API 是讓程式之間按照約定交換 Request 與 Response 的介面。
Ollama 可以在本機提供 API。
官方 Quickstart 常見概念範例:
curl http://localhost:11434/api/chat -d '{
"model": "gemma3",
"messages": [
{"role": "user", "content": "Hello!"}
]
}'
先不要急著複製,逐段拆。
localhost 是什麼?
localhost 代表:
目前這台電腦自己。
所以這個 Request 不是送去某個遙遠網站,而是送給你自己電腦上正在提供服務的 Ollama。
11434 是什麼?
11434 是這裡使用的 Port(連接埠)。
可以把同一台電腦想成一棟辦公大樓,IP / localhost 是大樓地址,而 Port 像不同部門的分機號碼。
/api/chat 是什麼?
這是 API 路徑,表示你要使用聊天相關介面。
-d 後面那一大段呢?
那是一段 JSON 資料,告訴服務:
- 用哪個模型
- 對話裡有哪些 messages
- 這次 user 說了什麼
用 Python 呼叫本機 Ollama
Lesson 026:Python 已經講過套件與函式。我們可以把同一件事改成 Python:
import requests
payload = {
"model": "gemma3",
"messages": [
{"role": "user", "content": "用一句話解釋 GPU"}
],
"stream": False,
}
response = requests.post(
"http://localhost:11434/api/chat",
json=payload,
)
print(response.json())
這段程式在做什麼?
第一行:
import requests
載入 requests 套件,讓 Python 比較方便送 HTTP Request。
接著:
payload = {...}
建立要送給 Ollama 的資料。
其中:
"model": "gemma3"
指定模型。
而:
"stream": False
表示這個簡化範例希望等完整 Response 回來,而不是一段一段串流接收。
真正送出 Request 的地方:
requests.post(...)
POST 是常見 HTTP 方法之一,這裡用來把資料送給 API。
最後:
print(response.json())
把伺服器回傳的 JSON Response 轉成 Python 可以讀的資料並印出。
這時你已經不是「手動跟模型聊天」,而是在寫一個可以程式化呼叫 Local LLM 的 App 雛形。
本機 API 就一定安全嗎?
不一定。
如果服務只綁在本機,而且沒有對外開放,攻擊面和公開網路 API 不同。
但你還是要注意:
- 是否把服務暴露到區域網路或 Internet
- 防火牆
- 誰能連線
- App 是否記錄敏感 Prompt
- 下載模型的來源
- 套件與系統權限
Local 只是部署位置,不是安全保證。
Ollama 和 Hugging Face 是競爭對手嗎?
不必這樣理解。
Lesson 029:Hugging Face 更接近模型、資料與開發資源的 Hub 生態。
Ollama 則更偏向把 Local Model 管理與執行流程簡化。
同一個模型家族可能同時在不同平台、不同格式、不同工具鏈出現。
所以 AI 工程常不是「選一個平台就永遠只用它」,而是不同層各用適合的工具。
Ollama 和 CUDA 有什麼關係?
Lesson 028:CUDA 講過:CUDA 是 NVIDIA GPU 計算的重要軟體平台。
Ollama 負責更高階的模型管理與推論流程,而底層是否使用 GPU、使用哪種加速,會依作業系統、硬體與支援狀況而不同。
你不需要因為用了 Ollama 就自己寫 CUDA Kernel。
但當你開始看效能與 VRAM 時,前一篇的 GPU / CUDA 概念就會派上用場。
一句話帶走
Ollama 是把 Local LLM 從「一堆模型檔案」變成「可以被人和程式使用的本機服務」的工具之一;pull 準備模型,run 執行模型,而 localhost API 則讓你的 Python、RAG 或 Agent 能真正接上它。
留言
有想法、疑問或想補充的地方,都可以留在這裡。
還沒有留言,來當 1F 吧。