我们相信:世界是美好的,你是我也是。 来玩一下解压小游戏吧!

无论哪款大模型,基本上第一句话就是个自我介绍,“我是谁,能干嘛”。其实,这个就是苏南大叔在本文中要详细定制化的地方。通过ollama的配置文件,微调定制deepseek-r1,变身自己的专属deepseek

苏南大叔:Ollama大模型,modelfile如何定制大模型系统角色? - ollama-modefile
Ollama大模型,modelfile如何定制大模型系统角色?(图5-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。本文测试环境:win10@22H2ollama@0.6.8deepseek-r1:7b。这个system命令,其实是对大模型的角色定制,或者说对大模型拟人化的话,就是对它的心理暗示或者说催眠功能。

ollama和deepseek

先前文回顾一下,本地还没有安装好ollama的小伙伴,可以参考文章:

modelfile 导出

modelfileollama的配置文件,定制特定角色只是其中一个功能。还可以用于:定制模型行为、设置系统提示、配置模型参数、创建特定角色等。

苏南大叔:Ollama大模型,modelfile如何定制大模型系统角色? - modelfile-qwen
Ollama大模型,modelfile如何定制大模型系统角色?(图5-2)

这个modelfile文件,实际上是个特殊格式的记事本文件。格式比较复杂,可以通过对现有的大模型进行导出获得。每个大模型的modelfile文件,差别是比较大的。所以,最好是在被定制过的目标大模型的基础modelfile文件基础上,进行修改。

就是个配置文件,标准名字是modelfile,实际上叫啥都可以。

可以使用ollama show命令,查看现有模型的导出的格式,一般只是能够提供参考价值,不能直接使用。例如:

ollama show deepseek-r1:7b > modelfile

定制 modelfile

一般来说,定制的modefile文件,其需要添加的标准基础格式是:

FROM deepseek-r1               # 基础模型
SYSTEM "系统提示内容"           # 系统角色设定
TEMPLATE "{{.Prompt}}"         # 提示模板
LICENSE "MIT"                  # 许可证声明

重点就是FROMSYSTEM,这两个参数。例如:

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提示词,需要反复调试,以期待效果最优化。

苏南大叔:Ollama大模型,modelfile如何定制大模型系统角色? - 微调大模型
Ollama大模型,modelfile如何定制大模型系统角色?(图5-3)

基础模型FROM

使用FROM定义基础模型。比如:

  • 基于已有模型,例如:FROM llama2或者FROM deepseek-r1
  • 基于现有下载好的模型的实体文件。可以是ollamamodels文件夹里面的文件,也可以是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

苏南大叔:Ollama大模型,modelfile如何定制大模型系统角色? - 使用tag
Ollama大模型,modelfile如何定制大模型系统角色?(图5-4)

这部操作之后,就是真正微调成功了。这个modelfile文件也暂时完成了它的使命。除了下次修改相关配置,它也就没有什么用途了。在不断调试的过程中,可以重复执行上面的命令。不用删除现有的模型。

测试大模型

剩下的就是一些已知的操作了。例如:

ollama run sunan-test

苏南大叔:Ollama大模型,modelfile如何定制大模型系统角色? - ollama-run-heimao
Ollama大模型,modelfile如何定制大模型系统角色?(图5-5)

从这个测试结果中,可以看到:对大模型的角色名称的定制化("黑猫"),已经生效了。

# 列出所有模型
ollama list
# 删除模型
ollama rm sunan-test

结语

本文的成功因素有三个,分别是:

  • 配置文件中的FROM,基础模型。
  • 配置文件中的SYSTEM,基础角色设定。
  • ollama create命令后面的名字,决定了这个模型在后续的代码中的调用方式。

更多ollama的经验文字,可以参考:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   ollama