Ollama:適用於個人電腦與小型服務的本機 LLM 推論

最後更新: 2026-08-20 11:11:52 +0800 +0800
tags: Ai | Llm | Ollama | Inference | Docker
原文以英文撰寫。您正在閱讀AI翻譯版本。

Ollama 將模型取得、本機推論、命令列介面、桌面應用程式與 HTTP API 整合至單一工具。若要下載開放權重模型並在開發者工作站上執行, Ollama 是最容易採用的方式之一,無須先行組裝 Python 環境、推論引擎、 Tokenizer、提示詞範本與 GPU 執行環境。

最簡單的工作階段如下:

sh
ollama pull qwen3:8b
ollama run qwen3:8b

Ollama 會選擇適當的本機執行器、儲存模型、在需要時啟動模型,並套用模型的 對話範本。因為具備上述便利性,Ollama 適合個人電腦、應用程式開發、展示, 以及小型內部服務。然而,Ollama 不會自動將筆記型電腦轉變成高吞吐量或 高可用性的正式環境推論叢集。

Ollama 可以做什麼 #

Ollama 可以:

  • 下載、列出、檢查、執行、複製及刪除模型;
  • 提供互動式文字對話與文字生成;
  • 執行受支援的視覺語言、嵌入、工具呼叫及推理模型;
  • 將受支援模型的輸出限制為結構化 JSON;
  • 匯入受支援的模型權重或 GGUF 檔案,並透過 Modelfile 自訂模型行為;
  • 透過原生 REST API 提供本機模型服務;
  • 提供與 OpenAI API 的部分相容性;
  • 在 RAM 或 VRAM 足夠的前提下,讓一或多個模型常駐記憶體並處理並行請求; 以及
  • 選擇性地使用 Ollama 託管的雲端模型,而非本機硬體。

上述項目是執行環境功能,而非每個模型都具備的能力。純文字模型不會因為請求 採用視覺端點格式就能理解圖片;未針對工具使用進行訓練的模型,也可能產生品質 不佳的工具呼叫。以模型建置應用程式前,請先在 Ollama 模型庫中確認模型卡、授權條款、 上下文限制與標籤。

本機伺服器一般會監聽 http://127.0.0.1:11434。CLI、桌面應用程式、 API 用戶端、編輯器擴充功能,以及第三方對話介面,都是該服務的用戶端:

CDWAOLeeppIsbpeklntUiAoIcIpatcailpoipnentOllamaserverModelrunnerCPU,GPU,orboth

Ollama 不是什麼 #

Ollama 不是:

  • LLM,也不會自行提供模型權重;
  • 模型訓練或完整微調框架;
  • 模型準確、安全、無偏見,或取得特定用途授權的保證;
  • 檢索增強生成系統、向量資料庫、代理程式框架或工具沙箱;
  • 所有 OpenAI API 端點與選項的完整實作;
  • 本機 API 的驗證、授權、配額或計費閘道;
  • 具備自動容錯移轉功能的多節點排程器;也不是
  • 容量規劃、監控、備份與受控升級的替代方案。

Ollama 可以是 RAG 或代理程式應用程式內的一個元件,但應用程式仍須負責文件 擷取、檢索、對話狀態、工具執行、存取控制與錯誤處理。工具呼叫尤其重要: 模型只會提出呼叫,而受信任的應用程式程式碼必須驗證並執行該呼叫。

在本機執行模型也不代表所有操作都離線進行。提取模型需要網路連線,而雲端模型 或網頁搜尋功能會將請求傳送至遠端服務。若作業必須限於本機,請設定 OLLAMA_NO_CLOUD=1,或在 ~/.ollama/server.json 中設定 disable_ollama_cloud。

Ollama 與 vLLM 的比較 #

vLLM 同樣是推論引擎與伺服器,但最佳化重點不同。 PagedAttention、持續批次處理、前綴快取、平行處理與分散式服務等功能, 著重於有效率地提供多人共用服務。Ollama 則著重於縮短從未安裝執行環境, 到在單一機器上執行模型的流程。

考量OllamavLLM
主要用途本機與單一主機推論高吞吐量共用推論
初始設定規模小;應用程式、CLI 或單一容器需要更多基礎架構與加速器知識
個人 macOS 用途對 Apple Silicon 提供一級原生支援並非一般部署目標
Linux GPU 伺服器支援,包括容器主要部署環境
對一般使用者友善的模型管理內建提取、列出、執行與刪除工作流程一般由部署工具管理
量化本機模型核心工作流程支援的格式取決於模型與平台
請求排程佇列與可依模型設定的平行處理為吞吐量設計的持續批次處理
多 GPU 用途可將模型分散到單一主機的多張 GPU完整的張量、管線、資料與專家平行處理
多節點服務並非叢集協調器分散式執行與橫向擴充整合
API原生 API 與部分 OpenAI 相容性OpenAI 相容 API 與其他服務協定
維運日誌與基本執行環境檢查面向正式環境的指標與服務控制
使用者介面原生應用程式;第三方 Web UI主要是伺服器與 Python 程式庫

兩者並非單純的「開發環境與正式環境」之分。若 Ollama 服務在一台機器上處理 範圍明確的內部工作負載,且周邊系統提供驗證、TLS、監控與復原能力,便可適用 於正式環境。同理,vLLM 也能在單一開發伺服器上執行。工作負載才是決定因素:

  • 若用途是個人助理、私有實驗、本機應用程式開發、可離線工作流程、課堂教學, 或少量共用的單一主機服務,請選擇 Ollama。
  • 若並行使用者數、每個加速器的每秒 Token 數、可預測的佇列行為、 Prometheus 指標、分散式 GPU 或 Kubernetes 擴充值得承擔額外維運複雜度, 請選擇 vLLM。
  • 若預定服務介於兩者之間,請對兩者進行效能評測。測量第一個 Token 的產生 時間、每秒輸出 Token 數、尾端延遲、記憶體用量,以及預期並行量與 上下文長度下的行為。

Ollama 的優勢在於維運阻力低,且廣泛支援工作站;缺點則是捨棄專用叢集服務 引擎所具備的許多控制與最佳化。vLLM 的優勢是加速器使用率與服務規模; 缺點包括設定門檻較高、對硬體較敏感,且缺少消費級桌面體驗。

部署 #

選擇部署方式 #

最精簡且可靠的準則如下:

OOSBMnnmuueeasllytpLlieis-rnshnsuiaooxnrdngeewldooeinr-GnkhPfasoUetsrMatseatencisrcoevenrivcfielceeetNNDBvaaoeLttcnLiikcMvveheermoiarOOzrllekalldnaavommOLtaalLhlMeoarrmfaipDrrowsocitdktuehcrtpiroontescetrevdinggatseywsatyem

Ollama 的成功之處,在於讓本機推論成為一般操作:安裝一個應用程式、提取一個 模型,然後從對話視窗、終端機、編輯器或程式使用相同執行環境。簡單性是其主要 特色,但仍須明確區分責任邊界。Ollama 負責執行模型;可靠的產品仍須提供模型 周邊的安全性、狀態、評估、可觀測性與維運控制。

使用 Docker 安裝於 Linux 主機 #

Docker 是 Linux 推論主機上的合理部署方式,因為容器可存取 Linux GPU 裝置介面。請先在主機上安裝可正常運作的 GPU 驅動程式。若使用 NVIDIA GPU, 另請安裝並設定 NVIDIA Container Toolkit:

sh
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

使用持久化模型磁碟區啟動 Ollama。將發布的連接埠繫結至 Loopback,可避免 意外公開未經驗證的 API:

sh
docker run --detach \
  --name ollama \
  --restart unless-stopped \
  --gpus all \
  --publish 127.0.0.1:11434:11434 \
  --volume ollama:/root/.ollama \
  ollama/ollama

提取模型並確認推論正常運作:

sh
docker exec ollama ollama pull qwen3:8b
docker exec -it ollama ollama run qwen3:8b
curl http://127.0.0.1:11434/api/version
docker exec ollama ollama ps

ollama ps 會回報已載入的模型是在 CPU、GPU,還是分散於兩者上執行。 即使系統具有 GPU,也不能直接假設模型正在使用 GPU。

若僅使用 CPU 進行推論,請省略 --gpus all。此模式適用於小型模型、 功能測試,以及沒有受支援加速器的機器:

sh
docker run --detach \
  --name ollama \
  --restart unless-stopped \
  --publish 127.0.0.1:11434:11434 \
  --volume ollama:/root/.ollama \
  ollama/ollama

若使用受支援的 AMD GPU,請採用 ROCm 映像檔並傳入 GPU 裝置:

sh
docker run --detach \
  --name ollama \
  --restart unless-stopped \
  --device /dev/kfd \
  --device /dev/dri \
  --publish 127.0.0.1:11434:11434 \
  --volume ollama:/root/.ollama \
  ollama/ollama:rocm

選擇主機前,請查閱 Ollama 最新的 Docker 與 GPU 相容性頁面。GPU 系列、驅動程式、 容器執行環境與映像檔必須彼此相容。若要進行受控部署,請固定經過測試的 Ollama 發行版本標籤或映像檔 Digest,而不要隨 latest 隱含升級。

若其他機器必須存取服務,不要只將發布位址改成 0.0.0.0 並開放防火牆。 請將 Ollama 置於具備驗證功能的反向 Proxy 或 API Gateway 後方,由後者提供 TLS、請求大小限制、逾時、速率限制與稽核日誌。

在 macOS 上進行原生安裝 #

Mac 應採用原生安裝:

  1. 從官方 macOS 安裝頁面下載 ollama.dmg。
  2. 將 Ollama 拖曳至 Applications 並啟動。
  3. 出現提示時,允許應用程式將 ollama CLI 連結放置於 /usr/local/bin。
  4. 提取並執行模型:
sh
ollama pull qwen3:8b
ollama run qwen3:8b

目前版本需要 macOS Sonoma 14 或更新版本。Apple M 系列系統可透過原生 執行環境同時使用 CPU 與 GPU;Intel Mac 則使用 CPU 推論。模型與設定儲存 於 ~/.ollama,而模型可能占用數十至數百 GB。

背景伺服器一般由桌面應用程式管理。若偏好以前景服務執行,可在終端機中使用 ollama serve 明確啟動伺服器。

為何 macOS 不應搭配 Docker #

Docker Desktop for macOS 上的 Linux 容器不會直接在 macOS 核心上執行, 而是在 Linux 虛擬機器內執行:

LinuxOVmlMalcamOmaSanaaLgniedndutxbhyecoDAnoptcpaklieenreGrDPeUsktop

Apple 的 Metal GPU 介面可供原生 macOS 應用程式使用,但 Docker Desktop 不會將該 GPU 傳遞至 Ollama 容器,也不會將其模擬成受支援的 Linux 加速器。 因此,Ollama 無法在 macOS 的 Docker Desktop 中使用 GPU 加速。

容器在技術上可僅使用 CPU 執行,因此「Ollama 無法在 Mac 的 Docker 中執行」 一說並不精確。實務上的問題是 Linux 虛擬機器會增加額外負擔,卻捨棄 Mac 主要的推論優勢:GPU 與統一記憶體。原生 Ollama 可使用 Metal,檔案系統與 網路路徑較簡單,並提供桌面應用程式。請在 macOS 上使用原生 Ollama 進行 推論,並將 Linux 容器保留給 Linux 主機。個別 Web UI 仍可在容器中執行, 並呼叫原生 Ollama 伺服器。

Ollama 管理 CLI #

管理 CLI 負責管理 Ollama 伺服器、模型與帳號工作階段。伺服器一般由桌面 應用程式或系統服務啟動;只有在手動執行時才使用 ollama serve。

sh
# Show available commands and global options.
ollama --help

# Show the installed Ollama version.
ollama --version

# Show options for a particular command.
ollama run --help

# Start the Ollama server in the foreground.
ollama serve

# Download a model, or update the local copy of an existing tag.
ollama pull qwen3:8b

# List models stored on this machine.
ollama list

# Use the shorter alias for `ollama list`.
ollama ls

# Show a model's metadata, parameters, template, and capabilities.
ollama show qwen3:8b

# List models currently loaded into memory and their CPU/GPU placement.
ollama ps

# Unload a model and release its memory.
ollama stop qwen3:8b

# Create a custom model from a Modelfile.
ollama create my-model --file ./Modelfile

# Copy a model to another local name or tag.
ollama cp qwen3:8b qwen3:project

# Delete a local model.
ollama rm qwen3:project

# Publish a namespaced model after authenticating with ollama.com.
ollama push account/my-model

# Sign in to ollama.com for cloud models and model publishing.
ollama signin

# End the ollama.com session.
ollama signout

使用者介面 #

基礎 CLI 對話 #

sh
# Start an interactive chat session.
ollama run qwen3:8b

# Run a single prompt without entering an interactive session.
ollama run qwen3:8b "Explain copy-on-write in one paragraph."

# Send the contents of a text file through standard input.
cat notes.txt | ollama run qwen3:8b

# Send multiline text through standard input.
cat <<'EOF' | ollama run qwen3:8b
Compare optimistic and pessimistic locking.
Include one practical example of each.
EOF

# Ask a vision-capable model about an image.
ollama run gemma4 ./diagram.png "Explain this diagram."

# Send WAV audio to an audio-capable model.
ollama run AUDIO_MODEL ./recording.wav "Transcribe this recording."

# Generate an embedding vector from an argument.
ollama run embeddinggemma "Hello world"

# Generate an embedding vector from standard input.
echo "Hello world" | ollama run nomic-embed-text

# Interactively select and configure a supported external integration.
ollama launch

# Launch a specific integration.
ollama launch claude

# Launch an integration with a particular Ollama model.
ollama launch claude --model qwen3.5

# Configure a supported integration without launching it.
ollama launch droid --config

# Start an interactive chat through a Dockerized Ollama server.
docker exec -it ollama ollama run qwen3:8b

# At the `>>>` prompt, triple quotes delimit multiline interactive input:
# """Explain this program:
# int main(void) { return 0; }
# """

執行 ollama <command> --help 可查看命令專屬選項。模型名稱包含標籤: qwen3:8b 與 qwen3:14b 是不同成品;省略標籤時一般會解析為 latest。 圖片與 WAV 輸入需要具備相應多模態能力的模型。CLI 不會直接擷取影片、PDF 或辦公文件;請先轉錄、擷取或轉換內容,再傳送給相容模型。

Web/GUI 前端 #

多種獨立前端都可連線至已執行的 Ollama 服務。前端不會取代 Ollama 的模型 執行環境,而是增加對話儲存、文件工作流程、使用者帳號或桌面介面。

前端形式適用用途Ollama 連線方式
Open WebUI自行託管的 Web 應用程式一般對話、多使用者、模型管理與知識庫設定 Ollama 基底 URL;例如 UI 容器存取主機上的 Ollama 時,使用 http://host.docker.internal:11434
LibreChat自行託管的 Web 應用程式多供應商對話、使用者帳號、代理程式與共用部署在 librechat.yaml 中定義 Ollama 端點;其 OpenAI 相容基底 URL 以 /v1/ 結尾
AnythingLLM桌面或自行託管的 Web 應用程式文件工作區與以 RAG 為主的對話選擇 Ollama 作為 LLM 供應商並設定其基底 URL;在容器外一般為 http://127.0.0.1:11434
LobeChat桌面或自行託管的 Web 應用程式多供應商對話、助理與外掛程式啟用 Ollama 供應商並設定其服務或 Proxy URL
Chatbox跨平台桌面應用程式無須維運另一項 Web 服務的單一使用者對話選擇 Ollama 作為供應商,並設定 API 主機;一般為 http://localhost:11434

請根據應用程式邊界選擇:

  • 單一使用者採用 Chatbox 所需的額外基礎架構最少。
  • Open WebUI 提供以本機模型為核心的直接共用瀏覽器介面。
  • 必須整合 Ollama 與多個模型供應商的部署適合採用 LibreChat 或 LobeChat。
  • AnythingLLM 的介面以文件集合與檢索為核心。

容器網路會改變 localhost 的意義:在前端容器內,它指向該容器,而非 Ollama 主機。請視情況使用 Docker 主機別名、Compose 服務名稱或私有伺服器 位址。若瀏覽器直接連線至 Ollama,請透過 OLLAMA_ORIGINS 只設定必要的 Origin;避免使用 *,因為該值會允許所有 Web Origin。

每個前端都會獨立於 Ollama 儲存額外狀態。請備份其對話資料庫與上傳的文件、 設定驗證,並確認選用的雲端功能是否會將提示詞或檔案傳送至遠端服務。不要為了 讓前端可供存取而公開 Ollama 未經驗證的連接埠;請公開具備驗證功能的前端, 並讓 Ollama 留在內部網路。

使用原生 API #

原生 API 位於 http://localhost:11434/api。非串流對話請求如下:

sh
curl http://localhost:11434/api/chat \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "qwen3:8b",
    "messages": [
      {"role": "user", "content": "Explain copy-on-write in two paragraphs."}
    ],
    "stream": false
  }'

生成與對話預設會啟用串流,並在產生 Token 時傳回一連串以換行符號分隔的 JSON 物件。應用程式應以增量方式解析串流、處理連線中斷與非 2xx 回應, 並自行設定期限。

重要的端點群組包括:

操作端點
從提示詞生成內容POST /api/generate
使用訊息進行對話POST /api/chat
建立嵌入POST /api/embed
列出本機模型GET /api/tags
檢查模型POST /api/show
提取模型POST /api/pull
刪除模型DELETE /api/delete
檢查已載入的模型GET /api/ps
檢查伺服器版本GET /api/version

Ollama 維護官方 Python 與 JavaScript 程式庫。Python 用戶端 採用相同的基本資料模型:

python
from ollama import chat

response = chat(
    model="qwen3:8b",
    messages=[
        {"role": "user", "content": "Why does context length use memory?"}
    ],
)
print(response.message.content)

使用 OpenAI 相容 API #

已採用 OpenAI 用戶端編寫的應用程式,可將受支援的操作指向 http://localhost:11434/v1/:

python
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1/",
    api_key="ollama",
)

response = client.chat.completions.create(
    model="qwen3:8b",
    messages=[
        {"role": "user", "content": "Give me three names for a backup tool."}
    ],
)
print(response.choices[0].message.content)

本機伺服器會忽略 API 金鑰,但 OpenAI SDK 要求提供非空值。受支援的相容端點 包括 Chat Completions 與 Responses,但此相容性刻意不涵蓋全部功能。請求 格式獲得接受,不代表每個參數、事件、用量欄位、模型行為或未來 OpenAI 功能 都受支援。請測試應用程式實際使用的操作;需要 Ollama 專屬控制時,優先使用 Ollama 原生 API。

上下文管理 #

上下文管理橫跨用戶端與伺服器,因為 Ollama 不負責持久化對話資料庫。CLI、 GUI 或應用程式會組合各項請求;Ollama 則轉譯請求,並強制執行模型的上下文 限制。

層級上下文責任
用戶端或前端保存對話、選取訊息、摘要歷程、檢索文件,以及建構每項請求
Ollama 伺服器套用模型的對話範本、將請求 Tokenize、強制執行 num_ctx,以及執行推論
模型關注 Ollama 提供的最終 Token 序列

因此,即使使用相同模型與 Ollama 伺服器,不同前端仍可能產生不同結果,因為 各自的請求可能包含不同的系統提示詞、歷程選擇、摘要、檢索文件與生成參數。

互動式 ollama run #

ollama run MODEL 會維護兩種不同的歷程:

  1. 提示詞輸入歷程讓使用者透過方向鍵取回先前輸入。/set history 與 /set nohistory 控制此 Readline 功能。提示詞輸入歷程並非提供給模型的 對話,因為它只包含使用者輸入,而非完整的使用者與助理對話回合。
  2. 對話歷程是由執行中的 CLI 程序所保存,依序包含 system、user 與 assistant 訊息的陣列。每次回應後,CLI 會附加助理訊息;下一回合則 將累積的訊息陣列傳送至 Chat API。

因此,對話歷程會在同一個 ollama run 程序的多次提示詞之間保留,但程序 結束後不會自動還原。/clear 會移除目前的對話上下文,但保留作用中的系統 訊息。

/save <model-name> 會建立新的 Ollama 模型以明確持久化狀態;該模型定義 包含目前的訊息、參數與系統訊息。之後使用 /load <model-name> 可載入該 已儲存模型及其初始訊息歷程。儲存的成品是衍生模型定義,而非可搜尋的對話 逐字稿資料庫。請勿儲存機密,因為嵌入的訊息會成為模型成品的一部分,且可供 檢查或複製。

每個回合都會傳送至模型嗎? #

CLI 會在每次出現新提示詞時,傳送完整的累積訊息陣列。接著,推論伺服器會 轉譯對話範本,並讓結果符合設定的上下文視窗。轉譯後的歷程超出 num_ctx 時,伺服器會從前端移除較舊的訊息,同時保留系統訊息與最新的使用者訊息。 因此:

  • API 請求可包含 CLI 保留的每個回合;
  • 模型只會看見可容納的系統訊息與最新後綴;
  • 舊有事實可能從有效上下文消失,卻仍留在 CLI 的記憶體內陣列中;以及
  • 增加 num_ctx 可保留更多歷程,但會增加 KV Cache 的記憶體用量,且可能 降低並行處理能力。

請使用下列命令設定及檢查工作階段上下文:

sh
# Change the context window for the current interactive session.
/set parameter num_ctx 16384

# Clear accumulated conversation messages.
/clear

# Persist the conversation as a derived model.
/save project-session

# Load a saved session or another model.
/load project-session

上述行為屬於截斷,而非持久化記憶或語意回想。CLI 不會在丟棄回合前摘要舊有 對話。需要持久化對話狀態的應用程式應自行儲存訊息、套用明確的摘要原則, 並透過 Chat API 傳送選取的歷程。

前端與 API 用戶端策略 #

Ollama 的 Chat API 會處理目前請求中的 messages 陣列,而不會依據對話 ID 擷取先前對話。API 用戶端必須儲存完成的回合,並重新傳送維持連續性所需的 歷程。

前端可實作比 ollama run 更進階的原則:

  • 在自己的資料庫中保留完整逐字稿;
  • 在請求接近上下文限制前傳送每則訊息;
  • 保留第一則系統訊息與最近的回合;
  • 以生成的摘要取代較舊回合;
  • 分別維護使用者偏好、決策或工具狀態的摘要;
  • 依嵌入相似度檢索相關的先前訊息;或
  • 插入由 RAG 管線選取的文件區塊。

前端設定也可透過傳送 num_ctx,變更 Ollama 的有效上下文長度。較大的值 不會強制前端傳送更多歷程,只會讓組合後的請求有更多空間。反之,前端可能在 Ollama 達到該限制前,就先行丟棄或摘要歷程。

若精確行為會影響結果,請檢查前端文件或傳出請求。GUI 中顯示對話歷程, 不代表每則可見訊息都已傳送至模型。Open WebUI、LibreChat、AnythingLLM、 LobeChat 與 Chatbox 的對話及檢索原則各自獨立於 Ollama,且這些原則可能在 不同版本間變更。

背景文件與 RAG #

Ollama 伺服器不包含文件集合、分塊器、向量索引或檢索原則,因此不提供完整的 RAG 系統。可採用下列幾種整合層級:

  1. **直接上下文:**將文件文字貼入提示詞,或將擷取出的文字透過管線傳送至 ollama run。模型只能在文字留於上下文視窗期間使用該內容。圖片與音訊 路徑需要具備相應多模態能力的模型;PDF 與辦公文件必須先轉換為文字或 圖片。
  2. **靜態模型上下文:**將簡短、穩定的指示或事實放入 Modelfile 的 SYSTEM 或 MESSAGE 項目。這些項目會包含於提示詞中,而非建立索引; 因此會占用上下文,且無法擴充至文件語料庫。
  3. **由應用程式管理的 RAG:**使用 Ollama 的嵌入 API 將文件區塊轉換成 Embedding、將向量與來源中繼資料儲存於向量資料庫、針對每個問題檢索相關 區塊,並將這些區塊加入對話請求。Ollama 提供嵌入與生成模型;應用程式 程式碼則負責擷取、檢索、引用、存取控制與對話持久化。
  4. **第三方介面:**使用 Open WebUI 等實作知識庫或 RAG 工作流程的用戶端, 並連線至 Ollama 作為模型執行環境。介面的檢索行為、儲存空間、權限與 備份均獨立於 Ollama。

最精簡的 RAG 請求路徑如下:

QAunesswteironEOmlbleadmaqucehsattioAnPIVPrcerehcotutmrnopikrtesvsweeidatrhch

直接貼上完整語料庫屬於提示詞填塞,而非 RAG,因為沒有檢索步驟負責選取相關 證據。正確的 RAG 還會在區塊旁保留來源識別碼,讓應用程式可顯示引用,並在 內容送達模型前強制執行文件層級授權。

選擇模型與估算機器規格 #

模型選擇對使用體驗的影響大於 Ollama 安裝方式。請考量:

  • **任務:**一般對話、程式碼、嵌入、視覺、工具或領域專屬工作;
  • **授權:**商業使用、再散布與生成輸出的許可;
  • **參數數量與量化:**較小或量化程度較高的模型使用較少記憶體,但品質可能 降低;
  • **上下文長度:**較長的提示詞與 KV Cache 會使用更多記憶體;
  • **語言涵蓋範圍:**針對使用者所需的語言與術語進行效能評測;以及
  • **提示詞範本與能力:**使用正確的 Ollama 模型標籤,不要假設兩個變體可 互換。

模型的磁碟大小不足以作為記憶體需求估算。推論還需要執行環境緩衝區,以及會 隨上下文長度、並行量、模型架構與精確度成長的 KV Cache。在 Apple Silicon 上,CPU 與 GPU 共用統一記憶體,但 macOS 與其他應用程式仍需要使用部分 記憶體。在獨立 GPU 主機上,溢出到系統 RAM 的權重一般會讓執行速度大幅降低。

Ollama 的預設上下文原則曾在不同版本之間變更,且可能取決於可用 VRAM。請 明確設定所需上下文,再使用 ollama ps 確認配置的上下文與 CPU/GPU 執行位置:

sh
OLLAMA_CONTEXT_LENGTH=16384 ollama serve
ollama ps

較大的值不一定較好。它會增加記憶體壓力,並可能降低並行處理能力或導致 CPU 卸載。也請測試品質:模型公布的最大上下文,不保證整個視窗範圍內都能維持同等 良好的注意力。

正式環境與安全性檢查清單 #

將 Ollama 作為共用服務前:

  1. **保護 API。**本機 API 不具備驗證機制。請限制於 Loopback 或私有網路, 或在前方設定具備驗證功能的 TLS Proxy。切勿依賴虛設的 OpenAI API 金鑰 提供安全性。
  2. **固定執行環境與模型。**記錄 Ollama 版本、確切的模型標籤或 Digest、 Modelfile、提示詞範本、上下文與生成參數。可變標籤或執行環境升級可能 改變輸出。
  3. **規劃儲存空間。**容器替換時保留模型磁碟區。模型資料應位於其他磁碟時, 請使用 OLLAMA_MODELS。備份自訂 Modelfile 與設定;大型 Registry 模型一般可重新提取。
  4. 設定容量限制。OLLAMA_NUM_PARALLEL、OLLAMA_MAX_LOADED_MODELS、 OLLAMA_MAX_QUEUE、上下文長度與 keep_alive 都會影響記憶體與延遲。 過載的伺服器可能以 HTTP 503 拒絕請求。
  5. **預熱重要模型。**第一項請求可能包含模型載入延遲。空白的生成或對話請求 可預先載入模型,而 keep_alive 控制其常駐時間。
  6. **觀測服務。**收集容器或服務日誌、請求延遲、佇列失敗、磁碟用量、 記憶體、加速器使用率與應用程式錯誤率。Ollama 的基本檢查命令並非完整的 監控系統。
  7. **限制請求與輸出。**套用主體大小限制、期限、輸出限制、並行限制與取消 機制。將生成文字與模型提出的工具引數視為不受信任的輸入。
  8. **測試失敗與復原。**確認記憶體不足錯誤、磁碟損毀或已滿、模型提取中斷、 程序重新啟動與用戶端中斷連線後的行為。若無法接受停機,便需要第二台主機 或備援服務。
  9. **控制傳出流量。**決定是否允許模型提取、雲端模型、網頁搜尋、Proxy 與第三方 UI。只有整條請求路徑都保留在本機時,本機推論才能保護提示詞。
  10. **檢查兩份授權條款。**Ollama 授權與模型授權彼此獨立。部署執行環境 不會授予模型庫中每個模型的使用權。

參考資料 #

評論

在 GitHub 上閱讀或評論(發表評論需要登入)