/v1/models 和看板「模型库」的数据按以下优先级获取,目的是和官方桌面客户端此刻显示的清单保持一致:
- 官方动态接口
/algo/api/v2/model/list:需要账号,返回官方当前的清单。每次获取成功都会写入磁盘缓存 - 磁盘缓存
accounts/models-cache-<区域>.json:上次从动态接口获取成功的结果,7 天内有效。容器重启或上游暂时不可用时先用它,不必退回到可能已经过时的内置快照 - 本机官方客户端的模型目录缓存
~/.qoder*/.models/<uid>/catalog-v6:离线也能用 - 仓库内置的快照
qoder_catalog_cn.json/qoder_catalog_intl.json:可以用python _refresh_catalog.py从本机客户端更新
清单在内存中缓存 5 分钟。想立即重新获取,调用 GET /models/refresh(需要 API Key)。
- 清单以动态接口返回的为准,国内版和国际版各不相同
- 官方标记为不可用(
enable=false)的模型也会列出来,并附上官方给出的原因(disabled_reason) - 官方没有提供的字段(例如最大输出长度)不会填写,网关不编造数据
- 当前使用的是哪个快照,可以通过
/v1/models的catalog_source字段查看
每个模型的主要字段:
| 字段 | 含义 |
|---|---|
id |
官方模型名,客户端里填这个 |
upstream_key / aliases |
内部 key 及其他可用写法 |
name_local / description |
本地化名称和官方介绍 |
context_windows / context_window_default |
可选的上下文窗口(如 200K / 400K / 1M)及默认值 |
reasoning_efforts / reasoning_default_effort |
合法的思考档位及默认档位 |
price_factor / price_factor_peak / price_factor_valley / off_peak / off_peak_active_now |
计费倍率和峰谷时段 |
enabled / disabled_reason |
是否可用;不可用时附官方原因 |
realm / realm_exclusive |
所属区域;是否只在这个区域提供 |
以下写法都能识别为同一个模型:
| 写法 | 示例 |
|---|---|
| 官方模型名(推荐) | Qwen3.8-Max |
| 内部 key | qmodel_38max |
| 展示 id | qmodel_38max (Qwen3.8-Max) |
| 小写别名 | qwen3.8-max |
注意:同一个 key 在两个区域可能对应不同的模型。例如 mmodel 在国内版是 MiniMax-M2.7,在国际版是 MiniMax-M3。
一次请求走哪个区域,按以下优先级决定:
- 请求里显式指定:
?realm=查询参数、Key 绑定的出口、X-Realm请求头 - 自动选区(
QD_AUTO_REALM=1,默认开启):- 模型只在某一个区域提供时,走那个区域。只在国内版提供的有
q37fmodel、gm51model;只在国际版提供的有ultimate、performance、efficient、smodel、cmodel - 当前区域没有可用账号时,改走另一个区域
- 模型只在某一个区域提供时,走那个区域。只在国内版提供的有
- 看板顶部的全局出口
- 自动选区只在能明确判断时才切换区域:两个区域都有的同名模型,始终留在当前区域
- 实际走的区域会写进响应头
X-Qoder-Realm,切换原因写进X-Qoder-Realm-Reason(取值为model_missing或no_account) - 看板「最近请求」里每条请求都会显示实际出口
- 想同时查看两个区域的模型:
GET /v1/models?merge_realms=1
部分模型在低谷时段(22:00–08:00,UTC+8)有折扣,例如:
| 模型 | 峰价 | 折扣 |
|---|---|---|
| Qwen3.8-Max | 0.50x | 错峰 4 折 |
| Qwen3.7-Max | 0.50x | 错峰 2 折 |
| Qwen3.7-Plus | 0.10x | 错峰 4 折 |
具体价格以 /v1/models 为准。off_peak_active_now 表示当前是否处于低谷时段。看板在低谷时段会把价格高亮显示。
官方上游的思考参数是 parameters.reasoning_effort,但每个模型支持的档位不同。上游收到不支持的档位时不会报错,而是悄悄改用默认档位。 所以网关会先按官方目录把档位归一化:
- 档位合法:原样透传
- 档位不合法:改为最接近的合法档位;距离相同时偏向模型的默认档位。日志里会记录这次调整
- 模型只支持开关思考、没有档位表时:不下发档位,只保留
none(关闭思考) - 模型完全没有思考配置(例如
auto):原样透传
示例(以官方目录为准):
| 模型 | 支持的档位 | 默认 | 归一化示例 |
|---|---|---|---|
| Qwen3.8-Max / Qwen3.8-Flash | low / medium / xhigh |
medium |
high → medium,max → xhigh |
| DeepSeek-Flash | low / high / max |
max |
medium → high,xhigh → max |
| Qwen3.7-Plus | 只能开或关 | — | 只有 none 生效 |
请求里的写法支持 reasoning_effort、reasoning.effort、thinking.effort 或 thinking.level。
Anthropic 入口的额外规则:
- 档位按
thinking.effort→output_config.effort→thinking.budget_tokens的顺序取第一个有效值。Claude Code 对第三方模型名发送的是thinking={"type":"adaptive"}加output_config.effort,因此按后者处理 thinking.budget_tokens按区间映射:≤1024 为minimal,≤4096 为low,≤16384 为medium,≤32768 为high,更大为maxthinking.type为disabled时不下发档位,由上游按模型默认处理
