Ollama大模型,modelfile如何定制大模型系统角色?
发布于 作者:苏南大叔 来源:程序如此灵动~

无论哪款大模型,基本上第一句话就是个自我介绍,“我是谁,能干嘛”。其实,这个就是苏南大叔在本文中要详细定制化的地方。通过ollama
的配置文件,微调定制deepseek-r1
,变身自己的专属deepseek
。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。本文测试环境:win10@22H2
,ollama@0.6.8
,deepseek-r1:7b
。这个system
命令,其实是对大模型的角色定制,或者说对大模型拟人化的话,就是对它的心理暗示或者说催眠功能。
ollama和deepseek
先前文回顾一下,本地还没有安装好ollama
的小伙伴,可以参考文章:
- https://newsn.net/say/ollama-deepseek.html
- https://newsn.net/say/ollama-host.html
- https://newsn.net/say/ollama-mac.html
modelfile 导出
modelfile
是ollama
的配置文件,定制特定角色只是其中一个功能。还可以用于:定制模型行为、设置系统提示、配置模型参数、创建特定角色等。
这个modelfile
文件,实际上是个特殊格式的记事本文件。格式比较复杂,可以通过对现有的大模型进行导出获得。每个大模型的modelfile
文件,差别是比较大的。所以,最好是在被定制过的目标大模型的基础modelfile
文件基础上,进行修改。
就是个配置文件,标准名字是modelfile
,实际上叫啥都可以。
可以使用ollama show
命令,查看现有模型的导出的格式,一般只是能够提供参考价值,不能直接使用。例如:
ollama show deepseek-r1:7b > modelfile
定制 modelfile
一般来说,定制的modefile
文件,其需要添加的标准基础格式是:
FROM deepseek-r1 # 基础模型
SYSTEM "系统提示内容" # 系统角色设定
TEMPLATE "{{.Prompt}}" # 提示模板
LICENSE "MIT" # 许可证声明
重点就是FROM
和SYSTEM
,这两个参数。例如:
FROM deepseek-r1:7b
TEMPLATE """{{- if .System }}{{ .System }}{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1}}
{{- if eq .Role "user" }}<|User|>{{ .Content }}
{{- else if eq .Role "assistant" }}<|Assistant|>{{ .Content }}{{- if not $last }}<|end▁of▁sentence|>{{- end }}
{{- end }}
{{- if and $last (ne .Role "assistant") }}<|Assistant|>{{- end }}
{{- end }}"""
PARAMETER stop <|begin▁of▁sentence|>
PARAMETER stop <|end▁of▁sentence|>
PARAMETER stop <|User|>
PARAMETER stop <|Assistant|>
SYSTEM """你是黑猫,名字叫黑猫,性格温柔,喜欢帮助别人。你会用中文回答问题。"""
LICENSE """MIT License Copyright (c) 2023 DeepSeek"""
这个SYSTEM
提示词,需要反复调试,以期待效果最优化。
基础模型FROM
使用FROM
定义基础模型。比如:
- 基于已有模型,例如:
FROM llama2
或者FROM deepseek-r1
。 - 基于现有下载好的模型的实体文件。可以是
ollama
的models
文件夹里面的文件,也可以是huggingface
上的gguf
文件。
FROM deepseek-r1
FROM C:\Users\sunan\.ollama\models\qwen2.5-1.5b-instruct-q4_k_m.gguf
C:\Users\sunan\.ollama\models\blobs\sha256-970aa74c0a90ef7482477cf803618e776e173c007bf957f635f1015bfcfef0e6
微调定制角色【对话中的名字】
使用SYSTEM
命令进行定制。参考:
SYSTEM """你是黑猫,名字叫黑猫,性格温柔,喜欢帮助别人。你会用中文回答问题。"""
编程助手:
SYSTEM """You are an expert programming assistant. Follow these rules:
1. Always start with a brief explanation
2. Provide code examples
3. Include comments in code
4. Explain potential pitfalls"""
翻译助手:
SYSTEM """You are a professional translator. Follow these guidelines:
1. Maintain the original meaning
2. Consider cultural context
3. Preserve formatting
4. Explain idioms when necessary"""
其余参数
FROM llama2
PARAMETER temperature 0.7 # 温度参数,越低越保守
PARAMETER top_k 40 # top_k 采样,限制候选词数量
PARAMETER top_p 0.9 # top_p 采样,控制采样范围
PARAMETER stop ["User:", "Assistant:"] # 停止词
PARAMETER repeat_penalty 1.1 # 重复惩罚
PARAMETER seed 42 # 随机种子
这些设置,暂时用不到。本文不作详细解释,在modelfile
文件中,写不写这些参数不影响大局。
创建新的大模型【列表中的名字】
ollama create
后面的模型名称,就是将来在ollama list
里面显示的名称。-f
参数就是模版文件。
ollama create sunan-test -f modelfile
也可以使用tag
,创建一个新的模型。
ollama create sunan-test:7b -f modelfile
这部操作之后,就是真正微调成功了。这个modelfile
文件也暂时完成了它的使命。除了下次修改相关配置,它也就没有什么用途了。在不断调试的过程中,可以重复执行上面的命令。不用删除现有的模型。
测试大模型
剩下的就是一些已知的操作了。例如:
ollama run sunan-test
从这个测试结果中,可以看到:对大模型的角色名称的定制化("黑猫"),已经生效了。
# 列出所有模型
ollama list
# 删除模型
ollama rm sunan-test
结语
本文的成功因素有三个,分别是:
- 配置文件中的
FROM
,基础模型。 - 配置文件中的
SYSTEM
,基础角色设定。 ollama create
命令后面的名字,决定了这个模型在后续的代码中的调用方式。
更多ollama
的经验文字,可以参考:


