Ollama 快速入门:模型文件(Modelfile)
在使用 Ollama 进行本地部署和运行大型语言模型时,Modelfile 扮演着至关重要的角色。它是一个文本文件,用于定义和配置模型的行为和特性。
什么是 Modelfile?
Modelfile 是使用 Ollama 创建和共享模型的方案。它包含了构建模型所需的所有指令和参数,使得模型的创建和部署变得简单而直接。
格式
Modelfile 的格式:
# comment
INSTRUCTION arguments| 操作说明 | 描述 |
|---|---|
FROM (必须) |
定义要使用的基础模型 |
PARAMETER |
设置 Ollama 如何运行模型的参数 |
TEMPLATE |
要发送给模型的完整提示模板. |
SYSTEM |
指定将在模板中设置的系统消息. |
ADAPTER |
定义适用于模型的 (Q)LoRA 适配器. |
LICENSE |
指定合法的许可证。 |
MESSAGE |
指定消息历史记录。 |
示例
基础 Modelfile
创建 mario 的 Modelfile 示例:
FROM llama3
# sets the temperature to 1 [higher is more creative, lower is more coherent]
# 将温度设置为 1 [越高越有创意,越低越连贯]
PARAMETER temperature 1
# sets the context window size to 4096, this controls how many tokens the LLM can use as context to generate the next token
# 将上下文窗口大小设置为 4096,这控制了 LLM 可以使用多少个 token 作为上下文来生成下一个 token
PARAMETER num_ctx 4096
# sets a custom system message to specify the behavior of the chat assistant
# 设置自定义系统消息来指定聊天助手的SYSTEM行为
SYSTEM You are Mario from super mario bros, acting as an assistant.按下面操作:
- 将其保存为文件 (e.g.
Modelfile) ollama create choose-a-model-name -f <location of the file e.g. ./Modelfile>'ollama run choose-a-model-name- 开始使用该模型!
要查看给定模型的模型文件,请使用 ollama show --modelfile 命令。
> ollama show --modelfile llama3
# Modelfile generated by "ollama show"
# To build a new Modelfile based on this, replace FROM with:
# FROM llama3:latest
FROM E:\Ollama\models\blobs\sha256-6a0746a1ec1aef3e7ec53868f220ff6e389f6f8ef87a01d77c96807de94ca2aa
TEMPLATE "{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>"
PARAMETER stop <|start_header_id|>
PARAMETER stop <|end_header_id|>
PARAMETER stop <|eot_id|>
PARAMETER num_keep 24指令
FROM (必须)
FROM 指令定义了创建模型时要使用的基础模型。
FROM <model name>:<tag>从 llama3 构建
FROM llama3可用基础模型列表: https://github.com/ollama/ollama#model-library
从 bin 文件构建
FROM ./ollama-model.bin该 bin 文件位置应指定为绝对路径或相对于该Modelfile位置的路径。
PARAMETER
PARAMETER 指令定义了模型运行时可以设置的参数。
PARAMETER <parameter> <parametervalue>有效参数和值
| 参数 | 描述 | 值类型 | 示例用法 |
|---|---|---|---|
| mirostat | 启用 Mirostat 采样来控制困惑度。(默认值:0,0 = 禁用,1 = Mirostat,2 = Mirostat 2.0) | int | mirostat 0 |
| mirostat_eta | 影响算法对生成文本反馈的响应速度。较低的学习率会导致调整速度较慢,而较高的学习率会使算法响应更快。(默认值:0.1) | float | mirostat_eta 0.1 |
| mirostat_tau | 控制输出的连贯性和多样性之间的平衡。值越低,文本越集中、越连贯。(默认值:5.0) | float | mirostat_tau 5.0 |
| num_ctx | 设置用于生成下一个标记的上下文窗口的大小。(默认值:2048) | int | num_ctx 4096 |
| repeat_last_n | 设置模型回溯多远以防止重复。(默认值:64,0 = 禁用,-1 = num_ctx) | int | repeat_last_n 64 |
| repeat_penalty | 设置对重复的惩罚力度。较高的值(例如 1.5)将对重复的惩罚力度更大,而较低的值(例如 0.9)将更宽松。(默认值:1.1) | float | repeat_penalty 1.1 |
| temperature | 模型的温度。增加温度将使模型的回答更具创意。(默认值:0.8) | float | temperature 0.7 |
| seed | 设置用于生成的随机数种子。将其设置为特定数字将使模型针对同一提示生成相同的文本。(默认值:0) | int | seed 42 |
| stop | 设置要使用的停止序列。遇到此模式时,LLM 将停止生成文本并返回。可以通过stop在模型文件中指定多个单独的参数来设置多个停止模式。 |
string | stop “AI assistant:” |
| tfs_z | 尾部自由采样用于减少输出中可能性较小的标记的影响。较高的值(例如 2.0)将进一步减少影响,而值 1.0 则禁用此设置。(默认值:1) | float | tfs_z 1 |
| num_predict | 生成文本时要预测的最大标记数。(默认值:128,-1 = 无限生成,-2 = 填充上下文) | int | num_predict 42 |
| top_k | 降低产生无意义答案的概率。值越高(例如 100)答案就越多样化,值越低(例如 10)答案就越保守。(默认值:40) | int | top_k 40 |
| top_p | 与 top-k 配合使用。较高的值(例如 0.95)将产生更加多样化的文本,而较低的值(例如 0.5)将产生更加集中和保守的文本。(默认值:0.9) | float | top_p 0.9 |
TEMPLATE
TEMPLATE 传递到模型中的完整提示模板。它可能包括(可选)系统消息、用户消息和模型的响应。注意:语法可能特定于模型。
模板变量
| 变量 | 描述 |
|---|---|
{{ .System }} |
用于指定自定义行为的系统消息。 |
{{ .Prompt }} |
用户提示消息。 |
{{ .Response }} |
来自模型的响应。生成响应时,此变量后的文本将被省略。 |
TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
"""SYSTEM
SYSTEM 指令指定模板中要使用的系统消息。
SYSTEM """<system message>"""ADAPTER
ADAPTER 指令是可选指令,用于指定应应用于基础模型的任何 LoRA 适配器。该指令的值应为绝对路径或相对于 Modelfile 的路径,并且文件必须采用 GGML 文件格式。应根据基础模型调整适配器,否则行为将不明确。
ADAPTER ./ollama-lora.binLICENSE
LICENSE 指令允许您指定与此 Modelfile 一起使用的模型在何种合法许可证下共享或分发。
LICENSE """
<license text>
"""MESSAGE
MESSAGE 指令允许您指定模型在响应时使用的消息历史记录。使用 MESSAGE 命令的多次迭代来构建对话,这将引导模型以类似的方式回答。
MESSAGE <role> <message>有效角色
| 角色 | 描述 |
|---|---|
| system | 为模型提供系统消息的另一种方法。 |
| user | 用户可能询问的示例消息。 |
| assistant | 模型应如何响应的示例消息。 |
对话示例
MESSAGE user Is Toronto in Canada?
MESSAGE assistant yes
MESSAGE user Is Sacramento in Canada?
MESSAGE assistant no
MESSAGE user Is Ontario in Canada?
MESSAGE assistant yes提示
Modelfile不区分大小写. 在示例中,使用大写指令是为了更容易与参数区分开来。- 指令可以按任意顺序排列。在示例中,
FROM指令排在最前面,以保持易读性。
作者:Jeebiz 创建时间:2024-07-21 11:24
最后编辑:Jeebiz 更新时间:2025-10-18 01:16
最后编辑:Jeebiz 更新时间:2025-10-18 01:16