
Feature Request: Expose VRAM-Adjusted Runtime Context Window via API
快速结论:该 Feature Request 请求在 Ollama API 中暴露运行时根据 VRAM 调整后的实际上下文窗口大小。问题已在 /api/ps 端点中找到解决方案,该端点已返回 context_length 字段,可直接获取运行时实际值。
问题场景
开发者在基于 Ollama 构建工具(如 aider AI 辅助编程工具)时,需要获取模型实际的可用上下文窗口大小,以便实现上下文感知的聊天历史轮换,避免历史文件超过模型实际能加载的上限。当前 /api/show 返回的是模型配置的最大上下文窗口(如 131072),而运行时 Ollama 会根据 VRAM 限制将其缩小(如 20992),这个值仅在日志中输出,未通过 API 暴露。
报错原文
llama_context: n_ctx_seq (20992) < n_ctx_train (131072) -- the full capacity of the model will not be utilized
以及 /api/show 返回的最大上下文窗口(可能误导):
curl -s http://localhost:11434/api/show -d '{"name": "llama3.3:70b"}' \
| jq '.model_info | to_entries[] | select(.key | endswith("context_length")) | .value'
# Returns: 131072
原因分析
Ollama 在加载模型时会根据可用 VRAM 动态调整实际上下文窗口大小,但该值(n_ctx_seq)仅在服务端日志中记录,未通过 API 暴露。开发工具(如 aider)需要此值来设置准确的历史轮换阈值,而非使用不可达到的理论最大值。最终发现 /api/ps 端点实际上已经返回了运行时上下文长度,解决了此需求。
环境排查
- Ollama 版本:2.2.40(报告时)
- API 端点:
/api/show(返回配置最大值)、/api/ps(返回运行时实际值) - 模型架构:llama、qwen、gemma 等
- 运行实例:多个 Ollama 实例(端口 11434、11435、11436)
解决步骤
- 使用
ollama ps命令行查看运行时上下文长度:
$ ollama ps→ 查看CONTEXT列的值(如 20992) - 通过 API 使用
/api/ps端点获取运行时上下文长度:
curl -s localhost:11434/api/ps | jq '.models[]|select(.name=="llama3.3:70b").context_length'
该命令返回实际可用的上下文窗口大小(如 20992),而非配置最大值。 - 如果开发工具需要更细粒度的输入/输出上下文分解,目前 API 未直接提供
runtime_input_context_length和runtime_output_context_length字段,可能需要间接计算或等待未来更新。
验证方法
运行 curl -s localhost:11434/api/ps 并检查返回的 context_length 字段值是否与 ollama ps 命令行显示的 CONTEXT 列一致。若一致,则表示已正确获取运行时 VRAM 调整后的上下文窗口。



