跳转到内容

03 多模型路由与故障转移

学习目标

本章要解决什么问题:Cline 如何在 40+ 模型提供商之间实现统一抽象?Plan 和 Act 模式如何使用不同模型?

前置知识

本章涉及多模型适配的通用原理,建议先阅读:

下文假设你已理解统一模型抽象层和故障转移机制,直接聚焦 Cline 的具体实现。


项目实践

40+ 提供商的统一抽象

Cline 通过 createHandlerForProvider 工厂方法支持 40+ 个提供商。每个提供商有独立的 handler 类(如 AnthropicHandlerOpenAiHandler),统一实现相同的接口。

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 个选项)定义所有支持的提供商类型。新增提供商需要:

  1. 在联合类型中添加新的提供商标识
  2. 实现对应的 handler 类
  3. 注册到工厂方法

问题与规避

陷阱场景对策
模型不支持特定功能图像模型不支持文本工具通过 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