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 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> }
运行时切换
# 启动时指定模型 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 使用和成本
- Blade 源码
- Vercel AI SDK
- Models.dev API
本文由 青雲 (echoVic) 撰写,基于 blade-code 的实践经验。 如有问题或建议,欢迎在 GitHub Issues 讨论。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/274678.html