
Ollama ignores num_ctx completely on the request.
快速结论:问题通常出现在使用 Ollama 的 OpenAI 兼容 API(例如 /v1/chat/completions)时,在请求顶层直接传入 num_ctx 参数。优先排查是否在 options 字段中嵌套传递该参数。
问题场景
用户通过 OpenAI 格式的 API 请求 Ollama(例如 POST http://ollama.local:11434/v1/chat/completions),并在 JSON body 顶层直接添加 "num_ctx": 16000。Ollama 版本为 0.30.7,环境为 Linux + Nvidia GPU。用户期望 num_ctx 应覆盖默认上下文长度,但观察到的实际上下文长度为 262144(非用户指定的 16000,也非本地模型文件中的设置)。
报错原文
2026-06-19T11:53:37-03:00 INFO Request:
POST http://ollama.local:11434/v1/chat/completions
-d '{
"model": "local.qwen-medium:low",
"messages": [
{
"role": "user",
"content": "How much is 2+2"
}
],
"stream": false,
"num_ctx": 16000
}'
Every 1,0s: ollama ps
local.qwen-medium:low aa0df067f0c6 36 GB 100% GPU 262144 4 minutes from now
原因分析
Ollama 的 OpenAI API 兼容层不支持在请求顶层直接声明 num_ctx 参数。该参数需嵌套在 options 字段内才能生效。因此,直接传入 "num_ctx": 16000 被忽略,Ollama 使用其自身决定的默认上下文长度(此处为 262144)。
环境排查
- Ollama 版本:0.30.7(确认后请升级到最新版本测试)
- 使用的 API 端点:
/v1/chat/completions(OpenAI 兼容格式) vs/api/chat(Ollama 原生格式) - 确认是否已设置环境变量
OLLAMA_CONTEXT_LENGTH(该变量可生效,但客户端请求优先级应更高)
解决步骤
- 修改 API 请求 JSON 结构:将
"num_ctx": 16000从顶层移到"options"对象内部。 - 示例修正后的请求体(仅显示差异部分):
{ "model": "local.qwen-medium:low", "messages": [ { "role": "user", "content": "How much is 2+2" } ], "stream": false, "options": { "num_ctx": 16000 } } - 可优先尝试:如果当前版本低于 0.30.7,建议升级到最新版后再次测试,因为该行为可能已在后续版本中优化。
- 如果问题仍然存在,尝试使用 Ollama 原生 API
/api/chat并同样使用options字段传入num_ctx。
验证方法
重新发送修正后的 API 请求,然后运行 ollama ps 命令检查正在运行模型的 CONTEXT 列。该值应显示为您指定的 num_ctx 值(例如 16000),而不是默认的 262144。



