自定义模型

通过创建自定义模型,你可以打造一个专属的 AI 助手。本章介绍如何使用 Modelfile 定制模型。教你如何使用 Modelfile 创建自定义模型,包括设置系统提示词、调整参数等。

什么是自定义模型?

自定义模型是在现有模型基础上:

  • 修改系统提示词(System Prompt)
  • 调整模型参数
  • 添加自定义模板
  • 设置停止词

Modelfile 基础

Modelfile 是定义自定义模型的配置文件,类似 Dockerfile。

基本结构

# 注释
FROM <基础模型>

# 设置参数
PARAMETER <参数名> <值>

# 设置系统提示词
SYSTEM <系统提示词>

# 设置模板
TEMPLATE <模板内容>

最简单的例子

创建一个名为 Modelfile 的文件:

FROM llama3.2
SYSTEM 你是一个友好的助手,喜欢用表情符号。

创建模型:

ollama create my-assistant -f Modelfile

运行模型:

ollama run my-assistant

FROM 指令

指定基础模型:

FROM llama3.2

也可以指定特定版本:

FROM llama3.2:3b

或使用本地 GGUF 文件:

FROM ./model.gguf

SYSTEM 指令

设置系统提示词,定义模型的角色和行为。

基本用法

SYSTEM 你是一个专业的 Python 编程助手。

多行系统提示词

SYSTEM """你是一个专业的技术文档撰写助手。

你的职责是:
1. 编写清晰、准确的技术文档
2. 使用简洁的语言
3. 提供代码示例
4. 注意格式规范"""

角色设定示例

编程助手:

SYSTEM 你是一个资深程序员,擅长多种编程语言。回答问题时:
- 提供简洁的代码示例
- 解释关键概念
- 指出潜在问题
- 给出最佳实践建议

翻译助手:

SYSTEM 你是一个专业翻译,精通中英文互译。翻译时:
- 保持原文语气和风格
- 使用地道的表达
- 必要时提供注释说明

写作助手:

SYSTEM 你是一个写作顾问,帮助用户改进文章。你会:
- 指出语法错误
- 提供修改建议
- 优化文章结构
- 保持作者原有风格

PARAMETER 指令

调整模型的生成参数。

常用参数

参数说明范围默认值
temperature创造性程度0-21.0
top_p核采样概率0-10.9
top_k候选词数量1-10040
num_ctx上下文长度512-1280002048
num_predict最大生成词数-1 无限制-1
stop停止词字符串列表-
repeat_penalty重复惩罚0-21.1

temperature 参数

控制输出的随机性:

PARAMETER temperature 0.3
效果适用场景
0-0.3确定性高,输出稳定代码生成、事实问答
0.4-0.7平衡创造性和准确性日常对话、写作
0.8-1.0创造性高,输出多样创意写作、头脑风暴
1.0+非常随机实验性用途

其他参数示例

PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER num_ctx 4096
PARAMETER stop "<|end|>"
PARAMETER repeat_penalty 1.2

TEMPLATE 指令

定义对话模板,控制输入输出的格式。

基本模板

TEMPLATE """用户: {{ .Prompt }}
助手: """

完整模板示例

TEMPLATE """{{ .System }}

### 用户:
{{ .Prompt }}

### 助手:
"""

模板变量

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

完整示例

示例 1:Python 编程助手

FROM llama3.2

SYSTEM """你是一个 Python 编程专家。你的职责是:
- 编写高质量的 Python 代码
- 解释代码的工作原理
- 遵循 PEP 8 编码规范
- 提供最佳实践建议"""

PARAMETER temperature 0.3
PARAMETER num_ctx 4096

创建并运行:

ollama create python-helper -f Modelfile
ollama run python-helper

示例 2:中文写作助手

FROM qwen2.5:7b

SYSTEM """你是一个专业的中文写作助手。你会:
- 帮助用户改进文章
- 提供写作建议
- 纠正语法错误
- 优化文章结构
- 保持作者原有风格"""

PARAMETER temperature 0.7
PARAMETER repeat_penalty 1.2

示例 3:技术面试官

FROM llama3.2

SYSTEM """你是一个技术面试官,负责面试软件工程师。你会:
- 提出有深度的技术问题
- 评估回答的准确性
- 给出建设性的反馈
- 根据回答追问细节

面试领域包括:数据结构、算法、系统设计、编程语言等。"""

PARAMETER temperature 0.5

查看模型配置

查看现有模型的 Modelfile:

ollama show llama3.2 --modelfile

输出可以保存为新的 Modelfile:

ollama show llama3.2 --modelfile > Modelfile

然后修改并创建新模型。

修改现有模型

方法一:基于现有模型创建

# 查看原模型配置
ollama show my-assistant --modelfile

# 创建新的 Modelfile
cat > Modelfile << EOF
FROM my-assistant
SYSTEM 你是一个更新后的助手,更加专业和友好。
EOF

# 创建新模型
ollama create my-assistant-v2 -f Modelfile

方法二:复制后修改

# 复制模型
ollama cp llama3.2 my-llama

# 创建 Modelfile
cat > Modelfile << EOF
FROM my-llama
PARAMETER temperature 0.5
EOF

# 更新模型
ollama create my-llama -f Modelfile

删除自定义模型

和删除普通模型一样:

ollama rm my-assistant

最佳实践

系统提示词编写技巧

  1. 明确角色定位
SYSTEM 你是一个[角色],专门负责[任务]。
  1. 列出具体职责
SYSTEM 你的职责包括:
1. [职责一]
2. [职责二]
3. [职责三]
  1. 设定行为规范
SYSTEM 回答时请遵循:
- [规范一]
- [规范二]

参数调整建议

场景temperature其他建议
代码生成0.2-0.4增大 num_ctx
日常对话0.6-0.8适中即可
创意写作0.8-1.0提高 repeat_penalty
事实问答0.1-0.3降低 temperature

常见问题

修改后没有生效

确保重新创建模型:

ollama create my-model -f Modelfile

系统提示词太长

尝试精简,保留关键信息。模型会优先关注开头和结尾的内容。

输出不符合预期

调整 temperature 参数:

  • 输出太随机:降低 temperature
  • 输出太单调:提高 temperature

练习

  1. 创建一个简单的自定义模型
  2. 设置不同的系统提示词,观察效果
  3. 调整 temperature 参数,对比输出
  4. 创建一个专业领域的助手
  5. 查看并修改现有模型的配置