Blade 多模型 AI 系统架构:从统一接口到智能路由
blade-code 系列第 3 篇。本文基于 Blade 源码(2026年2月)探讨多模型 AI 系统的架构设计。
为什么要支持多模型?
构建 AI 应用时,第一个问题往往是:"用哪个模型?"
- OpenAI GPT-4.5?强大但贵
- Claude Opus 4?代码能力强但有速率限制
- DeepSeek V3?便宜但稳定
- 智谱 GLM-4.7?需配置
我的答案是:全都要。
blade-code 从第一天就设计为多模型架构,基于 Vercel AI SDK 构建统一接口,支持 80+ 主流模型无缝切换。
单一模型的问题
| 问题 | 影响 |
|---|---|
| 成本高 | GPT-4.5 输入 $15/M tokens |
| 速率限制 | Claude 每分钟请求数有限 |
| 服务中断 | OpenAI 宕机时干瞪眼 |
| 能力差异 | 不同任务需要不同模型 |
多模型架构能解决这些问题:
成本优化 — 简单任务用便宜模型,复杂任务用强大模型:
// 简单任务
const summary = await model.generate('总结这段文字', {
model: 'deepseek-chat' // $0.28/M input
});
// 复杂任务
const architecture = await model.generate('设计系统架构', {
model: 'claude-opus-4' // $15/M input
});
高可用 — 主模型挂了自动切换:
const response = await model.generate(prompt, {
model: 'gpt-4.5',
fallback: ['claude-sonnet-4', 'deepseek-chat']
});
统一接口设计
架构概览
graph TB
subgraph "Blade ModelManager"
MM[ModelManager]
MM --> |管理| P1[OpenAI Provider]
MM --> |管理| P2[Anthropic Provider]
MM --> |管理| P3[Google/Gemini Provider]
MM --> |管理| P4[DeepSeek Provider]
MM --> |管理| P5[Azure Provider]
end
subgraph "Vercel AI SDK"
AI[AI SDK Core]
AI --> |抽象| CP[createOpenAICompatible]
AI --> |抽象| CA[createAnthropic]
AI --> |抽象| CD[createDeepSeek]
AI --> |抽象| CG[createGoogleGenerativeAI]
end
subgraph "统一接口"
PI[IChatService Interface]
PI --> |chat| GEN[生成响应]
PI --> |streamChat| STR[流式响应]
end
P1 -.-> |实现| PI
P2 -.-> |实现| PI
P3 -.-> |实现| PI
P4 -.-> |实现| PI
IChatService 统一接口
所有模型提供商都实现统一的 IChatService 接口:
// packages/agent-sdk/src/services/ChatServiceInterface.ts
export interface IChatService {
chat(messages: Message[], tools?: Tool[], signal?: AbortSignal): Promise<ChatResponse>;
streamChat(messages: Message[], tools?: Tool[], signal?: AbortSignal): AsyncGenerator<StreamChunk>;
getConfig(): ChatConfig;
updateConfig(newConfig: Partial<ChatConfig>): void;
}
export interface ChatResponse {
content: string;
reasoningContent?: string; // Thinking 模型的推理过程
toolCalls?: ChatCompletionMessageToolCall[];
usage?: UsageInfo;
}
export interface UsageInfo {
promptTokens: number;
completionTokens: number;
totalTokens: number;
reasoningTokens?: number;
cacheCreationInputTokens?: number; // Anthropic: 缓存创建
cacheReadInputTokens?: number; // Anthropic: 缓存读取
}
Provider 工厂
基于 Vercel AI SDK 的 Provider 工厂:
// packages/agent-sdk/src/services/VercelAIChatService.ts
private createModel(config: ChatConfig): LanguageModel {
const { provider, apiKey, baseUrl, model } = config;
switch (provider) {
case 'anthropic':
return createAnthropic({ apiKey, baseURL: baseUrl })(model);
case 'gemini':
return createGoogleGenerativeAI({ apiKey, baseURL: baseUrl })(model);
case 'deepseek':
return createDeepSeek({ apiKey, baseURL: baseUrl })(model);
default:
// OpenAI 兼容接口(覆盖 100+ 模型)
return createOpenAICompatible({ name: 'custom', apiKey, baseURL: baseUrl })(model);
}
}
模型管理
ModelManager
// packages/agent-sdk/src/agent/ModelManager.ts
export class ModelManager {
private chatService!: IChatService;
private currentModelId?: string;
async initialize(modelId?: string): Promise<IChatService> {
const modelConfig = this.resolveModelConfig(modelId);
await this.applyModelConfig(modelConfig);
return this.chatService;
}
async switchModelIfNeeded(modelId: string): Promise<boolean> {
if (modelId === this.currentModelId) return false;
const modelConfig = this.config.models?.find((m) => m.id === modelId);
if (!modelConfig) return false;
await this.applyModelConfig(modelConfig);
return true;
}
}
运行时切换
# 启动时指定模型
blade --model=claude-opus-4 "优化代码"
# 运行时切换
> /model claude-sonnet-4
✅ 已切换到 claude-sonnet-4
# 仅当前轮使用指定模型
> /model once deepseek-chat 总结这段代码
成本优化
Token 追踪
Blade 实时追踪每次请求的 Token 使用:
// packages/agent-sdk/src/services/ChatServiceInterface.ts
export interface UsageInfo {
promptTokens: number;
completionTokens: number;
totalTokens: number;
reasoningTokens?: number;
cacheCreationInputTokens?: number;
cacheReadInputTokens?: number;
}
模型成本对比
| 模型 | 输入 ($/M) | 输出 ($/M) | 特点 |
|---|---|---|---|
| gpt-4.5 | $15.00 | $75.00 | 旗舰 |
| gpt-4o | $2.50 | $10.00 | 均衡 |
| gpt-4o-mini | $0.15 | $0.60 | 轻量 |
| claude-opus-4 | $15.00 | $75.00 | 代码最强 |
| claude-sonnet-4 | $3.00 | $15.00 | 性价比 |
| deepseek-chat | $0.28 | $1.10 | 性价比王 |
| deepseek-reasoner | $0.55 | $2.19 | 推理 |
| groq-llama-4 | $0.20 | $0.20 | 高速 |
Prompt Caching
Anthropic/DeepSeek 支持 prompt caching,缓存命中时成本降低 90%:
| 提供商 | 正常输入 | 缓存命中 | 节省 |
|---|---|---|---|
| Anthropic | $5/M | $0.50/M | 90% |
| OpenAI | $1.75/M | $0.175/M | 90% |
| DeepSeek | $0.28/M | $0.028/M | 90% |
核心设计原则
- 抽象优于具体 — Vercel AI SDK 隔离具体实现
- 组合优于继承 — 通过组合不同 Provider 实现多模型支持
- 配置优于硬编码 — 模型选择、降级策略都可配置
- 监控优于盲目 — 实时追踪 Token 使用和成本
参考资源
本文由 青雲 (echoVic) 撰写,基于 blade-code 的实践经验。 如有问题或建议,欢迎在 GitHub Issues 讨论。