Ollama 中修改模型默认 context length,本质上是通过 num_ctx 参数控制模型输入窗口大小。这个参数既可以在 Modelfile 中设定为默认值,也可以在每次 API 请求时临时覆盖。两种方式都不需要重新拉取模型镜像,也不会触碰客户端已经保存的对话历史。
修改 Ollama 模型默认 context length 的可靠方式是编写 Modelfile,设置 PARAMETER num_ctx 后使用 ollama create 生成新模型;也可以运行时在 API 请求中指定 options.num_ctx。Ollama 自身不存储对话历史,历史记录位于客户端(如 Open WebUI、自定义应用)的数据库中,因此重新拉取模型或创建新模型不会导致历史丢失。最终生效情况可以通过 ollama show 或超长文本测试确认。
修改 context length 的两种方式
第一种方式,临时指定 context length:在调用 /api/generate 或 /api/chat 时,在请求体的 options 字段中加入 "num_ctx": 4096。例如:
curl http://localhost:11434/api/generate -d '{
"model": "llama2",
"prompt": "一段长文本...",
"options": {
"num_ctx": 4096
}
}'这种方式只对单次请求生效,适合临时测试或按需调整。第二种方式,修改模型默认值:用原模型为基础创建新模型,将新的 context length 写入 Modelfile。
修改默认 context length 的配置步骤
操作步骤是:先编写一个 Modelfile,指定要基于的原始模型,并设置 num_ctx 参数。例如,将 llama2 的默认上下文长度改为 4096:
FROM llama2
PARAMETER num_ctx 4096保存为 Modelfile 后,执行 ollama create my-llama2 -f Modelfile。之后使用 ollama run my-llama2 或调用该模型名时,默认上下文长度即为 4096。可以用 ollama show my-llama2 查看参数是否生效,或输入一段超过 2048 token 的长文来确认模型能够正确处理。
如果需要恢复原模型,只需要继续使用原来的 llama2 名称,不会影响新模型。若想让修改后的配置成为全局默认,需要基于原模型重新创建新模型;Ollama 没有直接修改已有模型的命令,所以 ollama create 是唯一路径。
对话历史存在哪里
Ollama 本身是无状态的服务端,每次请求之间不保留任何对话上下文。对话历史要么由客户端应用(如 Open WebUI、Chatbox、自研前端)保存,要么由调用方在请求中拼接历史消息后提交给模型。因此,无论你修改模型配置、创建新模型,还是重新拉取原始模型,客户端数据库里保存的对话记录都不会受到影响。
如果你使用的是自定义脚本,只要脚本在每次请求时把历史消息作为 messages 或 prompt 的一部分提交,那么历史数据全部保留在脚本的变量或文件里。验证方式很简单:修改 context length 后,打开旧对话继续提问,历史记录和模型行为都会保留。如果历史确实丢了,问题出在客户端,而不是 Ollama。
重新拉取模型的边界
“重新拉取镜像”在 Ollama 语境中对应 ollama pull 命令。如果模型文件本身没有变化,重复拉取通常只是检查本地文件是否完整,并不会覆盖你基于它创建的派生模型,也不会删除客户端历史。但如果你在拉取后重建了同名模型(例如先删除再拉取),那么基于旧模型创建的 my-llama2 仍然存在,不会自动更新。
需要特别注意的边界是:如果你直接把 FROM llama2 改成 FROM my-llama2 并再次创建,会出现模型嵌套依赖。建议始终从官方原模型构建,避免命名冲突。另外,num_ctx 参数只影响模型输入窗口,对输出令牌数没有直接约束;输出长度需要同时设置 num_predict 或 options.num_predict。