Ollama 是什麼? 一個開源的本機大型語言模型執行工具,讓你在個人電腦上一鍵下載、執行和管理 Llama、Mistral、Qwen 等開源 AI 模型,無需 GPU 叢集,無需雲端 API。


目錄

  1. Ollama 是什麼?
  2. 安裝 Ollama
  3. 快速上手:執行你的第一個模型
  4. 模型管理:下載、切換、刪除
  5. Ollama API:整合到你的應用
  6. 實戰案例:建構本機 AI 助手
  7. 效能優化與 GPU 加速
  8. 常見問題 FAQ
  9. 總結

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))