本地部署 LLM:Ollama + Open WebUI 實戰
在自己的電腦運行 Llama、Mistral 等開源模型,兼顧隱私與成本,附效能優化技巧。
AI Academy 編輯部2025年11月19日
本地部署 LLM:Ollama + Open WebUI 實戰
為什麼要本地部署?
| 考量 | 雲端 API | 本地部署 |
|---|---|---|
| 隱私 | 資料上傳到第三方 | 資料不離開電腦 |
| 成本 | 按 Token 計費 | 一次性硬體成本 |
| 延遲 | 網路延遲 | 極低延遲 |
| 離線 | 需要網路 | 可離線使用 |
| 客製 | 有限 | 可微調模型 |
Ollama 簡介
Ollama 是一個讓你輕鬆在本地運行 LLM 的工具,支援 macOS、Linux、Windows。
特點
- 一行指令安裝模型
- 自動管理模型檔案
- 相容 OpenAI API 格式
- 支援 GPU 加速
快速開始
1. 安裝 Ollama
macOS / Linux:
curl -fsSL https://ollama.com/install.sh | sh
macOS(Homebrew):
brew install ollama
Windows: 從 ollama.com 下載安裝檔。
2. 下載並運行模型
# 下載並運行 Llama 3.2(3B 參數)
ollama run llama3.2
# 下載並運行 Mistral(7B 參數)
ollama run mistral
# 下載並運行程式碼專用模型
ollama run codellama
第一次運行會自動下載模型,之後直接啟動。
3. 開始對話
>>> 你好,請用繁體中文回答
你好!我是一個 AI 助手,很高興為你服務。有什麼我可以幫助你的嗎?
>>> 解釋什麼是機器學習
機器學習是人工智慧的一個分支,它讓電腦能夠從數據中學習...
輸入 /bye 離開對話。
常用指令
# 列出已安裝的模型
ollama list
# 下載模型(不啟動)
ollama pull llama3.2
# 刪除模型
ollama rm llama3.2
# 查看模型資訊
ollama show llama3.2
# 啟動 API 服務
ollama serve
推薦模型
依用途選擇
| 用途 | 推薦模型 | 大小 | 最低記憶體 |
|---|---|---|---|
| 一般對話 | llama3.2 | 2GB | 8GB RAM |
| 程式開發 | codellama | 4GB | 8GB RAM |
| 中文優化 | qwen2.5 | 4.4GB | 8GB RAM |
| 高品質 | llama3.1:8b | 4.7GB | 16GB RAM |
| 極速回應 | phi3:mini | 2.2GB | 4GB RAM |
依硬體選擇
4GB RAM → phi3:mini, tinyllama
8GB RAM → llama3.2, mistral, codellama:7b
16GB RAM → llama3.1:8b, mixtral
32GB+ RAM → llama3.1:70b(需要強力 GPU)
透過 API 使用
Ollama 提供與 OpenAI 相容的 API。
啟動服務
# Ollama 安裝後會自動在背景運行
# 預設在 http://localhost:11434
Python 呼叫
import requests
def chat(message):
response = requests.post(
"http://localhost:11434/api/chat",
json={
"model": "llama3.2",
"messages": [{"role": "user", "content": message}],
"stream": False
}
)
return response.json()["message"]["content"]
print(chat("解釋 Python 的 list comprehension"))
使用 OpenAI SDK
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": "Hello!"}]
)
print(response.choices[0].message.content)
使用 LangChain
from langchain_community.llms import Ollama
from langchain_core.prompts import ChatPromptTemplate
# 建立 LLM
llm = Ollama(model="llama3.2")
# 建立 Chain
prompt = ChatPromptTemplate.from_template("用一句話解釋:{topic}")
chain = prompt | llm
# 執行
result = chain.invoke({"topic": "量子計算"})
print(result)
安裝 Open WebUI
Open WebUI 提供類似 ChatGPT 的網頁介面。
Docker 安裝(推薦)
docker run -d -p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
--name open-webui \
ghcr.io/open-webui/open-webui:main
存取介面
打開瀏覽器訪問 http://localhost:3000,建立帳號後即可使用。
功能亮點
- 多模型切換
- 對話歷史記錄
- Markdown 渲染
- 程式碼高亮
- 多人協作
效能優化
1. 使用 GPU 加速
確認 GPU 支援:
# macOS(M1/M2/M3 自動支援 Metal)
# 無需額外設定
# Linux(NVIDIA GPU)
nvidia-smi # 確認驅動安裝
# 查看 Ollama GPU 狀態
ollama ps
2. 調整上下文長度
# 預設 2048,可增加到 4096 或更高
ollama run llama3.2 --num-ctx 4096
3. 選擇量化版本
# Q4 量化(較小,較快)
ollama run llama3.2:q4_0
# Q8 量化(較大,品質較好)
ollama run llama3.2:q8_0
4. 系統資源分配
# 設定最大記憶體使用
export OLLAMA_MAX_LOADED_MODELS=1 # 同時載入的模型數
export OLLAMA_NUM_PARALLEL=2 # 平行請求數
建立自訂模型
Modelfile 範例
# Modelfile
FROM llama3.2
# 設定系統提示
SYSTEM """
你是 AI Academy 的助教,專門協助學員學習 AI 和程式開發。
請使用繁體中文回答,保持友善專業的態度。
"""
# 調整參數
PARAMETER temperature 0.7
PARAMETER num_ctx 4096
建立並使用
# 建立自訂模型
ollama create my-assistant -f Modelfile
# 使用自訂模型
ollama run my-assistant
常見問題
Q: 模型下載很慢?
使用鏡像或設定代理:
export OLLAMA_HOST=0.0.0.0
export https_proxy=http://your-proxy:port
Q: 記憶體不足?
- 選擇更小的模型(如 phi3:mini)
- 使用更高量化的版本(Q4)
- 減少上下文長度
Q: 中文回答品質不好?
嘗試專門優化中文的模型:
ollama run qwen2.5
# 或
ollama run yi
Q: 如何讓區網其他電腦存取?
# 設定監聽所有介面
export OLLAMA_HOST=0.0.0.0
ollama serve
其他電腦使用 http://your-ip:11434 連接。
與雲端服務比較
使用場景建議
| 場景 | 建議 |
|---|---|
| 開發測試 | 本地 Ollama |
| 隱私敏感資料 | 本地 Ollama |
| 生產環境 | 雲端 API |
| 高品質需求 | 雲端 GPT-4 / Claude |
| 控制成本 | 本地 Ollama |
效能對比(參考)
| 指標 | 本地 Llama 3.2 | GPT-4o-mini |
|---|---|---|
| 延遲 | ~50ms | ~500ms |
| 品質 | 良好 | 優秀 |
| 成本 | 免費 | $0.15/1M tokens |
| 中文 | 普通 | 優秀 |
總結
本地部署 LLM 的優勢:
- 隱私保護:資料不離開電腦
- 零 API 成本:無使用量限制
- 低延遲:即時回應
- 離線可用:不需網路
下一步行動:
- 安裝 Ollama 並試用 llama3.2
- 安裝 Open WebUI 獲得更好體驗
- 嘗試不同模型找到適合的
- 建立自訂 Modelfile
相關文章:
參考資源: