
AI SDK Provider 抽象架构深度解析AI Functions、V4 模型规范与 Provider 实现【免费下载链接】aiThe AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and agents项目地址: https://gitcode.com/GitHub_Trending/ai/ai导读本文基于 AI SDK 仓库中的架构文档 architecture/provider-abstraction.md 展开系统讲解 AI SDK 中AI 函数AI functions→ 模型规范Model Specification→ 提供方实现Provider Implementations三层抽象如何彼此连接。全文从高层架构图出发逐一剖析语言模型、嵌入模型、图像模型、重排序模型、转录模型、语音模型、视频模型共七种 V4 模型类型并深入reasoning参数的两种映射策略Effort 映射与 Budget 映射及其在 Google、Anthropic 提供方中的真实落地。读完本文你将能读懂任意 Provider 包中*LanguageModel、*EmbeddingModel等实现类与 AI SDK 核心函数的调用关系并掌握为模型新增reasoning能力支持的完整契约。一、高层架构三个角色、一条依赖链AI SDK 的 Provider 抽象由三个层次构成职责清晰、单向依赖AI 函数AI Functions面向用户的语言层函数例如streamText、generateText、embed等位于 packages/ai/src模型规范Model Specification以LanguageModelV4为代表的 V4 接口族位于 packages/provider/src定义模型应该长什么样Provider 实现Provider Implementations各提供方OpenAI、Anthropic、Google、Mistral、Cohere、Fal 等对 V4 接口的具体实现类。三者关系可用如下类图概括从源码结构看这套抽象在类型层面通过specificationVersion字段实现可演进、向后兼容的版本化机制。以 language-model-v4.ts 为例每个 V4 模型都必须声明specificationVersion: v4—— 声明自己实现的接口版本使 SDK 侧可以用判别联合discriminated union同时支持未来版本provider—— 提供方 ID用于日志modelId—— 提供方特定的模型 ID用于日志一个或多个以do前缀命名的执行方法如doGenerate、doStream、doEmbed、doRerank。关于do前缀所有执行方法都以do开头如doGenerate这是刻意的命名约定——防止用户直接误用底层方法确保用户总是经由generateText、streamText等 AI 函数进入调用链。二、模型类型全景V4 规范家族AI SDK 的 V4 规范并非单一接口而是按模态modality拆分为七种模型类型每种类型对应一个或多个 AI 函数。下表为全景概览模型类型规范接口对应 AI 函数典型 Provider 实现语言模型LanguageModelV4generateText、streamTextOpenAI、Anthropic、Google嵌入模型EmbeddingModelV4embed、embedManyOpenAI、Mistral图像模型ImageModelV4generateImageOpenAI、Google重排序模型RerankingModelV4rerankCohere、Amazon Bedrock转录模型TranscriptionModelV4transcribeOpenAI、Deepgram语音模型SpeechModelV4generateSpeechOpenAI、ElevenLabs视频模型VideoModelV4generateVideoFal、Replicate关于experimental_前缀如果你在当前代码库中找不到下面提到的某个函数它可能仅以experimental_前缀存在例如experimental_transcribe。这表示该 API 仍处于实验阶段稳定版本会在后续实现。三、语言模型LanguageModelV4语言模型用于从提示词或消息输入进行文本生成与结构化生成工作流。3.1 关联的 AI 函数generateText—— packages/ai/src/generate-text/generate-text.ts单次调用从语言模型生成完整文本结果streamText—— packages/ai/src/generate-text/stream-text.ts以增量方式流式产出语言模型输出。3.2 规范接口LanguageModelV4—— packages/provider/src/language-model/v4/language-model-v4.ts该接口除通用字段外还包含两项核心能力supportedUrls按媒体类型声明提供方原生支持的 URL 模式键为媒体类型模式如*/*、audio/*、video/*、application/pdf值为匹配 URL 路径的正则数组匹配针对小写 URL 进行。被匹配的 URL 由模型原生支持、不会被下载doGenerate(options)与doStream(options)分别承载非流式与流式生成。两个方法均接收 language-model-v4-call-options.ts 定义的LanguageModelV4CallOptions其关键字段包括字段说明prompt标准化的模型提示类型注意这不是用户直接使用的 promptAI SDK 会将 chat、instruction 等用户侧 prompt 映射为该格式从而在不破坏模型接口的前提下演进用户侧 APImaxOutputTokens最大生成 token 数temperature温度参数取值范围取决于提供方与模型stopSequences停止序列命中即停止生成topP/topK核采样 / Top-K 采样presencePenalty/frequencyPenalty存在惩罚 / 频率惩罚responseFormat输出格式text或jsonJSON 可选附带 JSON Schema 与名称/描述以引导模型seed随机采样种子支持时保证确定性问题结果tools/toolChoice可用工具与工具选择策略默认autoincludeRawChunks流中是否包含原始 chunk仅流式调用abortSignal/headers取消信号 / 附加 HTTP 头reasoning推理强度级别见下文专项章节providerOptions透传给提供方的附加选项可完全封装在提供方内部3.3 类图典型的 Provider 实现包括 OpenAIChatLanguageModel 与 AnthropicLanguageModel。3.4 专项reasoning参数的处理契约LanguageModelV4CallOptions上的reasoning字段控制模型在响应前执行多少推理取值如下provider-default、none、minimal、low、medium、high、xhighProvider 实现首先用ai-sdk/provider-utils导出的isCustomReasoning(reasoning)判断调用方是否传入了自定义值即除undefined和provider-default之外的任何值。若返回false无需任何动作若返回true则进入以下分支1.none—— 关闭推理。仅部分 Provider 支持彻底关闭其余 Provider 应发出 unsupported 警告。从 Anthropic 实现看none会被映射为thinking: { type: disabled }见 anthropic-language-model.ts而 Google 的 Gemini 3 无法完全关闭思考none会被映射为模型的最低思考级别见 google-language-model.ts。2. 其他任何取值 —— 映射到 Provider 原生配置有两种策略Effort 映射使用mapReasoningToProviderEffort通过effortMap将规范枚举映射为 Provider 特有的 effort 字符串。映射值若与请求级别不同则发出兼容性警告若该级别在映射表中不存在则发出unsupported 警告并返回undefinedBudget 映射使用mapReasoningToProviderBudget将规范枚举映射为绝对 token 预算。以模型的最大推理预算若无独立推理上限则取整体最大输出 token 数为基数乘以各级别百分比默认值minimal 2%、low 10%、medium 30%、high 60%、xhigh 90%并将结果钳制在minReasoningBudget默认 1024与maxReasoningBudget之间。各 Provider 可提供自定义百分比。在 API 层不支持推理配置的 Provider当isCustomReasoning返回true时同样应发出 unsupported 警告。源码级实现两个映射工具上述策略在 packages/provider-utils/src/map-reasoning-to-provider.ts 中实现isCustomReasoningL11-L18reasoning ! undefined reasoning ! provider-defaultmapReasoningToProviderEffortL29-L58查找effortMap[reasoning]缺失时推入 unsupported 警告并返回undefined映射值与请求值不一致时推入 compatibility 警告mapReasoningToProviderBudgetL78-L108默认百分比表DEFAULT_REASONING_BUDGET_PERCENTAGES定义于 L60-L66最终结果Math.min(maxReasoningBudget, Math.max(minReasoningBudget, Math.round(maxOutputTokens * pct)))。真实落地示例Google Gemini 3google-language-model.tsresolveGemini3ThinkingConfig通过mapReasoningToProviderEffort将规范级别映射到 Gemini 的thinkingLevel其 effortMap 为{ minimal: minimumThinkingLevel, low: low, medium: medium, high: high, xhigh: high }——xhigh被降级到highminimal则视模型取minimumThinkingLevel如gemini-flash-latest为low其余按版本解析Anthropicanthropic-language-model.ts支持自适应思考的模型走 Effort 映射minimal/low → low、medium → medium、high → high、xhigh → xhigh 或 max得到thinking: { type: adaptive, display: summarized }否则走 Budget 映射以maxOutputTokensForModel同时作为maxOutputTokens与maxReasoningBudget得到thinking: { type: enabled, budgetTokens }。四、嵌入模型EmbeddingModelV4嵌入模型用于将文本转换为数值向量服务于相似度计算与检索场景。4.1 关联的 AI 函数embed—— packages/ai/src/embed/embed.ts为单个文本创建单个嵌入向量embedMany—— packages/ai/src/embed/embed-many.ts为多个文本创建多个嵌入向量必要时自动分批调用。4.2 规范接口EmbeddingModelV4—— packages/provider/src/embedding-model/v4/embedding-model-v4.ts该接口与语言模型不同其特色字段为maxEmbeddingsPerCall单次 API 调用最多可生成的嵌入数量无限制的模型可用InfinitysupportsParallelCalls模型是否支持并行发起多个嵌入调用doEmbed(options)核心执行方法返回嵌入结果列表。4.3 类图典型实现OpenAIEmbeddingModel、MistralEmbeddingModel。五、图像模型ImageModelV4图像模型用于根据文本提示词生成图像输出。AI 函数generateImage—— packages/ai/src/generate-image/generate-image.ts根据提示词生成一张或多张图像规范接口ImageModelV4—— packages/provider/src/image-model/v4/image-model-v4.ts从源码看ImageModelV4的核心字段是maxImagesPerCall单次调用最多可生成的图像数可为固定数值、undefined或一个返回数值的函数见 image-model-v4.ts以及执行方法doGenerate。典型实现OpenAIImageModel、GoogleImageModel。六、重排序模型RerankingModelV4重排序模型用于按与查询的相关性对候选文档重新排序。AI 函数rerank—— packages/ai/src/rerank/rerank.ts对文档重新排序返回针对查询的相关性排序结果集规范接口RerankingModelV4—— packages/provider/src/reranking-model/v4/reranking-model-v4.ts该接口保持最简形态在specificationVersion/provider/modelId之外仅声明一个doRerank(options)方法见 reranking-model-v4.ts。典型实现CohereRerankingModel、BedrockRerankingModel。七、转录模型TranscriptionModelV4转录模型用于将音频输入转换为文本转录。AI 函数transcribe—— packages/ai/src/transcribe/transcribe.ts将音频转录为文本支持分段与元数据规范接口TranscriptionModelV4—— packages/provider/src/transcription-model/v4/transcription-model-v4.ts从源码看除核心方法doGenerate外该接口还预留了可选的doStream方法用于实时音频的流式转录。由于流式转录契约仍在演进其流选项/部件/结果类型均带Experimental_前缀导出见 transcription-model-v4.ts。典型实现OpenAITranscriptionModel、DeepgramTranscriptionModel。八、语音模型SpeechModelV4语音模型用于从文本输入合成音频TTS。AI 函数generateSpeech—— packages/ai/src/generate-speech/generate-speech.ts根据文本输入生成语音音频规范接口SpeechModelV4—— packages/provider/src/speech-model/v4/speech-model-v4.ts该接口同样精简specificationVersion/provider/modelId加上单一执行方法doGenerate见 speech-model-v4.ts。典型实现OpenAISpeechModel、ElevenLabsSpeechModel。九、视频模型VideoModelV4视频模型用于根据提示词生成视频输出。AI 函数generateVideo—— packages/ai/src/generate-video/generate-video.ts根据提示词生成一个或多个视频规范接口VideoModelV4—— packages/provider/src/video-model/v4/video-model-v4.ts从源码注释可以推断视频生成往往是异步任务doGenerate是可选方法且设计上允许 Provider 在doGenerate内部实现自己的轮询循环来等待视频生成完成见 video-model-v4.ts。典型实现FalVideoModel、ReplicateVideoModel。十、小结如何读懂与扩展一套 Provider纵观七种 V4 模型类型可以提炼出这套抽象的核心设计规律版本即字段每个模型实现都必须通过specificationVersion: v4声明契约版本SDK 侧据此以判别联合方式兼容未来版本模态即接口文本、嵌入、图像、重排序、转录、语音、视频各占一个独立接口AI 函数与接口一一对应互不耦合执行方法统一加do前缀防止用户绕过 AI 函数直接调用底层实现推理强度标准化reasoning提供provider-default/none/minimal/low/medium/high/xhigh七档统一语义由mapReasoningToProviderEfforteffort 字符串映射与mapReasoningToProviderBudgettoken 预算映射两个工具适配到各 Provider 的原生配置并借助 compatibility / unsupported 两类警告保持可观测性Provider 实现自由度高providerOptions支持把提供方特有的能力完全封装在 Provider 内部透传。如需进一步研读推荐按以下路径深入源码AI 函数层见 packages/ai/src/generate-text、packages/ai/src/embed 等目录规范接口层见 packages/provider/src 下各*/v4子目录Provider 实现层以 packages/openai/src、packages/anthropic/src、packages/google/src 为最佳范本推理映射工具与配套测试见 packages/provider-utils/src/map-reasoning-to-provider.ts 及其测试文件 map-reasoning-to-provider.test.ts。【免费下载链接】aiThe AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and agents项目地址: https://gitcode.com/GitHub_Trending/ai/ai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考