























Ollama Qwen — 安装测试:https://www.cnblogs.com/vipsoft/p/20119448
在 Ollama 中自定义系统提示词(System Prompt)是模型行为控制的关键。有两种主流方法,推荐第二种。
在运行模型时,通过 --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 的文本文件,内容如下: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 = """
你是一个名为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 // 上下文窗口大小(如果模型支持)
}
}
文档在哪里?
http://localhost:11434 也能看到简单的 API 列表。ollama/docs/api.md 文件中。这些参数是 Ollama 的,他是怎么改变模型行为的。为什么我是谁就变成了 VipSoft
这是一个非常好的问题,触及了 LLM(大语言模型)运作的核心机制。简单来说:Ollama 并没有修改模型的“大脑”(权重),而是通过“上下文植入”和“参数调控”来改变它的“短期记忆”和“行为偏好”。
这就像给同一个演员(模型)换了一套剧本(System Prompt)和导演指令(Parameters),而不是给他做脑部手术(微调)。
这背后的机制是上下文注入,而非模型本质的改变。
SYSTEM "你的名字是 VipSoft" 时,Ollama 并没有去改动 Qwen 模型文件里的任何一个参数。它只是在每次对话开始前,偷偷在你的问题前面加了一段“隐藏指令”。[系统指令开始]
你的名字是 VipSoft,你是一个专业的合同解析助手...
[系统指令结束]
[用户提问开始]
你是谁?
[用户提问结束]
[系统指令] 部分的约束。它看到“你的名字是 VipSoft”后,在生成回答时,就会基于这个上下文来组织语言,所以它回答了“我是 VipSoft”。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 提示词是安全的,因为它不改变模型权重,不会引入新的崩溃风险。SYSTEM 提示词是无法从根本上提升能力的。这时候才需要考虑换基座模型(如换 7B)或进行微调。format: json 和低 temperature 来保证输出格式的稳定性,这才是 Ollama 参数对你项目最大的价值。所以,“我是 VipSoft” 这个身份,是模型根据你给的“剧本”临时扮演的,它的“芯”依然是 Qwen。
Modelfile 不区分大小写。 Modelfile的格式如下:
| 指令 | 描述 |
|---|---|
| FROM(必需) | 定义要使用的基础模型。 |
| PARAMETER | 设置Ollama运行模型的参数。 |
| TEMPLATE | 要发送到模型的完整提示模板。 |
| SYSTEM | 指定将设置在模板中的系统消息。 |
| ADAPTER | 定义要应用于模型的(Q)LoRA适配器。 |
| LICENSE | 指定法律许可证。 |
| MESSAGE | 指定消息历史。 |
在模板中,我们使用以下变量来表示不同部分的内容:
| 变量 | 描述 |
|---|---|
| {{ .System }} | 用于指定自定义行为的系统消息。 |
| {{ .Prompt }} | 用户提示消息。 |
| {{ .Response }} | 模型生成的回复。在生成回复时,此变量后的文本将被省略。 |
Ollama 服务器可以通过环境变量进行配置。
(1). 在 Mac 上设置环境变量
macOS 调用 launchctl setenv
launchctl setenv OLLAMA_HOST "0.0.0.0"
(2). 在 Linux 上设置环境变量
使用 systemctl 设置环境变量
systemctl edit ollama.service
对于每个环境变量,在 [Service] 部分下添加一行 Environment:
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
保存并退出。
重新加载 systemd 并重新启动 Ollama:
systemctl daemon-reload
systemctl restart ollama
(3). 在 Windows 上设置环境变量
首先通过单击任务栏中的 Ollama 退出,从控制面板中编辑系统环境变量,编辑或创建新变量,如 OLLAMA_HOST、OLLAMA_MODELS 等。单击 OK/应用以保存。从新的终端窗口运行ollama
Ollama 运行一个 HTTP 服务器,可以使用诸如 Nginx 之类的代理服务器公开。配置代理转发请求,并可选择设置所需的标头。使用 Nginx:
server {
listen 80;
server_name example.com; # 替换为您的域名或 IP
location / {
proxy_pass http://localhost:11434;
proxy_set_header Host localhost:11434;
}
}
Ollama 默认允许来自 127.0.0.1 和 0.0.0.0 的跨源请求。可以使用 OLLAMA_ORIGINS 配置额外的来源。
macOS: ~/.ollama/models
Linux: /usr/share/ollama/.ollama/models/manifests/registry.ollama.ai/library/
Windows: C:\Users\<username>\.ollama\models
(1). 如何在 Docker 中使用代理后面的 Ollama?可以通过在启动容器时传递来下面参数配置 Ollama Docker 容器镜像使用代理
-e HTTPS_PROXY=https://xxxx.com
在使用 HTTPS 时,安装代理证书为系统证书。当使用自签名证书时,可能需要一个新的 Docker 镜像。
FROM ollama/ollama
COPY ca.pem /usr/local/share/ca-certificates/ca.crt
RUN update-ca-certificates
构建并运行此镜像:
docker build -t ollamaNAME .
docker run -d -e HTTPS_PROXY=https://proxy.xxxx.com -p 11434:11434 ollamaNAM
如果想使用 GPU 加速,安装nvidia-container-toolkit。
Temperature:值越大,概率分布越均匀,模型生成结果的随机性越强,创造性越强;值越小,概率分布越集中,结果确定性越强,随机性越小
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。