背景
开启 Proxy 后,用户通过 takeover 机制不再感知 URL 和 API Key,但会指定 model 来选择使用的模型。多个 provider(如 coding plan)可能都支持同一个模型,这为模型级别的容灾提供了基础。
当前问题
现有的故障转移是 provider 级别 的:切换 provider 时会应用该 provider 的 model mapping,导致请求的模型名可能发生变化。
例如:
- qwen provider mapping:
claude-sonnet-4 → glm-4.7
- 方舟 provider mapping:
claude-sonnet-4 → minmax
当 qwen 失败切换到方舟时,请求的 model 从 glm-4.7 变成了 minmax,而方舟其实也支持 glm-4.7。
需求
支持 模型级别的故障转移:根据请求指定的 model,只切换到支持该模型的 provider。
请求: { model: "glm-4.7", ... }
↓
Proxy 查询: 哪些 provider 支持 glm-4.7?
- qwen: ✓
- 方舟: ✓
↓
qwen 失败 → 方舟接管 → 仍然请求 "glm-4.7"
实现建议
模型列表缓存(而非持久化)
provider 的模型列表可能随时间变化,建议:
- 内存级缓存模型列表(不写入数据库)
- 极低频率定时刷新(如每天一次或每周一次)
- 提供手动刷新命令:
cc-switch provider refresh-models <id>
- 或在 Proxy serve 时启动后台刷新任务
这样既避免数据库复杂度,又保持模型列表相对新鲜。
关联
- 已有
fetch-models 命令可获取模型列表,但目前只用于展示
- 可复用现有的模型扫描逻辑(OpenAI 兼容、Gemini 格式等)
背景
开启 Proxy 后,用户通过 takeover 机制不再感知 URL 和 API Key,但会指定 model 来选择使用的模型。多个 provider(如 coding plan)可能都支持同一个模型,这为模型级别的容灾提供了基础。
当前问题
现有的故障转移是 provider 级别 的:切换 provider 时会应用该 provider 的 model mapping,导致请求的模型名可能发生变化。
例如:
claude-sonnet-4 → glm-4.7claude-sonnet-4 → minmax当 qwen 失败切换到方舟时,请求的 model 从
glm-4.7变成了minmax,而方舟其实也支持glm-4.7。需求
支持 模型级别的故障转移:根据请求指定的 model,只切换到支持该模型的 provider。
实现建议
模型列表缓存(而非持久化)
provider 的模型列表可能随时间变化,建议:
cc-switch provider refresh-models <id>这样既避免数据库复杂度,又保持模型列表相对新鲜。
关联
fetch-models命令可获取模型列表,但目前只用于展示