使用 Ollama 運行本地大型語言模型
隨著人工智能技術的飛速發展,大型語言模型 (LLM) 已成為當今最令人興奮的領域之一。然而,大多數人接觸 LLM 的方式都是透過雲端服務,這可能會帶來隱私、成本及網路依賴等問題。Ollama 是一個開源工具,它讓您能夠在自己的電腦上輕鬆運行大型語言模型,無論是 macOS、Linux 還是 Windows。
另外,它開放了各模型的 API,把模型作為本地服務。我們可以使用 API 在程式中直接使用 LLM,解鎖人工智能的潛力。
本文將帶您了解 Ollama 的基本指令,並展示如何透過其本地 API 進行程式化互動,並提供實用的 Python 範例。
💡 什麼是 Ollama?
Ollama 是一個輕量級的框架,它簡化了在本地環境下運行和管理大型語言模型的過程。它不僅提供了一個簡單的 CLI 介面,讓使用者能夠便捷地分發 (distribute) 和執行 (execute) 各種大型語言模型,還提供了一個 RESTful API,讓開發者和愛好者能夠輕鬆地實驗、開發和部署基於本地模型的應用。
Ollama 的優勢:
- 隱私保護: 您的資料和對話完全在本地處理,不會發送到第三方伺服器。
- 離線使用: 一旦模型下載完成,您可以在沒有網路連接的情況下使用它們。
- 成本效益: 無需支付昂貴的 API 費用,只需承擔硬體成本和電費。
- 靈活實驗: 輕鬆切換、測試不同的模型,甚至創建自己的模型。
⚖️ 關於模型與量化 (Quantization)
Ollama 旨在讓大型語言模型在個人電腦上運行,這通常需要對模型進行優化以減少其大小和記憶體佔用。因此,Ollama 上提供的大多數模型都是經過量化 (Quantized) 處理的版本。
什麼是量化? 量化是一種將模型權重從高精度(如 32 位浮點數)轉換為低精度(如 4 位或 8 位整數)的技術。這樣可以顯著縮小模型檔案大小,並減少運行時所需的記憶體和計算資源,使模型能夠在消費級硬體上運行。
影響: 量化雖然帶來了部署上的便利性,但可能會對模型的準確性產生一定程度的影響。低精度權重在某些複雜推理任務上可能會導致輕微的效能下降或回答品質的細微差異。然而,對於許多日常任務和本地實驗而言,這種影響通常在可接受範圍內,且量化技術也在不斷進步,以最小化對準確性的損失。
重要提示: 在使用 Ollama 運行模型時,請留意模型名稱中可能包含的量化等級資訊(例如 q4_0
、q8_0
),這代表了該模型的量化程度。選擇適合您硬體能力和應用需求平衡的模型版本至關重要。
🖥️ 安裝 Ollama
首先,您需要前往 Ollama 的官方網站下載並安裝適用於您作業系統的版本:
安裝過程通常非常簡單,只需按照提示完成即可。安裝完成後,Ollama 服務會預設在後台運行(http://localhost:11434
)。
📝 Ollama 基本指令
安裝完成後,您可以透過終端機 (Terminal) 或命令提示字元 (Command Prompt) 來與 Ollama 互動。
1. 🚀 運行模型 (ollama run
)
這是最常用的指令,用於下載並啟動一個模型。如果模型尚未下載,Ollama 會自動為您下載。
ollama run qwen3:8b
執行此指令後,Ollama 會下載 qwen3:8b
模型(如果尚未下載),然後您就可以直接在終端機中與 qwen3:8b
進行對話了。
>>> Send a message (/? for help)
>>> 你好,你是誰?
你好!我是一個大型語言模型,由阿里的通義實驗室訓練。我能為你做什麼?
若要退出對話模式,請輸入 /bye
或按下 Ctrl + D
。
2. 📋 列出已下載模型 (ollama list
)
您可以查看所有已下載到本地的模型。
ollama list
範例輸出:
NAME ID SIZE MODIFIED
qwen3:8b f70868a445 5.2 GB 3 days ago
deepseek-r1:8b 6995872bfe4c 5.2 GB 2 hours ago
3. ⬇️ 下載模型 (ollama pull
)
如果您只想預先下載模型而不立即運行,可以使用 pull
指令。
ollama pull deepseek-r1:8b
這會下載 deepseek-r1:8b
模型,ollama pull 命令也可以用來更新模型。
4. 🗑️ 移除模型 (ollama rm
)
當您不再需要某個模型時,可以使用 rm
指令將其從本地移除,釋放磁碟空間。
ollama rm qwen3:8b
5. 🟢 啟動服務 (ollama serve
)
通常情況下,Ollama 安裝後會自動啟動服務。但如果服務未運行或您需要手動啟動,可以使用此指令。它會在 http://localhost:11434
上啟動 API 服務。
ollama serve
🔌 Ollama API 介紹
Ollama 提供了一個本地的 RESTful API,讓開發者能夠透過程式語言與模型進行互動。這對於將本地 LLM 整合到您的應用程式中非常有用。API 服務預設運行在 http://localhost:11434
。
Ollama 官方推薦使用其提供的 Python 函式庫 ollama
來簡化 API 呼叫。
🐍 安裝 Python 函式庫
首先,確保您的 Python 環境已安裝 ollama
函式庫:
pip install ollama
1. ✍️ 文字生成 (Generate)
此 API 用於讓模型根據給定的提示生成文字,適用於一次性的生成任務。
API 端點: POST /api/generate
Python 範例:
import ollama
# 確保 Ollama 服務正在運行
# ollama serve (若您是手動啟動服務)
# 執行生成請求
response = ollama.generate(model='qwen3:8b', prompt='介紹一下東京鐵塔')
print(response['response'])
範例輸出:
東京鐵塔(Tokyo Tower)是日本東京著名的地標性建築之一,以其獨特的設計、壯麗的景觀和歷史意義聞名。以下是關於東京鐵塔的簡要介紹:
...
🌊 串流 (Streaming) 生成
對於長時間的生成任務,推薦使用串流方式獲取回應,這樣可以即時顯示模型的輸出,提供更好的使用者體驗。
import ollama
stream = ollama.generate(model='qwen3:8b', prompt='用不到一百字介紹一下 AI。', stream=True)
for chunk in stream:
print(chunk['response'], end='', flush=True)
print("\n--- 生成結束 ---")
2. 💬 對話 (Chat)
此 API 用於進行多輪對話,模型會根據對話歷史來生成回應,保持上下文連貫性。
API 端點: POST /api/chat
Python 範例:
import ollama
messages = [
{'role': 'system', 'You are a helpful assistant'}
{'role': 'user', 'content': '你好!'},
{'role': 'assistant', 'content': '你好!我能為你提供什麼幫助?'},
{'role': 'user', 'content': '告訴我一個關於貓咪的有趣事實'},
]
response = ollama.chat(model='deepseek-r1:8b', messages=messages) # 使用 deepseek-r1:8b
print(response['message']['content'])
範例輸出:
你知道嗎?貓咪的平均壽命大約是 12 到 15 年,但有些貓可以活到 20 歲以上!
🗣️ 串流對話
同樣地,對話也可以使用串流方式獲取回應。
import ollama
messages = [
{'role': 'user', 'content': '用三句介紹東京'},
]
stream = ollama.chat(model='deepseek-r1:8b', messages=messages, stream=True) # 使用 deepseek-r1:8b
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
print("\n--- 對話結束 ---")
🛠️ 進階應用:Modelfile 與自定義模型
Ollama 不僅僅讓您運行現有模型,它還支援透過 Modelfile
定義和打包自己的模型。您可以基於現有模型 (例如 qwen3:8b
或 deepseek-r1:8b
),加入自己的指令、系統提示、設定參數 (如溫度、top-k) 甚至將多個 LoRA 權重合併,來創建一個符合特定應用場景的客製化模型。這為開發者提供了極大的靈活性,能夠根據需求調整模型的行為和性能。
詳細的 Modelfile
語法和使用方式,可以參考 Ollama 官方文件。
🚀 結語
Ollama 為本地大型語言模型的應用打開了新的大門。透過本文介紹的基本指令和 Python API 範例,以及對模型量化概念的理解,您已經掌握了在個人電腦上運行和程式化互動 LLM 的基礎。無論是為了隱私保護、成本效益還是實驗需求,Ollama 都是一個極具潛力的工具。
現在,您可以開始探索不同的模型、將其整合到您的專案中,甚至嘗試建立自己的客製化 LLM 應用!