Modelfile文件定义
modelfile文件是在ollama上创建自定义模型的蓝图
Modelfile文件通过一下指令配置
Instruction | Description |
---|---|
FROM (required) | 定义所使用的基础模型 |
PARAMETER | 配置模型参数 |
TEMPLATE | 定义生成的提示词模板 |
SYSTEM | 定义模型的系统级角色设定 |
ADAPTER | 定义适配器 |
LICENSE | 指定合法证明 |
MESSAGE | 添加示例对话 |
使用案列
创建一个马里奥的蓝图,对应的Modelfile文件内容如下:
# 指定基本模型
FROM gemma:2b
# 指定大模型的一些输入输出参数
PARAMETER temperature 1
PARAMETER num_ctx 4096
# 配置担任的角色
SYSTEM You are Mario from super mario bros, acting as an assistant.
命令行输入命令
ollama create mrio -f E:\data\learn-LLM\LLM-ollama\Modelfile
简单测试:
>>> 你好,你是谁?
Hey there! It's me, Mario! What can I do for you today?
配置指令介绍
FROM (Required)
FROM用来指定基础大模型,所以它是必须要有的。
它不仅支持GPT,deepseek这样的常见大模型,也支持safetensors格式和GGUF格式存储的大模型。
PARAMETER
设置模型运行时的一些参数
Parameter | Description | Value Type | Example Usage |
---|---|---|---|
num_ctx | 设置一次输入模型的最大token数量(Default: 2048) | int | num_ctx 4096 |
repeat_last_n | 设置一个回溯窗口,数值代表窗口的大小,模型会在生成下一个token前回顾前n个token,避免出现输出重复的现象(Default: 64, 0 = disabled, -1 = num_ctx) | int | repeat_last_n 64 |
repeat_penalty | 设置惩罚重复的强度,值越大惩罚越高(e.g., 1.5), 值越小惩罚越小(e.g., 0.9) (Default: 1.1) | float | repeat_penalty 1.1 |
temperature | 模型输出的发散度,值是0-1,越大概率分步越平滑,也就是说低概率token的机会越大,模型也就“思维更发散” (Default: 0.8) | float | temperature 0.7 |
seed | 随机数种子,用来确保相同随机种子和相同prompt下的输出几乎一样,当然并不能确保一模一样(Default: 0) | int | seed 42 |
stop | 设置停止生成的标志,当模型生成了stop中的内容时就会停止生成,并返回当前的生成结果。 | string | stop "AI assistant:" |
num_predict | 定义一次模型输出的最大token数量(Default: -1, infinite generation) | int | num_predict 42 |
top_k | 原理是生成一个token时从概率最高的k个候选token中做选择,这样有助于模型不会胡说,值越大(e.g. 100) 回答越多样, 值越小 (e.g. 10) 回答越保守. (Default: 40) | int | top_k 40 |
top_p | 限制采样到累积概率达到 p 的最小 token 子集,越大 (e.g., 0.95)越发散,越小(e.g., 0.5)越稳定保守. (Default: 0.9) |
float | top_p 0.9 |
min_p | top_p的替代品,作用是仅保留 相对概率 ≥ |
float | min_p 0.05 |
补充:top_k和temperature的区别
特性 |
top_k |
temperature |
---|---|---|
控制方式 |
限制采样范围到前 k 个高概率 token |
调整整个概率分布的平滑度 |
作用对象 |
筛选 token 子集 |
改变所有 token 的相对概率 |
效果 |
控制多样性,减少低概率 token 的出现 |
控制随机性,影响高/低概率 token 的选择倾向 |
值范围 |
整数(通常 1 到 词汇表大小) |
浮点数(通常 0 到 2,0 为确定性) |
高值影响 |
更多样化,可能包含较低概率 token(更随机) |
更随机,增加低概率 token 的机会(更创意) |
低值影响 |
更保守,倾向于高概率 token(更聚焦) |
更确定性,倾向于最高概率 token(更可预测) |
典型设置 |
top_k 40 (平衡多样性和质量) |
temperature 0.7 (适度创意) |
交互性 |
可与temperature结合使用 |
可与top_k结合使用 |
TEMPLATE
要传递到模型中的完整prompt模板。它可以包括(可选地)system信息、user信息和来自模型的response。注意:语法可能因模型而异。
TEMPLATE中的变量
Variable | Description |
---|---|
{{ .System }} |
The system message used to specify custom behavior. |
{{ .Prompt }} |
The user prompt message. |
{{ .Response }} |
The response from the model. When generating a response, text after this variable is omitted. |
格式:
TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
"""
SYSTEM
也就是配置TEMPLATE中的system部分
SYSTEM """<system message>"""
ADAPTER
配置对应的微调所用的adapter
ADAPTER <path to safetensor adapter>
LICENSE
声明该模型的许可证类型,明确告知用户该模型的法律使用限制、权限和合规要求。
LICENSE """
<license text>
"""
MESSAGE
MESSAGE指令允许您指定模型在响应时使用的消息历史记录。使用MESSAGE命令的多次迭代来建立对话,该对话将引导模型以类似的方式回答。
MESSAGE <role> <message>
role的取值:
Role | Description |
---|---|
system | Alternate way of providing the SYSTEM message for the model. |
user | An example message of what the user could have asked. |
assistant | An example message of how the model should respond. |
案列:
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