03 多模型路由与故障转移
学习目标
本章要解决什么问题:Cline 如何在 40+ 模型提供商之间实现统一抽象?Plan 和 Act 模式如何使用不同模型?
前置知识
本章涉及多模型适配的通用原理,建议先阅读:
下文假设你已理解统一模型抽象层和故障转移机制,直接聚焦 Cline 的具体实现。
项目实践
40+ 提供商的统一抽象
Cline 通过 createHandlerForProvider 工厂方法支持 40+ 个提供商。每个提供商有独立的 handler 类(如 AnthropicHandler、OpenAiHandler),统一实现相同的接口。
ModelInfo 元数据模型:
每个模型通过 ModelInfo 接口定义元数据:
contextWindow:上下文窗口大小maxTokens:最大输出 Token 数supportsImages:是否支持图像输入supportsPromptCache:是否支持提示词缓存apiFormat:API 格式(区分OPENAI_RESPONSES等)
Plan/Act 独立模型
Cline 允许 Plan 模式和 Act 模式使用不同的模型提供商和模型:
Plan 模式:使用便宜的模型(如 GPT-4o-mini)做架构设计Act 模式:使用能力强的模型(如 Claude Sonnet 4.5)执行代码设计启示:规划任务对推理能力要求不高,但对成本敏感。将模型选择与任务类型解耦,可以在不牺牲质量的前提下显著降低成本。
提供商配置
提供商配置在 src/shared/api.ts 中,通过 ApiProvider 联合类型(47 个选项)定义所有支持的提供商类型。新增提供商需要:
- 在联合类型中添加新的提供商标识
- 实现对应的 handler 类
- 注册到工厂方法
问题与规避
| 陷阱 | 场景 | 对策 |
|---|---|---|
| 模型不支持特定功能 | 图像模型不支持文本工具 | 通过 ModelInfo 元数据提前判断,不支持的工具不发送给该模型 |
| API 格式不兼容 | 不同提供商的流式响应格式不同 | 每个 handler 内部适配为统一的流式接口 |
| 提示词缓存未命中 | 切换模型后缓存失效 | supportsPromptCache 标记控制是否启用缓存 |
设计取舍
统一抽象 vs 提供商专用优化
| 方案 | 优势 | 代价 |
|---|---|---|
| 统一抽象 | 新增提供商成本低,核心逻辑不受影响 | 无法充分利用特定提供商的独特能力 |
| 提供商专用 | 最大化模型能力 | 维护成本高,切换困难 |
Cline 选择统一抽象为主,专用适配为辅:核心工具执行走统一接口,但对 OpenAI Responses API 等特殊格式有专用处理路径(useNativeToolCalls)。
参考来源
- Cline 源码:
apps/vscode/src/core/api/index.ts - Cline 源码:
apps/vscode/src/shared/api.ts