不完整,也很难说“正确”。
从设计角度看,这个 _OPENAI_CONTEXT_WINDOWS 本质上是一个 ContextPolicy 的启发式配置表(heuristic),而不是权威数据源。
主要有几个问题:
1. OpenAI 官方并没有稳定保证这些数字
例如:
"gpt-4.1": 1_000_000,
"gpt-4.1-mini": 1_000_000,
"gpt-4.1-nano": 1_000_000,这些数字曾经出现在 OpenAI 文档和发布材料中。
但实际上:
API Gateway
Azure OpenAI
第三方代理
OpenRouter
LiteLLM
vLLM
DeepSeek Gateway
都可能限制得更小。
因此:
model == "gpt-4.1"并不一定意味着:
context_window == 1_000_0002. GPT-5 系列不准确
例如:
"gpt-5": 400_000,
"gpt-5-mini": 400_000,截至目前 OpenAI 并没有公开一个非常稳定的:
GPT-5 = 400k保证。
很多 SDK 或项目里写:
400_000其实是:
conservative guess而不是官方承诺。
3. OpenAI Compatible 模型根本不适用
你这个 Provider 明显支持:
DeepSeek
Qwen
Kimi
vLLM
Ollama
LM Studio但表里完全没有:
DeepSeek
deepseek-chat
deepseek-reasonerQwen
qwen3-235b-a22b
qwen3-30b-a3b
qwen3-14b
qwen3-8bKimi
kimi-k2
kimi-thinkingLlama
meta-llama/Llama-4-Maverick
meta-llama/Llama-4-ScoutGemma
gemma-3-27bMistral
mistral-large
magistralClaude (如果接 OpenRouter)
claude-sonnet-4
claude-opus-4所以对于 OpenAI Compatible Endpoint:
provider.context_window(model)大量返回:
None4. vLLM 场景尤其容易出错
假设:
vllm serve DeepSeek-V4启动参数:
--max-model-len 65536而模型原生支持:
128k此时:
deepseek-v4实际 Context:
65k不是:
128k更不是代码里写死的数字。
5. 最致命的问题:模型名 ≠ Context Window
例如:
同一个模型:
Qwen3-32B可能部署成:
--max-model-len 32768或者:
--max-model-len 65536或者:
--max-model-len 131072所以:
{
"Qwen3-32B": 131072
}严格来说就是错的。
更好的方案
很多 Agent Framework 现在采用:
第一层:动态探测
优先读取:
GET /models例如 OpenAI Compatible API:
{
"id": "deepseek-v4",
"context_length": 131072
}或者:
{
"max_context_length": 131072
}有些网关会返回。
第二层:Provider 特殊实现
例如:
class VLLMProvider:
async def context_window():
...读取:
GET /models返回:
{
"max_model_len": 65536
}第三层:静态表兜底
最后才:
_OPENAI_CONTEXT_WINDOWS = {
...
}作为 fallback。
如果我要维护这个项目
我会改成:
async def context_window(model):
# 1. runtime discover
discovered = await discover_context_window()
if discovered:
return discovered
# 2. static fallback
return STATIC_CONTEXT_WINDOWS.get(model)而不是完全依赖:
_OPENAI_CONTEXT_WINDOWS因为对于你代码支持的场景(OpenAI、DeepSeek、Qwen、Kimi、vLLM、Ollama、LM Studio),运行时探测才是真正可靠的方案,静态表只能作为保底机制。
所以结论是:
❌ 不完整(缺少大量主流 OpenAI Compatible 模型)
❌ 不一定正确(GPT-5 等数字并非稳定官方保证)
❌ 对 vLLM/Ollama 部署经常失真
✅ 作为 OpenAI 官方模型的保守 fallback 表还算合理
✅ 应该改成“动态探测 + 静态兜底”的架构,而不是把它当作权威来源。