Ollama 是什麼? 一個開源的本機大型語言模型執行工具,讓你在個人電腦上一鍵下載、執行和管理 Llama、Mistral、Qwen 等開源 AI 模型,無需 GPU 叢集,無需雲端 API。
目錄
- Ollama 是什麼?
- 安裝 Ollama
- 快速上手:執行你的第一個模型
- 模型管理:下載、切換、刪除
- Ollama API:整合到你的應用
- 實戰案例:建構本機 AI 助手
- 效能優化與 GPU 加速
- 常見問題 FAQ
- 總結
Ollama 是什麼?
Ollama 是一個開源的本機大型語言模型(LLM)執行工具,由 Jeff Hancock 建立,採用 MIT 授權。它的核心目標是:讓任何人都能輕鬆在本機執行開源 AI 模型。
核心特性
| 特性 | 說明 |
|---|---|
| 一鍵執行 | ollama run llama3 即可啟動模型 |
| 模型庫 | 內建數十種熱門模型,支援自訂 Modelfile |
| REST API | 標準 OpenAI 相容介面,方便整合 |
| 跨平台 | macOS、Linux、Windows 全覆蓋 |
| GPU 加速 | 自動偵測並利用 NVIDIA/AMD GPU |
| 開源免費 | MIT 授權,商業可用 |
為什麼選擇 Ollama?
在 Ollama 出現之前,想在本機執行大型語言模型通常需要複雜的配置:手動下載權重檔案、安裝 PyTorch、處理依賴衝突、編寫推理程式碼。Ollama 把這些全部封裝成一行指令。
與其他本機 LLM 工具比較:
| 工具 | 易用性 | 模型數量 | API 相容性 | GPU 支援 |
|---|---|---|---|---|
| Ollama | ⭐⭐⭐⭐⭐ | 50+ | OpenAI 相容 | NVIDIA/AMD/Apple Silicon |
| LM Studio | ⭐⭐⭐⭐ | 30+ | OpenAI 相容 | NVIDIA/AMD |
| GPT4All | ⭐⭐⭐ | 20+ | 自訂 | NVIDIA/AMD |
| 手動部署 | ⭐ | 不限 | 自訂 | 需手動配置 |
Ollama 的優勢在於極簡的使用方式和豐富的模型生態,特別適合開發者快速原型開發和日常 AI 輔助程式設計。
安裝 Ollama
macOS
# 方法 1:一鍵安裝(推薦)
curl -fsSL https://ollama.com/install.sh | sh
# 方法 2:Homebrew 安裝
brew install ollama
# 驗證安裝
ollama --version
macOS 版本會自動利用 Apple Silicon (M1/M2/M3/M4) 的 Metal GPU 加速,效能表現優秀。
Linux
# 一鍵安裝(含 systemd 服務)
curl -fsSL https://ollama.com/install.sh | sh
# 手動安裝(二進位方式)
curl -fsSL https://ollama.com/install.sh | OLLAMA_INSTALL=1 sh
# 使用 systemd 管理
sudo systemctl start ollama
sudo systemctl enable ollama
# 驗證
ollama --version
Linux 安裝會自動偵測 NVIDIA GPU 並安裝 CUDA 驅動支援。
Windows
# 下載 Windows 安裝程式
winget install Ollama.Ollama
# 或者從官網下載安裝包
# https://ollama.com/download/OllamaSetup.exe
# 驗證
ollama --version
Windows 版本支援 NVIDIA CUDA 和 AMD ROCm GPU 加速。
Docker 部署
# 拉取官方映像檔
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
# 驗證
docker exec ollama ollama list
Docker 部署適合伺服器環境和 CI/CD 場景。
快速上手:執行你的第一個模型
一步執行
ollama run llama3.2
就這麼簡單!Ollama 會自動: 1. 檢查本機是否已有該模型 2. 沒有則從官方模型庫下載 3. 啟動互動式對話介面
首次執行會下載模型(大約 2-4 GB),之後啟動只需幾秒鐘。
互動式對話
執行模型後,你會看到一個互動式終端介面:
>>> 你好!請用繁體中文介紹一下你自己。
你好!我是一個 AI 助手,基於 Llama 3.2 模型執行。我可以幫助
你回答問題、編寫程式碼、翻譯文字、進行腦力激盪等等。有什麼我
可以幫你的嗎?
>>> 幫我寫一段 Python 快速排序程式碼
當然!這是快速排序的 Python 實作:
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
# 測試
print(quick_sort([3, 6, 8, 10, 1, 2, 1]))
# 輸出: [1, 1, 2, 3, 6, 8, 10]
常用快捷鍵
| 快捷鍵 | 功能 |
|---|---|
Enter |
傳送訊息 |
Ctrl+C |
中斷目前回應 |
Ctrl+D 或 /bye |
結束對話 |
Ctrl+R |
重新產生回覆 |
/set parameter |
修改產生參數 |
模型管理:下載、切換、刪除
檢視可用模型
# 檢視本機已安裝的模型
ollama list
# 範例輸出:
# NAME ID SIZE MODIFIED
# llama3.2:latest a1b2c3d4e5f6 2.0 GB 2 hours ago
# mistral:7b f6e5d4c3b2a1 4.1 GB 1 day ago
# qwen2.5:14b 1a2b3c4d5e6f 8.9 GB 3 days ago
瀏覽官方模型庫
造訪 ollama.com/library 檢視所有可用模型。以下是 2026 年最熱門的模型推薦:
| 模型 | 參數量 | 大小 | 適用場景 |
|---|---|---|---|
| Llama 3.2 | 1B/3B/8B | 0.8-4.7 GB | 通用對話、程式碼產生 |
| Mistral 7B | 7B | 4.1 GB | 通用任務、多語言 |
| Qwen 2.5 | 7B/14B/32B | 4-18 GB | 中文優化、數學推理 |
| DeepSeek Coder V2 | 16B/236B | 9-133 GB | 程式碼產生、程式設計助手 |
| Phi-4 | 14B | 8.4 GB | 輕量級、推理能力強 |
| Gemma 2 | 2B/9B/27B | 1.6-15 GB | Google 出品、高效推理 |
| Yi 1.5 | 6B/9B/34B | 3.5-20 GB | 中英文雙語優化 |
下載模型
# 下載指定模型
ollama pull llama3.2
ollama pull mistral:7b
ollama pull qwen2.5:14b
# 下載特定版本
ollama pull llama3.2:3b
切換模型
在互動式對話中:
>>> /model mistral:7b
已切換到 mistral:7b 模型
或者在指令列直接指定:
ollama run mistral:7b
刪除模型
# 刪除單個模型
ollama rm llama3.2
# 檢視所有模型佔用空間
du -sh ~/.ollama/models/*
自訂 Modelfile
Ollama 支援建立自訂模型配置。建立 Modelfile 檔案:
FROM llama3.2:3b
# 設定系統提示詞
SYSTEM """
你是一個專業的 Python 開發助手。
回答時請:
1. 優先給出可執行的程式碼範例
2. 解釋程式碼的關鍵邏輯
3. 指出潛在的陷阱和優化點
"""
# 調整產生參數
PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER num_ctx 4096
然後建立自訂模型:
# 建立模型
ollama create my-python-assistant -f Modelfile
# 執行自訂模型
ollama run my-python-assistant
Ollama API:整合到你的應用
REST API 基礎
Ollama 預設在 http://localhost:11434 提供 REST API,相容 OpenAI 介面格式。
# 產生文字(非串流式)
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "用 Python 寫一個氣泡排序",
"stream": false
}'
# Chat 格式(多輪對話)
curl http://localhost:11434/api/chat -d '{
"model": "llama3.2",
"messages": [
{"role": "system", "content": "你是一個程式碼專家"},
{"role": "user", "content": "解釋 async/await"}
],
"stream": false
}'
OpenAI 相容介面
Ollama 提供 OpenAI 相容端點,方便遷移現有應用:
# 相容 OpenAI 的 /v1/chat/completions
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ***" \
-d '{
"model": "llama3.2",
"messages": [{"role": "user", "content": "Hello"}]
}'
Python 整合
使用官方 ollama Python 庫:
# 安裝
# pip install ollama
import ollama
# 簡單產生
response = ollama.generate(
model='llama3.2',
prompt='用一句話解釋什麼是量子計算'
)
print(response['response'])
# Chat 格式
response = ollama.chat(
model='llama3.2',
messages=[
{'role': 'system', 'content': '你是程式碼審查專家'},
{'role': 'user', 'content': '這段程式碼有什麼問題?\n\nfor i in range(len(arr)):\n if arr[i] == x: return i'}
]
)
print(response['message']['content'])
# 串流輸出
stream = ollama.chat(
model='llama3.2',
messages=[{'role': 'user', 'content': '寫一首關於程式設計的詩'}],
stream=True
)
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
使用 OpenAI SDK 呼叫 Ollama
from openai import OpenAI
# 指向 Ollama 本機端點
client = OpenAI(
base_url='http://localhost:11434/v1',
api_key='ollama' # 任意值即可
)
response = client.chat.completions.create(
model='llama3.2',
messages=[
{'role': 'user', 'content': '解釋什麼是 RAG'}
]
)
print(response.choices[0].message.content)
JavaScript/TypeScript 整合
// npm install ollama
import { Ollama } from 'ollama';
const ollama = new Ollama();
# 簡單產生
const response = await ollama.generate({
model: 'llama3.2',
prompt: '什麼是 Docker?',
});
console.log(response.response);
// Chat 格式
const chat = await ollama.chat({
model: 'llama3.2',
messages: [
{ role: 'user', content: '推薦 5 個學習 Rust 的資源' }
],
});
console.log(chat.message.content);
實戰案例:建構本機 AI 助手
案例 1:本機程式碼審查助手
建立一個專門審查程式碼的 AI 助手:
import ollama
import sys
def review_code(code: str, language: str = "Python"):
"""本機程式碼審查"""
response = ollama.chat(
model='llama3.2',
messages=[
{'role': 'system', 'content': f'''你是一個資深的 {language} 程式碼審查員。
請從以下維度審查程式碼:
1. 程式碼風格(PEP 8 / 最佳實踐)
2. 潛在 bug 和邊界情況
3. 效能問題
4. 安全漏洞
5. 改進建議
輸出格式:
- 問題等級:🔴 嚴重 / 🟡 警告 / 🟢 建議
- 問題描述
- 修復程式碼範例'''},
{'role': 'user', 'content': f'請審查以下程式碼:\n\n```{language}\n{code}\n```'}
]
)
return response['message']['content']
if __name__ == '__main__':
# 從檔案讀取程式碼
with open(sys.argv[1], 'r') as f:
code = f.read()
print(review_code(code))
使用方式:
python review.py my_script.py
案例 2:本機 RAG 知識庫
結合向量資料庫建構本機 RAG 系統:
# pip install ollama chromadb sentence-transformers
import ollama
import chromadb
from chromadb.utils import embedding_functions
# 初始化 Chroma 客戶端
chroma_client = chromadb.Client()
# 使用本機嵌入模型
embed_fn = embedding_functions.SentenceTransformerEmbeddingFunction(
model_name="all-MiniLM-L6-v2"
)
collection = chroma_client.get_or_create_collection(
name="knowledge_base",
embedding_function=embed_fn
)
# 新增文件
def add_document(text: str, metadata: dict = None):
collection.add(
documents=[text],
metadatas=[metadata or {}],
ids=[f"doc_{collection.count()}"]
)
# 查詢相關文件
def retrieve(query: str, n_results: int = 3):
results = collection.query(
query_texts=[query],
n_results=n_results
)
return results['documents'][0]
# 產生回答
def rag_answer(question: str) -> str:
# 1. 檢索相關文件
context_docs = retrieve(question)
context = "\n\n".join(context_docs)
# 2. 呼叫 Ollama 產生回答
response = ollama.chat(
model='llama3.2',
messages=[
{'role': 'system', 'content': f'基於以下上下文回答問題:\n\n{context}'},
{'role': 'user', 'content': question}
]
)
return response['message']['content']
# 使用範例
add_document("Ollama 支援 Llama、Mistral、Qwen 等開源模型")
add_document("Ollama 提供 OpenAI 相容的 REST API")
print(rag_answer("Ollama 支援哪些模型?"))
案例 3:批次文字處理
import ollama
import json
def extract_entities(text: str) -> dict:
"""從文字中提取實體"""
response = ollama.chat(
model='llama3.2',
messages=[{
'role': 'user',
'content': f'''從以下文字中提取實體,以 JSON 格式返回:
{text}
返回格式:
{{
"人物": [],
"組織": [],
"地點": [],
"時間": [],
"事件": []
}}'''
}]
)
try:
return json.loads(response['message']['content'])
except json.JSONDecodeError:
return {}
# 批次處理
texts = [
"蘋果公司 CEO 庫克於 2026 年 6 月造訪北京",
"OpenAI 在舊金山發布了 GPT-5"
]
for text in texts:
entities = extract_entities(text)
print(json.dumps(entities, ensure_ascii=False, indent=2))