適用於誰
- 搜「ollama modelfile 怎麼寫」「ollama modelfile example」「ollama modelfile num_ctx」的人;
- 想給本地模型固定一個角色或系統提示詞、調大上下文,或者把從別處下載的 GGUF 文件導入 Ollama 的人。
本文根據 Ollama 官方 Modelfile 文檔整理,資料核對於 2026-10-11。
結論先說
- Modelfile 是一份「配方」:指定用哪個基礎模型,再疊加參數、系統提示詞和示例對話,最後用
ollama create生成一個有新名字的模型。 - 只有
FROM是必須的,其餘指令按需添加,順序不限,指令名不區分大小寫。 - 不會重新下載或訓練模型。基於已有模型創建時,新模型複用原來的權重文件,只是多了一層配置。
- 想看現成的寫法,執行
ollama show --modelfile 模型名,把任意已下載模型的 Modelfile 打印出來參考。
指令一覽
| 指令 | 作用 |
|---|---|
FROM(必須) | 指定基礎模型:已有模型名、GGUF 文件路徑或 Safetensors 模型目錄 |
PARAMETER | 設定運行參數,如溫度、上下文長度 |
SYSTEM | 設定系統提示詞 |
MESSAGE | 預置幾輪對話歷史,用來示範回答方式 |
TEMPLATE | 完整的提示詞模板(一般不用自己寫) |
LICENSE | 聲明許可證 |
REQUIRES | 聲明需要的最低 Ollama 版本 |
格式很簡單,每行一條「指令 參數」,# 開頭是註釋。
步驟
例一:給模型固定一個系統提示詞
新建一個名為 Modelfile 的文本文件(沒有擴展名):
FROM gemma4
# 溫度低一些,回答更穩定
PARAMETER temperature 0.3
SYSTEM """你是一名中文技術文檔編輯。
回答一律使用簡體中文;先給結論,再分點說明;
不確定的內容直接說不確定,不要編造。"""
多行文本用三個雙引號包起來。然後創建並運行:
bash
ollama create doc-editor -f ./Modelfile
ollama run doc-editor
ollama ls 裏會多出一個 doc-editor,之後在命令行、API 和第三方客戶端裏都可以直接用這個名字。
例二:調大上下文長度
FROM gemma4
PARAMETER num_ctx 32768
bash
ollama create gemma4-32k -f ./Modelfile
這個寫法對接 OpenAI 兼容接口時特別有用:官方兼容文檔說明,OpenAI 接口沒有設定上下文長度的參數,需要用 Modelfile 把 num_ctx 固定在模型裏,再用新模型名調用。上下文越大佔用顯存越多,創建後用 ollama ps 看一眼是否還是 100% GPU。
例三:導入本地的 GGUF 文件
從 Hugging Face 等地方下載的 .gguf 文件,可以直接作為基礎模型:
FROM ./my-model.Q4_K_M.gguf
路徑可以寫絕對路徑,也可以相對於 Modelfile 所在位置。分卷的 GGUF 要保留原始的分卷文件名,用通配符匹配全部分卷:
FROM ./model-*.gguf
bash
ollama create my-model -f ./Modelfile
ollama run my-model
如果導入後回答格式混亂、停不下來,多半是缺少對話模板或停止符。到該模型的官方說明頁找到對應的模板,用 TEMPLATE 和 PARAMETER stop 補上;或者找一個 Ollama 模型庫裏同系列的模型,用 ollama show --modelfile 把它的模板抄過來。
用 MESSAGE 預置示例對話
MESSAGE 可以寫入幾輪「用戶問、助手答」的例子,引導模型照着這個風格回答,相當於把少樣本示例固定在模型裏:
FROM gemma4
SYSTEM 你只回答「是」或「否」。
MESSAGE user 多倫多在加拿大嗎?
MESSAGE assistant 是
MESSAGE user 薩克拉門托在加拿大嗎?
MESSAGE assistant 否
可用的角色有 system、user、assistant 三種。
常用參數
以下預設值來自官方 Modelfile 文檔的參數表:
| 參數 | 含義 | 預設值 |
|---|---|---|
num_ctx | 上下文窗口大小(token 數) | 2048 |
temperature | 溫度,越高越發散,越低越穩定 | 0.8 |
top_k | 取值越大回答越多樣,越小越保守 | 40 |
top_p | 與 top_k 配合,越大越多樣 | 0.9 |
repeat_penalty | 重複懲罰,越大越不容易重複 | 1.0(關閉) |
repeat_last_n | 往回看多少 token 來判斷重複 | 64 |
seed | 隨機種子,固定後同樣的輸入得到同樣的輸出 | 0 |
num_predict | 最多生成多少 token | -1(不限制) |
stop | 停止符,遇到就停止生成,可以寫多行設定多個 | — |
需要注意的是,參數表裏 num_ctx 寫的預設值是 2048,而官方「Context length」文檔又說明服務會按顯存大小自動選擇預設上下文(4k / 32k / 256k)。兩處說法並存,實際分配了多少以 ollama ps 的 CONTEXT 一列為準。
常見問題
Q:改了 Modelfile 之後怎麼生效?
重新執行一次 ollama create 同一個名字 -f Modelfile,會覆蓋原來的配置。正在運行的對話要退出重進。
Q:創建的自定義模型會佔用雙倍硬碟嗎?
基於已有模型(FROM 模型名)創建時不會,新模型引用的是同一份權重文件。從 ollama show --modelfile 的輸出裏能看到,FROM 實際指向的是模型目錄裏的一個 blob 文件。
Q:TEMPLATE 需要自己寫嗎?
基於 Ollama 模型庫裏的模型創建時不需要,會繼承原模型的模板。只有導入外部 GGUF 且模板缺失時才要處理。模板裏用到的變量有 {{ .System }}、{{ .Prompt }}、{{ .Response }}。
Q:怎麼關掉模型的思考過程?
這取決於具體模型,不是 Modelfile 的通用指令。先看該模型在 Ollama 模型庫頁面上的說明,以官方文檔為準。
Q:創建時報找不到文件?
檢查 -f 後面的路徑,以及 FROM 裏的相對路徑是不是相對於 Modelfile 所在的文件夾。Windows 上路徑裏有空格時用引號包起來。
延伸閱讀
系統提示詞寫什麼更有效,可以參考站內《系統提示詞怎麼寫》,或到提示詞庫(/prompts)挑一條合適的放進 SYSTEM。
參考資料
- Ollama 文檔:Modelfile Reference — https://docs.ollama.com/modelfile
- CLI Reference — https://docs.ollama.com/cli
- OpenAI compatibility(設定本地上下文長度)— https://docs.ollama.com/api/openai-compatibility
0 條評論
還沒有評論,來搶沙發~