Ollama Modelfile官方文档(最新)

时间:2025-05-11 08:25:17

目录

  • Ollama Model File
    • Modelfile文件的格式
    • 示例
      • 基础的 `Modelfile`示例
      • 在[/library][1]中查看`Modelfile`
    • Modelfile中的命令语法
      • FROM (这个是必需的)
        • 使用llama3.2创建
        • `Safetensors` 模型构建
        • `GGUF` 文件构建
      • PARAMETER
        • 有效的参数及其值
      • TEMPLATE(模板)
        • Template Variables(模板变量)
      • SYSTEM
      • ADAPTER(模型适配器)
      • Safetensor adapter
      • GGUF adapter
      • LICENSE
      • MESSAGE(消息)
        • 有效角色
        • 示例
    • 注意

Ollama Model File

注意: Modelfile 语法还在开发中

在Ollama中,模型文件(Model File)是一个蓝图,它用于创建和共享模型。

Modelfile文件的格式

Modelfile的格式:

# comment
命令 参数
命令 描述
FROM (必需的) 定义使用的基模型
PARAMETER(参数) 设置Ollama运行模型的参数
TEMPLATE(提示词模板) 于发送给模型的完整提示模板
SYSTEM 指定将在模板中设置的系统消息
ADAPTER 定义适用于模型的(Q)LoRA适配器
LICENSE Specifies the legal license.
MESSAGE 指定消息历史

示例

基础的 Modelfile示例

Ollama这样的平台上创建一个Mario模型的Modelfile例子:

FROM llama3.2
# 设定温度参数为1 [更高的更具有创新性,更低的更富有连贯性]
PARAMETER temperature 1
# 将上下文窗口大小设置为4096,这控制着LLM能够使用多少个token来生成下一个token。
PARAMETER num_ctx 4096

# 设置了自定义系统消息以指定聊天助手的行为。你是马里奥,来自《超级马里奥兄弟》,扮演一名助手的角色。
SYSTEM You are Mario from super mario bros, acting as an assistant.

使用Modelfile:

  1. 将上面文本保存成一个文件 (例如 Modelfile)
  2. ollama create 模型名字 -f <Modelfile的路径,例如 ./Modelfile>'
  3. ollama run 模型名字
  4. 开始使用模型!

更多示例可以在 examples directory.

/library中查看Modelfile

  • 在任一的运行中的模型中,使用 ollama show 打印 Modelfile :

    > ollama show --modelfile llama3.2
    # Modelfile generated by "ollama show"
    # To build a new Modelfile based on this one, replace the FROM line with:
    # FROM llama3.2
    # 输出
    FROM /Users/pdevine/.ollama/models/blobs/sha256-00e1317cbf74d901080d7100f57580ba8dd8de57203072dc6f668324ba545f29
    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 stop "<|reserved_special_token"
    

Modelfile中的命令语法

FROM (这个是必需的)

FROM 命令定义了使用哪个基模型进行创建.

FROM <model name>:<tag>
使用llama3.2创建
FROM llama3.2

可使用的基模型列表:/ollama/ollama#model-library
其他型号可在以下位置找到:/library

Safetensors 模型构建
FROM <model directory>

model 目录应包含受支持架构的 Safetensors 权重。

当前支持的模型架构:

  • Llama(包括 Llama 2、Llama 3、Llama 3.1 和 Llama 3.2)
  • Mistral (包括 Mistral 1、Mistral 2 和 Mixtral)
  • Gemma(包括 Gemma 1 和 Gemma 2)
  • PHI3
GGUF 文件构建
FROM ./

GGUF文件位置应指定为绝对路径或是.Modelfile的相对路径(建议绝对路径)

PARAMETER

PARAMETER命令定义了一个可以在模型运行时设置的参数。

PARAMETER <parameter> <parametervalue>
有效的参数及其值
Parameter(参数名) 描述 值的类型 使用示例
mirostat 启用Mirostat算法以控制困惑度(perplexity)。 Mirostat算法可以有效减少结果中重复的发生。perplexity是指对词语预测的不确定性 (default: 0, 0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0) int mirostat 0
mirostat_eta 它影响算法对生成文本反馈的响应速度。学习率较低会导致调整更慢,而较高的学习率则会使算法反应更加迅速。 (Default: 0.1) float mirostat_eta 0.1
mirostat_tau 控制输出的连贯性和多样性之间的平衡。较低的值会使得文本更集中和连贯,而较高的值则会带来更大的多样性。 (Default: 5.0) float mirostat_tau 5.0
num_ctx 设置生成下一个token时使用的上下文窗口大小。(Default: 2048) int num_ctx 4096
repeat_last_n 设定了模型需要回顾多少信息来以防止重复。 (Default: 64, 0 = disabled, -1 = num_ctx) int repeat_last_n 64
repeat_penalty 设定了重复惩罚的强度。较高的值(例如,1.5)会更强烈地处罚重复,而较低的值(如0.9)则会宽容一些. (Default: 1.1) float repeat_penalty 1.1
temperature 模型的温度。 temperature通常用于控制随机性和多样性,提高温度意味着更高的随机性,可能导致更出乎意料但可能更有创意的答案。(Default: 0.8) float temperature 0.7
seed 设置了生成时使用的随机数种子。设置特定的数值将使得模型对于相同的提示会生成相同的文本。(Default: 0) int seed 42
stop 设置停止序列。当模型遇到这个模式时,会停止生成文本并返回。可以通过在Modelfile中指定多个独立的stop参数来设置多个停止模式。 string stop “AI assistant:”
tfs_z 尾部*采样被用来减少不那么可能的token对输出的影响。较高的值(例如,2.0)会更大幅度地减小这种影响,而设置为1.0则禁用此功能。(default: 1) float tfs_z 1
num_predict 生成文本时预测的最大token数量。 (Default: 128, -1 = infinite generation(无限制), -2 = fill context(根据上下文填充完整fill the context to its maximum)) int num_predict 42
top_k 减少生成无意义内容的概率。较高的值(例如,100)会使答案更加多样,而较低的值(如,10)则会更为保守。 (Default: 40) int top_k 40
top_p top-k协同工作。较高的值(例如,0.95)将导致更丰富的文本多样性,而较低的值(如,0.5)则会生成更聚焦和保守的内容。(Default: 0.9) float top_p 0.9
min_p 替代top_p,旨在确保质量和多样性的平衡。参数 p 表示相对于最可能标记的概率,考虑标记的最小概率。例如,当 p=0.05 且最可能的标记的概率为 0.9 时,将筛选掉值小于 0.045 的 logit。(Default: 0.0) float min_p 0.05

TEMPLATE(模板)

模型接收到的完整提示模板 (TEMPLATE)。它可以包含(可选地)系统消息、用户的消息以及模型的响应。注意:语法可能取决于特定的模型。模板使用Go语言编写。 template syntax.

Template Variables(模板变量)
Variable(变量) 描述
{{ .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
"""

{{ if .System }}: 这是一个条件语句,如果.System变量存在并且为真(即非空),将会执行接下来的代码块。
{{ .System }}: 如果.System变量被定义且包含内容,这部分的内容将被插入到文本中。这里的.通常是上下文中变量的引用符号。
{{ end }}: 当前条件语句或代码块结束的标记。
{{ if .Prompt }}: 同样是一个条件语句,如果.Prompt(可能是指用户的提示信息)存在且非空,将会执行接下来的代码段。
{{ .Prompt }}: 如果.Prompt变量有值,这部分内容也会被插入到输出文本中。
总的来说,这段模板语法用于根据.System.Prompt变量的是否存在或内容决定是否包含在最终生成的文本中。

SYSTEM

SYSTEM指令指定了模板中适用的系统消息。

SYSTEM """<system message>"""

ADAPTER(模型适配器)

在LLM中,ADAPTER 指令是一个可选的指令,它指定应应用到基础模型上的轻量级(LoRA)适配器。这个值应该是一个绝对路径或者相对于模文件的相对路径,base model应该用指令指定。如果基本模型与适配器所调优的基本模型不相同,则行为将是不稳定的。

Safetensor adapter

ADAPTER <path to safetensor adapter>

当前支持的模型:

  • Llama(包括 Llama 2、Llama 3、Llama 3.1 和 Llama 3.2)
  • Mistral (包括 Mistral 1、Mistral 2 和 Mixtral)
  • Gemma(包括 Gemma 1 和 Gemma 2)
  • PHI3

GGUF adapter

ADAPTER ./

LICENSE

LICENSE 指令允许你指定与这个模文件关联使用的模型所采用的法律许可协议。这通常涉及到如何根据开源软件或AI模型的标准许可(如MIT、Apache、GNU等)来分享或分发模型,以确保在使用过程中遵守相关法律法规。

LICENSE """
<license text>
"""

MESSAGE(消息)

MESSAGE 指令允许你为模型设置一个消息历史,以便在生成响应时参考。通过多次使用 MESSAGE 命令,你可以构建一段对话,引导模型以类似的方式进行回答,模拟真实的对话流程。这通常用于训练模型理解和维持上下文,使其生成的回复更自然、连贯。

MESSAGE <role> <message>
有效角色
Role(角色) 描述
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 指令放在最前面,以保持清晰易读性。这可能是因为 FROM 指令常常用于指示信息的来源或者模文件的初始设置,然后跟随的是其他类型的命令等,这种顺序有助于读者快速地理解整个模板或程序流程。