跳转至

Ollama 模型文件

注意:Modelfile语法仍在开发中

模型文件是创建和共享模型的蓝图。

目录

格式

Modelfile的格式如下:

# comment
INSTRUCTION arguments
指令 描述
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.

使用方法:

  1. 将其保存为文件(例如Modelfile
  2. ollama create choose-a-model-name -f <文件位置例如./Modelfile>
  3. ollama run choose-a-model-name
  4. 开始使用模型!

更多示例可在示例目录中找到。

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指令定义创建模型时使用的基础模型。

FROM <model name>:<tag>

从llama2构建

FROM llama2

可用的基础模型列表: https://github.com/ollama/ollama#model-library

从二进制文件构建

FROM ./ollama-model.bin

应指定二进制文件的位置,位置应为绝对路径或相对于Modelfile的路径。

参数

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 将停止生成文本并返回。可以通过在 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指令指定要在模板中使用的系统消息(如果适用)。

SYSTEM """<system message>"""

ADAPTER

ADAPTER指令是一个可选指令,指定应用于基础模型的任何 LoRA 适配器。此指令的值应为绝对路径或相对于 Modelfile 的路径,且文件必须是 GGML 文件格式。适配器应该从基础模型调整,否则行为是未定义的。

ADAPTER ./ollama-lora.bin

LICENSE

LICENSE指令允许您指定与此 Modelfile 一起使用的模型共享或分发的法律许可证。

LICENSE """
<license text>
"""

MESSAGE

MESSAGE指令允许您指定模型在响应时使用的消息历史记录。使用 MESSAGE 命令的多次迭代来构建对话,这将引导模型以类似的方式回答。

MESSAGE <role> <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 指令,以保持易读性。