OpenCode 源码解析 · 第 7 讲
OpenCode 源码解析 第 7 讲:Provider 模型抽象层——统一 20+ AI 模型的"翻译官" 基于 dev 分支源码 · 2026-07-13 一、Provider 层:OpenCode 的"模型翻译官" 前六讲我们覆盖了 OpenCode 的整体架构、CLI 入口、Session 核心、Server 网络层、Plugin 插件系统和 Tool 工具注册。这一讲进入 Provider 模型抽象层 ——这是 OpenCode 连接 20+ 个 AI 模型的桥梁,也是决定"哪个模型能做什么"的核心组件。 📦 本讲核心文件 packages/opencode/src/provider/provider.ts (1981 行)— Provider 服务核心 packages/opencode/src/provider/transform.ts (1561 行)— 模型变体与消息变换 packages/opencode/src/provider/auth.ts (229 行)— 认证抽象 packages/opencode/src/provider/error.ts (188 行)— 错误解析 packages/core/src/provider.ts (~30 行)— V2 Provider Schema packages/core/src/model.ts (~40 行)— V2 Model Schema packages/core/src/models-dev.ts (~200 行)— models.dev 目录拉取 Provider 模块总计约 4200 行 二、Provider 系统的三层架构 OpenCode 的 Provider 系统采用三层设计: Schema 定义层 (核心数据结构)、 目录发现层 (models.dev 自动发现)和 运行时适配层 (SDK 加载与请求变换)。 Schema 定义层 (packages/core/src/) ⬇️ ProviderV2.ID / ModelV2.ID / Info / Api 目录发现层 (models-dev.ts) ⬇️ 拉取 models.dev → 本地缓存 → 合并配置 运行时适配层 (provider.ts 1981 行) ⬇️ BUNDLED_PROVIDERS / CustomLoader / resolveSDK LanguageModelV3 — AI SDK 统一接口 三、BUNDLED_PROVIDERS:20+ AI SDK 的统一映射 在 provider.ts 第 105 行附近,定义了一个 BUNDLED_PROVIDERS 字典,将 npm 包名映射到 AI SDK 的工厂函数: const BUNDLED_PROVIDERS: Record<string, () => Promise<(opts: any) => BundledSDK>> = { "@ai-sdk/amazon-bedrock": () => import("@ai-sdk/amazon-bedrock") .then((m) => m.createAmazonBedrock), "@ai-sdk/anthropic": () => import("@ai-sdk/anthropic") .then((m) => m.createAnthropic), "@ai-sdk/azure": () => import("@ai-sdk/azure") .then((m) => m.createAzure), "@ai-sdk/google": () => import("@ai-sdk/google") .then((m) => m.createGoogleGenerativeAI), "@ai-sdk/openai": () => import("@ai-sdk/openai") .then((m) => m.createOpenAI), "@ai-sdk/openai-compatible": () => import("@ai-sdk/openai-compatible") .then((m) => m.createOpenAICompatible), "@o…
阅读全文:OpenCode 源码解析 第 7 讲