ApiKey在OpenAi 上面是否可以支持 启用模型限制
发现目前 ApiKey 中的模型限制,在OpenAi 上面是不生效的...
也让分析下了下:
核心结论:openaiRoutes.js(处理 /openai/* 路由)中完全没有任何 enableModelRestriction 或 restrictedModels 的引用。客户端通过此路由调用 OpenAI 模型时,模型限制功能不会被执行,请求会被原样转发到上游 OpenAI / ChatGPT Codex API。
证据
grep 结果显示(openaiRoutes.js 共 1415 行):
$ grep -c "enableModelRestriction|restrictedModels" openaiRoutes.js 0
而 handleResponses(src/routes/openaiRoutes.js:293)的完整链路里没有模型限制检查:
- src/routes/openaiRoutes.js:304 读取 apiKeyData
- src/routes/openaiRoutes.js:306 只校验了 OpenAI 权限(checkOpenAIPermissions)
- src/routes/openaiRoutes.js:388 调用 getOpenAIAuthToken → 调度器选账户
- src/routes/openaiRoutes.js:397 对 openai-responses 账户直接转 openaiResponsesRelayService.handleRequest
- 该中继服务 (src/services/relay/openaiResponsesRelayService.js:68) 同样没有模型限制检查
对比其他路由 — 模型限制只在跨协议路由中实现
┌──────────────────────────────────────────────────────┬──────────────┬──────────────────────────────────────────┐ │ 路由文件 │ 模型限制检查 │ 位置 │ ├──────────────────────────────────────────────────────┼──────────────┼──────────────────────────────────────────┤ │ src/routes/api.js (Claude 原生) │ ✅ 有 │ src/routes/api.js:184-199 │ ├──────────────────────────────────────────────────────┼──────────────┼──────────────────────────────────────────┤ │ src/routes/openaiClaudeRoutes.js (OpenAI→Claude) │ ✅ 有 │ src/routes/openaiClaudeRoutes.js:213-225 │ ├──────────────────────────────────────────────────────┼──────────────┼──────────────────────────────────────────┤ │ src/routes/openaiGeminiRoutes.js (OpenAI→Gemini) │ ✅ 有 │ src/routes/openaiGeminiRoutes.js:263-274 │ ├──────────────────────────────────────────────────────┼──────────────┼──────────────────────────────────────────┤ │ src/routes/openaiRoutes.js (OpenAI 直通 / Responses) │ ❌ 无 │ — │ ├──────────────────────────────────────────────────────┼──────────────┼──────────────────────────────────────────┤ │ src/services/relay/openaiResponsesRelayService.js │ ❌ 无 │ — │ └──────────────────────────────────────────────────────┴──────────────┴──────────────────────────────────────────┘
控制条件都相同:仅当 apiKeyData.enableModelRestriction === true 且 restrictedModels 非空时生效,命中即返回 403 model_not_allowed。
你这个 Key 的实际行为
lingchen 启用了 enableModelRestriction:true,限制列表为 ["gpt-5.5", "gpt-5.6-sol"],并且绑定了 openaiAccountId。客户端只要打到 /openai/v1/responses 或 /openai/responses/compact,两个受限模型都能正常调用——配置不生效。
只有以下情况才会被限制:
- 客户端走 /v1/chat/completions → openaiClaudeRoutes.js 转换路径(如果账户映射到 Claude)
- 客户端走 Claude 原生 /api/v1/messages(api.js)
Source: Wei-Shaw/claude-relay-service