
issue: global `num_ctx` is ignored
快速结论:在 Open WebUI 中,全局设置的 num_ctx 参数不会传递给后端请求,导致模型实际运行时始终使用默认上下文长度(通常为 4096)。优先排查是否仅对模型、用户或对话级别的 num_ctx 设置生效,而全局设置被忽略。
问题场景
用户在使用 Open WebUI v0.9.6 + Ollama 0.30.10(Docker 部署)时,通过“管理面板-设置-默认设置”中将全局 num_ctx 设置为较大值(如 120000),但实际运行模型(如 gemma4:12b 或 llama3.2:3b)时,总 token 数仍显示为 4096。通过浏览器开发者工具查看 completions 请求的 params 字段,发现其中缺少 num_ctx 参数。而单独在模型、用户或对话级别设置 num_ctx 后,请求中会正确携带该参数并生效。
报错原文
# 浏览器开发者工具中 completions 请求的 params 字段截图显示
# 全局设置时:params 中无 num_ctx
# 模型/用户/对话级别设置时:params 中包含 "num_ctx": 3825552
# 实际行为描述
Global num_ctx does absolutely nothing. Only per model, per user, and per chat num_ctx config take effect.
原因分析
可能原因:在 Open WebUI 的前端或后端逻辑中,全局 num_ctx 设置未被正确传递到最终发送给 Ollama 的 API 请求中。代码中可能缺少将全局默认值回退到请求参数的分支处理,导致当模型、用户和对话级别的 num_ctx 均为“Default”时,请求中不附带 num_ctx,从而使 Ollama 使用其自身的默认值(通常为 4096)。与 #16624、#11568 等问题类似,属于上下文长度参数传播问题。
环境排查
- Open WebUI 版本:v0.9.6(Docker 安装)
- Ollama 版本:0.30.10
- 系统:Devuan 6 (Debian 13)
- 浏览器:Brave 1.91.175
- 后端:使用 Vulkan 或 CPU 均可复现
- 模型:
gemma4:12b、llama3.2:3b(其他模型也可能受影响) - Function Calling 设置:设置为 Native(全局或模型级别)
解决步骤
- 确认问题可复现:在管理面板“设置-默认设置”中,将全局
num_ctx修改为明显大于 4096 的值(如 120000),保存后开始新对话。打开浏览器开发者工具,查看发送给 Ollama 的completions请求,检查params中是否包含num_ctx字段。若不包含,则确认问题存在。 - 确认仅为全局设置失效:在特定模型的“高级参数”中,将
num_ctx从“Default”改为一个任意较大值(如 3825552),再次发起请求。检查请求params中应包含num_ctx: 3825552,且模型会正确使用此上下文长度。 - 临时解决措施:在 Issue 被修复前,可优先在模型级别或用户级别设置
num_ctx,而非依赖全局设置。(可优先尝试) - 检查更新:Issue 已标记为“Should be addressed in dev!”,建议升级到最新的开发版本或等待下一个正式版本发布(v0.9.6 之后的版本)。(可优先尝试)
验证方法
在修复版本下,重复上述“问题可复现”步骤:全局设置一个较大的 num_ctx 值(如 120000),发起请求后检查浏览器开发者工具中的 completions 请求,确认 params 中包含 num_ctx: 120000,并且模型实际使用的上下文长度正确反映此值(可通过查看模型返回的 token 使用情况或观察模型行为来验证)。



