Qwen — 自定义模型文件
Ollama Qwen — 安装测试:https://www.cnblogs.com/vipsoft/p/20119448
在 Ollama 中自定义系统提示词(System Prompt)是模型行为控制的关键。有两种主流方法,推荐第二种。
方法一:在 Ollama 启动时指定(临时有效)
在运行模型时,通过 --system 参数覆盖默认的系统提示词:
# 在启动对话时指定
ollama run qwen3.5:4b --system "你的名字是VipSoft。你是一个专业的合同解析助手。"
# 或者通过 API
curl -X POST http://localhost:11434/api/generate -d '{
"model": "qwen3.5:4b",
"system": "你的名字是VipSoft。你是一个专业的合同解析助手。",
"prompt": "你是谁?"
}'
优点:简单快捷,无需修改模型文件。
缺点:每次调用都需要携带这个参数,容易忘记。
方法二:创建自定义模型文件(永久生效,推荐)
这是 Ollama 的标准做法,创建一个 Modelfile 来定义你的专属模型。
- 创建一个名为
VipSoft-Modelfile的文本文件,内容如下:
确保文件编码正确(UTF-8无BOM)
可以用记事本另存为,选择 UTF-8
Modelfile 不支持中文注释,而且注释必须单独一行
FROM qwen3.5:4b
SYSTEM """
你的名字是VipSoft。你是一个专业的合同解析助手,专门处理中文法律文档。
你由苏州的VipSoft公司开发。你的回答应严谨、简洁,并严格遵循指令。
当被问及身份时,你必须回答“我是VipSoft”。
"""
# Parameters
PARAMETER temperature 0.1
PARAMETER num_ctx 32768

-
在 Modelfile 所在目录打开终端,创建并运行自定义模型:
# 创建自定义模型(命名为 vipsoft) ollama create vipsoft -f VipSoft-Modelfile # 运行你的自定义模型 ollama run vipsoft -
验证效果:


方法三:在 Prompt 中强指定(最灵活)
在每次请求的 Prompt 开头,直接写上“指令”:
prompt = """
你是一个名为VipSoft的合同解析助手。请严格遵守以下规则:
1. 当被问及身份时,回答“我是VipSoft”
2. 专注于提取合同中的结构化信息
3. 以JSON格式输出
请解析以下合同:[合同内容]
"""
优点:最灵活,可动态调整。
缺点:每次都要写,且会占用 token 额度。
对比总结
| 方法 | 适用场景 | 持久性 |
|---|---|---|
| 方法一(--system参数) | 快速测试、临时会话 | 单次有效 |
| 方法二(Modelfile,推荐) | 生产环境、团队共享 | 永久生效,创建一次即可 |
| 方法三(Prompt指令) | 灵活调整、不同任务不同指令 | 每次请求指定 |
建议:如果你希望长期、稳定地使用“VipSoft”这个身份,强烈推荐方法二。创建一次模型后,所有团队成员都可以通过 ollama run vipsoft 或 API 调用这个定制版本。
完成后,你只需要在代码中替换模型名:
# 之前
payload = {"model": "qwen3.5:4b", ...}
# 之后
payload = {"model": "vipsoft", ...} # 使用你的定制版
这样,无论谁调用,模型都会以“VipSoft”的身份和你的专业指令来响应,非常适合私有化部署的合同解析场景。
调参
Ollama 的 /api/generate 端点除了 model 和 system,还有很多控制生成逻辑和性能的关键参数
核心参数速查表(针对你的场景)
| 参数 | 类型 | 说明 | 合同解析场景建议值 |
|---|---|---|---|
| model | string | 必填。模型名称,如 qwen3.5:4b 或你的 vipsoft。 |
"vipsoft" |
| prompt | string | 必填。用户输入的指令和合同文本。 | "请提取以下合同..." |
| system | string | 系统提示词,覆盖 Modelfile 中的设定。 | "你是VipSoft,专注于..." |
| stream | boolean | 是否流式输出。解析合同建议关掉。 | false |
| format | string | 强烈推荐。强制输出 JSON 格式,方便代码解析。 | "json" |
| options | object | 模型推理参数(温度、token数等),见下文。 | {"temperature": 0.1} |
| raw | boolean | 设为 true 时,Ollama 不会自动添加聊天模板。 |
通常用默认 false |
| keep_alive | string | 模型在内存中的存活时间(如 "10m")。 |
"5m" |
options 对象(控制生成质量)
这是你控制模型“严谨性”的关键。在合同解析中,我们需要低随机性、高确定性。
{
"model": "vipsoft",
"prompt": "提取合同信息...",
"format": "json",
"stream": false,
"options": {
"temperature": 0.1, // 温度:0.1 非常低,减少胡言乱语
"num_predict": 2048, // 最大生成 token 数(防止长文截断)
"top_k": 40, // 采样策略,配合低 temperature 使用
"seed": 12345, // 随机种子,让结果可复现(调试时用)
"num_ctx": 32768 // 上下文窗口大小(如果模型支持)
}
}
文档在哪里?
- 在线文档(最全):访问 https://docs.ollama.com ,点击左侧 API Reference -> Generate a completion。
- 本地文档:Ollama 启动后,访问
http://localhost:11434也能看到简单的 API 列表。 - GitHub 源码说明:参数细节在
ollama/docs/api.md文件中。
这些参数是 Ollama 的,他是怎么改变模型行为的。为什么我是谁就变成了 VipSoft
这是一个非常好的问题,触及了 LLM(大语言模型)运作的核心机制。简单来说:Ollama 并没有修改模型的“大脑”(权重),而是通过“上下文植入”和“参数调控”来改变它的“短期记忆”和“行为偏好”。
这就像给同一个演员(模型)换了一套剧本(System Prompt)和导演指令(Parameters),而不是给他做脑部手术(微调)。
一、为什么“你是谁”变成了 VipSoft?(System Prompt 的原理)
这背后的机制是上下文注入,而非模型本质的改变。
- “作弊”的上下文:当你设置
SYSTEM "你的名字是 VipSoft"时,Ollama 并没有去改动 Qwen 模型文件里的任何一个参数。它只是在每次对话开始前,偷偷在你的问题前面加了一段“隐藏指令”。 - 拼接过程:模型看到的真实输入其实是这样的:
[系统指令开始] 你的名字是 VipSoft,你是一个专业的合同解析助手... [系统指令结束] [用户提问开始] 你是谁? [用户提问结束] - 模型的“阅读理解”:Qwen 模型被训练成会认真阅读并遵循
[系统指令]部分的约束。它看到“你的名字是 VipSoft”后,在生成回答时,就会基于这个上下文来组织语言,所以它回答了“我是 VipSoft”。 - 本质:模型本身还是 Qwen。如果你在 System Prompt 里不提名字,它依然会变回“我是通义千问”。这完全是临时的、会话级的行为控制。
二、Ollama 参数是如何“改变”模型的?
Ollama 的 Modelfile 和 API 参数主要从两个维度影响模型:
| 维度 | 代表参数 | 原理 | 类比 |
|---|---|---|---|
| 行为约束 | SYSTEM, prompt |
上下文植入。在模型输入前拼接指令,利用模型的指令遵循能力。 | 给演员看新剧本。 |
| 生成策略 | temperature, top_k |
推理调控。改变模型选择下一个字的“随机性”算法。 | 导演喊“收着点演”或“放开演”。 |
| 资源边界 | num_ctx, num_predict |
硬件限制。告诉 Ollama 运行时最多用多少内存/生成长度。 | 规定舞台大小和演出时长。 |
重要区别:Ollama 的 PARAMETER 指令(如 temperature 0.1)实际上设置的是 Ollama 推理服务器的运行时参数,而不是修改模型文件里的默认值。这就像你调用一个函数时传入了参数,函数本身没变,但这次执行的结果变了。
三、这与“微调”有本质区别
你可能会疑惑,这和训练模型有什么区别?区别非常大:
| 方式 | 原理 | 改变程度 | 成本/难度 | 持久性 |
|---|---|---|---|---|
| Ollama 参数 | 上下文提示 | 仅改变当前会话的输出风格 | 零成本,即时生效 | 临时(换提示词就失效) |
| 微调 (Fine-Tune) | 修改模型权重 | 永久改变模型的“知识”和“人格” | 高成本,需要算力数据 | 永久(刻在“DNA”里) |
结论:你现在用的 vipsoft 模型,本质上只是 qwen3.5:4b 披了一件叫“System Prompt”的外衣。它的底层能力(如合同理解能力)完全取决于基座模型 Qwen,Ollama 只是帮你自动化了“每次都要写长串指令”的麻烦。
四、对你的合同解析项目意味着什么?
- 稳定性:依赖
SYSTEM提示词是安全的,因为它不改变模型权重,不会引入新的崩溃风险。 - 局限性:如果模型(Qwen)本身就不擅长解析某种复杂合同,仅靠修改 Ollama 的
SYSTEM提示词是无法从根本上提升能力的。这时候才需要考虑换基座模型(如换 7B)或进行微调。 - 最佳实践:利用
format: json和低temperature来保证输出格式的稳定性,这才是 Ollama 参数对你项目最大的价值。
所以,“我是 VipSoft” 这个身份,是模型根据你给的“剧本”临时扮演的,它的“芯”依然是 Qwen。
本文来自博客园,作者:VipSoft 转载请注明原文链接:https://www.cnblogs.com/vipsoft/p/20122177
浙公网安备 33010602011771号