Modelfile 基础

Modelfile 是 Ollama 定义自定义模型的核心配置文件。深入介绍 Modelfile 的所有指令,包括 FROM、PARAMETER、TEMPLATE、SYSTEM 等。

指令概览

指令说明必需
FROM指定基础模型
PARAMETER设置模型参数
TEMPLATE定义对话模板
SYSTEM设置系统提示词
ADAPTER指定适配器文件
LICENSE声明许可证
MESSAGE预设对话消息

FROM 指令

指定构建自定义模型的基础模型。

语法

FROM <模型名>:<标签>

或使用本地文件:

FROM <文件路径>

使用官方模型

FROM llama3.2
FROM llama3.2:3b
FROM qwen2.5:7b

使用本地模型

FROM ./models/my-model.gguf

使用自定义模型

FROM my-custom-model

PARAMETER 指令

设置模型运行时的参数。

语法

PARAMETER <参数名> <值>

所有可用参数

temperature

控制输出随机性:

PARAMETER temperature 0.7
效果
0.0最确定,输出最稳定
0.5平衡
1.0默认值
2.0最随机

top_p

核采样参数:

PARAMETER top_p 0.9

top_k

限制候选词数量:

PARAMETER top_k 40

num_ctx

上下文窗口大小:

PARAMETER num_ctx 4096

num_predict

最大生成 token 数:

PARAMETER num_predict 512
说明
-1无限制
-2无限制但会自动停止
正数限制最大数量

stop

设置停止词:

PARAMETER stop "###"
PARAMETER stop "<|end|>"

可以设置多个停止词。

repeat_penalty

重复惩罚:

PARAMETER repeat_penalty 1.1

值越大,越不容易重复。

repeat_last_n

重复惩罚的窗口大小:

PARAMETER repeat_last_n 64

seed

随机种子:

PARAMETER seed 42

设置后输出可复现。

mirostat

Mirostat 采样:

PARAMETER mirostat 0
说明
0禁用
1Mirostat 1
2Mirostat 2

mirostat_eta

Mirostat 学习率:

PARAMETER mirostat_eta 0.1

mirostat_tau

Mirostat 目标熵:

PARAMETER mirostat_tau 5.0

num_keep

保留的初始 token 数:

PARAMETER num_keep 0

num_batch

批处理大小:

PARAMETER num_batch 512

num_gpu

GPU 层数:

PARAMETER num_gpu 35

main_gpu

主 GPU 设备:

PARAMETER main_gpu 0

low_vram

低显存模式:

PARAMETER low_vram false

f16_kv

使用 FP16 存储键值:

PARAMETER f16_kv true

logits_all

输出所有 token 的 logits:

PARAMETER logits_all false

vocab_only

仅加载词汇表:

PARAMETER vocab_only false

use_mmap

使用内存映射:

PARAMETER use_mmap true

use_mlock

锁定内存:

PARAMETER use_mlock false

embedding_only

仅用于嵌入:

PARAMETER embedding_only false

rope_frequency_base

RoPE 基础频率:

PARAMETER rope_frequency_base 10000.0

rope_frequency_scale

RoPE 频率缩放:

PARAMETER rope_frequency_scale 1.0

参数组合示例

PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER top_k 40
PARAMETER num_ctx 4096
PARAMETER repeat_penalty 1.1

TEMPLATE 指令

定义对话的格式模板。

语法

TEMPLATE """模板内容"""

模板变量

变量说明
.System系统提示词
.Prompt用户输入
.First是否第一条消息
.Messages消息历史

基本模板

TEMPLATE """{{ .System }}
User: {{ .Prompt }}
Assistant:"""

带消息历史的模板

TEMPLATE """{{ .System }}
{{ range .Messages }}
{{ if eq .Role "user" }}User: {{ .Content }}{{ end }}
{{ if eq .Role "assistant" }}Assistant: {{ .Content }}{{ end }}
{{ end }}
Assistant:"""

Llama 风格模板

TEMPLATE """<|begin_of_text|><|start_header_id|>system<|end_header_id|>

{{ .System }}<|eot_id|><|start_header_id|>user<|end_header_id|>

{{ .Prompt }}<|eot_id|><|start_header_id|>assistant<|end_header_id|>

"""

SYSTEM 指令

设置系统提示词。

语法

SYSTEM <提示词>

或使用多行:

SYSTEM """多行
提示词
内容"""

示例

SYSTEM 你是一个有帮助的助手。
SYSTEM """你是一个专业的编程助手。

你的职责:
1. 编写高质量代码
2. 解释代码原理
3. 提供最佳实践"""

MESSAGE 指令

预设对话消息,用于 few-shot 学习。

语法

MESSAGE <角色> <内容>

角色可以是:userassistantsystem

示例

FROM llama3.2

SYSTEM 你是一个翻译助手。

MESSAGE user 你好
MESSAGE assistant Hello

MESSAGE user 谢谢
MESSAGE assistant Thank you

这样模型会学习这些示例的回复风格。

ADAPTER 指令

指定 LoRA 适配器文件。

语法

ADAPTER <文件路径>

示例

FROM llama3.2
ADAPTER ./my-adapter.bin

LICENSE 指令

声明模型的许可证。

语法

LICENSE """许可证内容"""

示例

LICENSE """MIT License

Copyright (c) 2024

Permission is hereby granted..."""

注释

使用 # 添加注释:

# 这是一个注释
FROM llama3.2  # 行尾注释

# 参数配置
PARAMETER temperature 0.7  # 控制随机性

完整示例

# 基于 Llama 3.2 创建编程助手
FROM llama3.2:3b

# 系统提示词
SYSTEM """你是一个专业的 Python 编程助手。

你的职责:
1. 编写高质量的 Python 代码
2. 解释代码的工作原理
3. 遵循 PEP 8 编码规范
4. 提供最佳实践建议"""

# 参数配置
PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER num_ctx 4096
PARAMETER repeat_penalty 1.1

# 停止词
PARAMETER stop "<|end|>"
PARAMETER stop "<|eot_id|>"

# 预设示例
MESSAGE user 写一个快速排序
MESSAGE assistant ```python
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)

这是一个经典的快速排序实现。

许可证

LICENSE """MIT License"""


## 调试技巧

### 查看模型的 Modelfile

```bash
ollama show my-model --modelfile

验证 Modelfile

创建模型时会自动验证:

ollama create test-model -f Modelfile

如果有语法错误会提示。

对比不同配置

创建多个版本对比效果:

# 版本 1
ollama create test-v1 -f Modelfile.v1

# 版本 2
ollama create test-v2 -f Modelfile.v2

# 对比运行
ollama run test-v1
ollama run test-v2