Ollama 参数设置不需要一次改十几个选项。先分清三个问题:回答变化大不大、能容纳多少上下文、最多生成多少内容。本文以同一段测试资料为例,教你一次只改一个参数,并记录格式、事实与耗时。需要已安装的 Ollama 和一个可以正常运行的本地模型。

一、先固定任务与模型
记录完整模型标签、Ollama 版本和输入。准备一个能独立核对的任务,例如“从三句话里提取备份时间,没有写负责人就填未知”。不使用无法判定对错的开放闲聊来评价事实可靠性。
资料:照片每周六备份。测试恢复每月一次。未指定负责人。
任务:输出备份时间、恢复频率、负责人,不补充资料外信息。
二、温度影响采样,不负责保证事实
温度较低通常用于减少输出变化,适合提取和格式化;较高设置可用于探索不同表达。但低温度也可能稳定地产生同一种错误,不能解释为“正确率更高”。具体行为还依赖模型与后端。
使用相同任务各运行几次,比较是否漏字段、编负责人、格式失效,再看文字是否多样。不要仅凭某一版句子更好听就说模型能力提升。
三、上下文不是越长越好
上下文用于容纳输入、对话和生成过程中的相关内容,具体开销与模型有关。设置更大的 num_ctx 可能增加资源需求;资料塞得更多,也可能让模型忽略关键部分。
先用短资料跑通,再逐渐加入与任务有关的内容。想处理长文时,优先梳理结构、检索和分段,不是只把上下文数字调大。
四、用一个请求模板做受控比较
$body = @{
model = 'qwen2.5:3b'
prompt = '资料:照片每周六备份。测试恢复每月一次。未指定负责人。任务:输出备份时间、恢复频率、负责人,不补充资料外信息。'
stream = $false
options = @{ temperature = 0; num_ctx = 4096; num_predict = 160 }
} | ConvertTo-Json -Depth 5
$r = Invoke-RestMethod -Method Post -Uri 'http://127.0.0.1:11434/api/generate' -ContentType 'application/json; charset=utf-8' -Body ([Text.Encoding]::UTF8.GetBytes($body)) -TimeoutSec 180
$r.response
这是一组演示值,不是适合所有机器的最佳配置。第一轮只改 temperature,第二轮恢复温度再改 num_predict;比较上下文时保持资料与其他设置一致。
五、输出限制与截断
num_predict 用于限制生成 token 数,不是汉字数。设置太小可能截断 JSON 或一句尚未结束的话;过大也不代表模型一定会用完。需要结构化输出时,同时检查返回值是否能解析和是否包含全部必要字段。
| 现象 | 优先检查 |
|---|---|
| JSON 只有半截 | 输出限制、结束原因与原始响应 |
| 回答越来越啰嗦 | 任务范围、格式和输出约束 |
| 长文加入后变慢 | 上下文开销、资源占用与加载 |
| 低温度仍编造事实 | 资料是否足够,任务与验证规则是否明确 |
保存测试结果,不只保存最终参数。换模型后重新测试,旧模型适用的数值不一定适合新模型。
六、常见问题与排错
温度设为 0 就能完全复现吗?
不能把它当跨版本、跨硬件的绝对一致承诺。固定条件并重复测试,记录实际变化。
模型标称支持长上下文,为什么会卡?
模型能力上限与机器可承担的运行开销不同。减少输入、降低并发,再检查内存和显存,而不是强行用满上限。
参数改完没效果怎么办?
确认设置作用于实际请求,没有被客户端或模型配置覆盖。先用最小 API 请求隔离界面因素。
参数说明见 Ollama Modelfile 文档,请求选项见 Generate API。比较方法可配合提示词评测。