通过创建自定义模型,你可以打造一个专属的 AI 助手。本章介绍如何使用 Modelfile 定制模型。教你如何使用 Modelfile 创建自定义模型,包括设置系统提示词、调整参数等。
自定义模型是在现有模型基础上:
Modelfile 是定义自定义模型的配置文件,类似 Dockerfile。
# 注释
FROM <基础模型>
# 设置参数
PARAMETER <参数名> <值>
# 设置系统提示词
SYSTEM <系统提示词>
# 设置模板
TEMPLATE <模板内容>
创建一个名为 Modelfile 的文件:
FROM llama3.2
SYSTEM 你是一个友好的助手,喜欢用表情符号。
创建模型:
ollama create my-assistant -f Modelfile
运行模型:
ollama run my-assistant
指定基础模型:
FROM llama3.2
也可以指定特定版本:
FROM llama3.2:3b
或使用本地 GGUF 文件:
FROM ./model.gguf
设置系统提示词,定义模型的角色和行为。
SYSTEM 你是一个专业的 Python 编程助手。
SYSTEM """你是一个专业的技术文档撰写助手。
你的职责是:
1. 编写清晰、准确的技术文档
2. 使用简洁的语言
3. 提供代码示例
4. 注意格式规范"""
编程助手:
SYSTEM 你是一个资深程序员,擅长多种编程语言。回答问题时:
- 提供简洁的代码示例
- 解释关键概念
- 指出潜在问题
- 给出最佳实践建议
翻译助手:
SYSTEM 你是一个专业翻译,精通中英文互译。翻译时:
- 保持原文语气和风格
- 使用地道的表达
- 必要时提供注释说明
写作助手:
SYSTEM 你是一个写作顾问,帮助用户改进文章。你会:
- 指出语法错误
- 提供修改建议
- 优化文章结构
- 保持作者原有风格
调整模型的生成参数。
| 参数 | 说明 | 范围 | 默认值 |
|---|---|---|---|
| temperature | 创造性程度 | 0-2 | 1.0 |
| top_p | 核采样概率 | 0-1 | 0.9 |
| top_k | 候选词数量 | 1-100 | 40 |
| num_ctx | 上下文长度 | 512-128000 | 2048 |
| num_predict | 最大生成词数 | -1 无限制 | -1 |
| stop | 停止词 | 字符串列表 | - |
| repeat_penalty | 重复惩罚 | 0-2 | 1.1 |
控制输出的随机性:
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 """用户: {{ .Prompt }}
助手: """
TEMPLATE """{{ .System }}
### 用户:
{{ .Prompt }}
### 助手:
"""
| 变量 | 说明 |
|---|---|
| .System | 系统提示词 |
| .Prompt | 用户输入 |
| .First | 是否是第一条消息 |
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
FROM qwen2.5:7b
SYSTEM """你是一个专业的中文写作助手。你会:
- 帮助用户改进文章
- 提供写作建议
- 纠正语法错误
- 优化文章结构
- 保持作者原有风格"""
PARAMETER temperature 0.7
PARAMETER repeat_penalty 1.2
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
SYSTEM 你是一个[角色],专门负责[任务]。
SYSTEM 你的职责包括:
1. [职责一]
2. [职责二]
3. [职责三]
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 参数: