把一個大型語言模型跑在自己的筆電上,過去要先搞定 CUDA、PyTorch、各種 Python 依賴,光環境就能耗掉一個下午。Ollama 把這整段流程收成一個安裝檔加一行指令:ollama run,模型就在本機跑起來,資料不出機器,也不用付 API 費用。

這篇談 Ollama 的安裝、常用指令、API 整合,以及最容易踩的兩個雷:API 回應解析和模型自訂檔的格式。

Ollama 是什麼

它是一個用 Go 寫的開源工具,把模型下載、權重管理、推論伺服器這幾件事包在一起。核心特點:

  • 一個指令下載模型、開始對話,不用手動處理權重檔
  • 內建一個跑在 localhost:11434 的 HTTP 伺服器,提供 REST API
  • 同一份指令在 Windows、macOS、Linux 都通用
  • 模型庫涵蓋 Llama、Gemma、Qwen、DeepSeek 等主流開源模型

要留意的是它走的是量化模型路線(預設多為 Q4 量化),換來的是更低的記憶體門檻,代價是輸出品質略低於原始全精度權重。對本機實驗、開發測試夠用;要追求極致品質得另尋方案。

安裝

系統需求

  • 作業系統:Windows、macOS、Linux 皆可
  • 記憶體:跑 7B 模型實測至少要 8GB RAM,13B 建議 16GB,再大就得看顯卡
  • 硬碟:一個 7B 量化模型約 4GB,多下載幾個很快就破 10GB,預留空間別手軟

記憶體是真正的瓶頸。8GB 機器跑 7B 模型會吃緊,背景開著瀏覽器和編輯器時更明顯——這點後面排錯會再提。

Windows

官網下載安裝檔,執行後它會在背景常駐並自動啟動服務。裝完開一個終端機確認:

1
ollama --version

macOS

官方主推的方式是到 ollama.com 下載 .dmg,拖進「應用程式」資料夾。這個版本附帶選單列圖示,會自動啟動服務、自動更新,對多數人最省事。

習慣用 Homebrew 管理套件的話也可以:

1
brew install ollama

差別在於 Homebrew 裝的是 CLI 與服務本體,沒有選單列 App,而且不會自動開機啟動,得自己 ollama serve 或設定服務。另外有個常見坑:用 .dmg 安裝的 App 不會讀 .zshrc,想設 OLLAMA_HOST 之類的環境變數對它無效;要調設定反而是 Homebrew 版比較直覺。

Linux

官方安裝腳本:

1
curl -fsSL https://ollama.com/install.sh | sh

照例,把腳本 pipe 進 shell 前最好先 curl 下來看一眼內容再執行。

基本使用

下載與運行模型

Ollama 把下載和運行合在一起——ollama run 若發現本機沒有該模型,會自動先 pull 再進對話。也可以分開做:

1
2
3
4
5
# 先下載 Llama 2(7B 量化版約 3.8GB)
ollama pull llama2

# 下載去除內容審查的變體(注意:它是 uncensored 版,不是體積較小的輕量版,同樣是 7B 等級)
ollama pull llama2-uncensored

llama2-uncensored 常被誤會成「精簡版」,其實它和 llama2 一樣是 7B 規模,差別在於移除了內容過濾,輸出更不設限——記憶體需求並不會比較低。真要找小一點的模型,看 gemma:2bqwen2:1.5b 這類明確標小參數量的。

開始對話:

1
ollama run llama2

進到互動模式後直接打字即可,輸入 /bye 離開。

常用管理指令

1
2
3
4
5
6
7
8
9
10
11
# 列出已下載的模型
ollama list

# 列出正在記憶體中運行的模型
ollama ps

# 複製一個模型(常用來做為自訂的基底)
ollama cp llama2 my-llama2

# 刪除模型
ollama rm llama2

這裡要澄清一個網路上流傳的錯誤:Ollama 沒有 export 子指令。完整的子指令只有 servecreateshowrunstoppullpushlistpscprm 這些,照抄 ollama export 只會得到 unknown command "export"

想匯出或搬移一個模型(含你自訂過的),正確做法有兩條:

1
2
3
4
5
# 方法一:把模型還原成 Modelfile,再在另一台機器用 create 重建
ollama show --modelfile llama2 > Modelfile

# 方法二:直接複製權重目錄(Linux/macOS 預設路徑)
# ~/.ollama/models

進階應用

用 REST API 整合

服務跑起來後,http://localhost:11434/api/generate 就能呼叫。這裡有個會讓很多人卡住的細節:**這個端點預設 stream=true**,回傳的不是一個完整 JSON,而是一串以換行分隔的 NDJSON(多個 JSON 物件逐行送出)。對這種回應直接呼叫 response.json() 會丟 json.JSONDecodeError,程式根本跑不起來。

兩種解法。第一種,明確關掉串流,拿到單一 JSON:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests

def chat_with_model(prompt):
url = 'http://localhost:11434/api/generate'
data = {
'model': 'llama2',
'prompt': prompt,
'stream': False, # 關鍵:關閉串流才能用 response.json()
}
response = requests.post(url, json=data)
return response.json()['response']

result = chat_with_model("解釋什麼是人工智慧")
print(result)

第二種,保留串流、逐行解析,做即時輸出的場景用這個:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import json
import requests

def stream_chat(prompt):
url = 'http://localhost:11434/api/generate'
data = {'model': 'llama2', 'prompt': prompt} # stream 預設為 True

with requests.post(url, json=data, stream=True) as resp:
resp.raise_for_status()
for line in resp.iter_lines():
if not line:
continue
chunk = json.loads(line)
print(chunk.get('response', ''), end='', flush=True)
if chunk.get('done'):
break

stream_chat("解釋什麼是人工智慧")

寫整合前先想清楚要哪種:一次拿完整結果用 stream=False,要打字機效果就逐行讀。混在一起就是 JSONDecodeError 的來源。

自訂模型行為

Ollama 用一個叫 Modelfile 的設定檔來自訂模型——注意是首字大寫、沒有副檔名的 Modelfile,而且它的語法不是 YAML,是 Ollama 自己一套以指令開頭的格式(每行 INSTRUCTION 參數)。網路上有些教學把它寫成 .yaml 或用 YAML 區塊標註,那是錯的,照著存檔 ollama create 不會按你的預期解析。

一個典型的 Modelfile

1
2
3
4
5
6
7
8
9
# Modelfile
FROM llama2

# 設定系統提示
SYSTEM "你是一個熱心助人的 AI 助手,回答簡潔不囉嗦。"

# 設定參數
PARAMETER temperature 0.7
PARAMETER top_p 0.9

存成名為 Modelfile 的檔案後,用 create 建出你的客製模型:

1
2
ollama create my-assistant -f Modelfile
ollama run my-assistant

FROMSYSTEMPARAMETER 這些指令本身大小寫不敏感,但檔案慣例就叫 Modelfile,跟著慣例走,省得別人接手時找不到。

常見問題

記憶體不足(最常遇到):跑 7B 模型時系統卡住或 Ollama 直接被 OOM kill,通常就是 RAM 不夠。先用 ollama ps 確認沒有多個模型同時佔著記憶體,再考慮換更小的模型(如 gemma:2b)。Windows 上加大虛擬記憶體能救急,但會明顯變慢——這是拿硬碟換記憶體,能跑不代表好用。

模型下載失敗或中斷:多半是網路問題。Ollama 的 pull 支援斷點續傳,重跑同一條 ollama pull 指令通常就接著下載。公司網路擋外連的話,設 HTTPS_PROXY 環境變數走代理。

API 連不上:先確認服務在跑——ollama list 能正常回應就代表服務活著。預設只綁 127.0.0.1,要讓區網其他機器連進來,得設 OLLAMA_HOST=0.0.0.0 再重啟服務。

結語

Ollama 真正解決的是「把開源模型跑起來」這段門檻——下載、量化、推論伺服器全包好,省下的是環境配置的時間。它不會給你雲端 API 等級的輸出品質,量化和本機硬體都是現實限制;但對於想在自己機器上做實驗、跑離線推論、或把 LLM 接進自家小工具的人,這個成本與便利的折衷很划算。

裝好之後最值得先試的,是把那段 stream=False 的 API 範例跑通,再寫一個 Modelfile 客製一個自己的助手——這兩件事走過一遍,後面要怎麼把它接進專案就有底了。

參考資料