Ollama 模型文件¶
注意:
Modelfile
语法仍在开发中
模型文件是创建和共享模型的蓝图。
目录¶
- 格式
- 示例
- 指令
- FROM (必需)
- PARAMETER (参数)
- TEMPLATE (模板)
- SYSTEM (系统)
- ADAPTER (适配器)
- LICENSE (许可证)
- MESSAGE (消息)
- 备注
格式¶
Modelfile
的格式如下:
指令 | 描述 |
---|---|
FROM (必需) |
定义使用的基础模型。 |
PARAMETER |
设置模型运行时的参数。 |
TEMPLATE |
要发送到模型的完整提示模板。 |
SYSTEM |
指定在模板中设置的系统消息。 |
ADAPTER |
定义要应用于模型的(Q)LoRA适配器。 |
LICENSE |
指定法律许可证。 |
MESSAGE |
指定消息历史记录。 |
示例¶
基本Modelfile
¶
一个创建mario蓝图的Modelfile
示例:
FROM llama2
# sets the temperature to 1 [higher is more creative, lower is more coherent]
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
PARAMETER num_ctx 4096
# sets a custom system message to specify the behavior of the chat assistant
SYSTEM You are Mario from super mario bros, acting as an assistant.
使用方法:
- 将其保存为文件(例如
Modelfile
) ollama create choose-a-model-name -f <文件位置例如./Modelfile>
ollama run choose-a-model-name
- 开始使用模型!
更多示例可在示例目录中找到。
在ollama.com/library中的Modelfile
¶
有两种方法查看ollama.com/library中模型的Modelfile
:
- 选项1:从模型的标签页面查看详情页面:
- 转到特定模型的标签(例如https://ollama.com/library/llama2/tags)
- 点击一个标签(例如https://ollama.com/library/llama2:13b)
- 向下滚动到“层”
- 注意:如果没有
FROM
指令,则意味着模型是从本地文件创建的
- 注意:如果没有
- 选项2:使用
ollama show
打印任何本地模型的Modelfile
,如下
> ollama show --modelfile llama2:13b
# Modelfile generated by "ollama show"
# To build a new Modelfile based on this one, replace the FROM line with:
# FROM llama2:13b
FROM /root/.ollama/models/blobs/sha256:123abc
TEMPLATE """[INST] {{ if .System }}<<SYS>>{{ .System }}<</SYS>>
{{ end }}{{ .Prompt }} [/INST] """
SYSTEM """"""
PARAMETER stop [INST]
PARAMETER stop [/INST]
PARAMETER stop <<SYS>>
PARAMETER stop <</SYS>>
指令¶
FROM (必需)¶
FROM
指令定义创建模型时使用的基础模型。
从llama2构建¶
可用的基础模型列表: https://github.com/ollama/ollama#model-library
从二进制文件构建¶
应指定二进制文件的位置,位置应为绝对路径或相对于Modelfile
的路径。
参数¶
PARAMETER
指令定义运行模型时可以设置的参数。
有效参数及其值¶
参数 | 描述 | 值类型 | 示例使用 |
---|---|---|---|
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 将停止生成文本并返回。可以通过在 modelfile 中指定多个单独的 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
是传递给模型的完整提示模板。它可能包括(可选的)系统消息、用户的消息和模型的响应。注意:语法可能是模型特定的。模板使用 Go 模板语法。
模板变量¶
变量 | 描述 |
---|---|
{{ .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
指令指定要在模板中使用的系统消息(如果适用)。
ADAPTER¶
ADAPTER
指令是一个可选指令,指定应用于基础模型的任何 LoRA 适配器。此指令的值应为绝对路径或相对于 Modelfile 的路径,且文件必须是 GGML 文件格式。适配器应该从基础模型调整,否则行为是未定义的。
LICENSE¶
LICENSE
指令允许您指定与此 Modelfile 一起使用的模型共享或分发的法律许可证。
MESSAGE¶
MESSAGE
指令允许您指定模型在响应时使用的消息历史记录。使用 MESSAGE 命令的多次迭代来构建对话,这将引导模型以类似的方式回答。
有效角色¶
角色 | 描述 |
---|---|
system | 为模型提供 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
Notes¶
Modelfile
不区分大小写。在示例中,使用大写指令是为了便于将其与参数区分开来。- 指令可以按任意顺序排列。在示例中,首先是
FROM
指令,以保持易读性。