Skip to content

四大基础概念

AI SDK 的所有功能都围绕四个核心概念展开:Provider 与 Model(模型接入)、Prompt(指令输入)、Tool(能力扩展)和 Streaming(流式传输)。理解这四个概念,就掌握了 AI SDK 的核心心智模型。

1. Provider 与 Model

1.1 什么是 Provider

Provider 是 AI SDK 对模型厂商 API 的适配层。每个 Provider 包负责:

  • 处理特定厂商的 API 认证和请求格式
  • 将 AI SDK 的统一接口映射为厂商特定的 API 调用
  • 处理响应解析和错误映射
typescript
// 不同 Provider,统一使用方式
import { openai } from '@ai-sdk/openai'        // OpenAI Provider
import { anthropic } from '@ai-sdk/anthropic'  // Anthropic Provider
import { google } from '@ai-sdk/google'        // Google Provider

// 创建模型实例——语法完全一致
const gpt4o = openai('gpt-4o')
const claude = anthropic('claude-sonnet-4-5-20250929')
const gemini = google('gemini-2.0-flash')

前端类比

Provider 就像前端的数据库驱动:Prisma 可以连接 PostgreSQL、MySQL、SQLite,接口不变;AI SDK 的 Provider 可以连接 OpenAI、Anthropic、Google,streamText / generateText 的调用方式也不变。

AI SDK 原生语义:Provider 实现了 AI SDK 定义的 LanguageModelV1 接口规范。任何符合该接口的实现都可以作为 Provider,这意味着你甚至可以为私有模型编写自定义 Provider。AI SDK 提供了一系列官方 Provider(first-party)、OpenAI 兼容 Provider,以及社区维护的 Provider。

1.2 模型配置

你可以在创建模型时传入配置选项:

typescript
import { openai } from '@ai-sdk/openai'

const model = openai('gpt-4o', {
  // 模型级别的默认参数
})

也可以在调用函数时覆盖参数:

typescript
import { generateText } from 'ai'

const { text } = await generateText({
  model: openai('gpt-4o'),
  prompt: '你好',
  temperature: 0.7,    // 控制随机性(0=确定性,1=创造性)
  maxTokens: 1000,     // 最大输出 Token 数
})

1.3 自定义 Provider 实例

当你需要自定义 API Key、Base URL 或其他配置时:

typescript
import { createOpenAI } from '@ai-sdk/openai'

// 创建自定义 OpenAI Provider 实例
const myOpenAI = createOpenAI({
  apiKey: process.env.MY_OPENAI_KEY,
  baseURL: 'https://my-proxy.example.com/v1',  // 自定义代理地址
})

const model = myOpenAI('gpt-4o')

1.4 主流 Provider 一览

Provider 包厂商代表模型安装
@ai-sdk/openaiOpenAIGPT-4o, o1, GPT-4o-minipnpm add @ai-sdk/openai
@ai-sdk/anthropicAnthropicClaude 4 Sonnet/Opuspnpm add @ai-sdk/anthropic
@ai-sdk/googleGoogleGemini 2.0 Flash/Propnpm add @ai-sdk/google
@ai-sdk/mistralMistralMistral Large/Smallpnpm add @ai-sdk/mistral
@ai-sdk/amazon-bedrockAWS多模型通过 Bedrockpnpm add @ai-sdk/amazon-bedrock
@ai-sdk/azureAzureOpenAI 模型通过 Azurepnpm add @ai-sdk/azure

2. Prompt(提示词)

2.1 三种消息角色

AI SDK 支持标准的聊天消息格式,包含三种角色:

typescript
import { generateText } from 'ai'
import { openai } from '@ai-sdk/openai'

const { text } = await generateText({
  model: openai('gpt-4o'),
  messages: [
    // system:定义 AI 的角色和行为规则
    { role: 'system', content: '你是一个专业的 TypeScript 教练。' },

    // user:用户的输入
    { role: 'user', content: '解释一下 TypeScript 的泛型。' },

    // assistant:AI 的历史回复(用于多轮对话)
    { role: 'assistant', content: '泛型是 TypeScript 的核心特性之一...' },

    // user:后续提问
    { role: 'user', content: '给我一个实际的例子。' },
  ],
})

前端类比

messages 数组就像 Redux 的 action history——每条消息记录了"谁说了什么",LLM 根据完整的历史上下文来生成下一条回复。system 消息相当于 Redux 的初始 state,定义了整体行为。

AI SDK 原生语义:AI SDK 区分两种消息类型:UIMessage(前端格式,包含 parts 数组支持富文本)和 ModelMessage(模型格式,包含 content 字段)。convertToModelMessages() 函数负责两者之间的转换。在直接使用 Core API 时,你可以直接传入 ModelMessage 格式。

2.2 简写:prompt 参数

对于单轮对话,可以使用 prompt 简写代替 messages

typescript
// 简写方式——适合单轮调用
const { text } = await generateText({
  model: openai('gpt-4o'),
  prompt: '用一句话解释 React Server Components',
})

// 等价于
const { text } = await generateText({
  model: openai('gpt-4o'),
  messages: [
    { role: 'user', content: '用一句话解释 React Server Components' },
  ],
})

2.3 多模态 Prompt

AI SDK 支持在消息中包含图片、文件等多模态内容:

typescript
import { generateText } from 'ai'
import { openai } from '@ai-sdk/openai'

const { text } = await generateText({
  model: openai('gpt-4o'),
  messages: [
    {
      role: 'user',
      content: [
        { type: 'text', text: '描述这张图片中的内容' },
        {
          type: 'image',
          image: new URL('https://example.com/photo.jpg'),
        },
      ],
    },
  ],
})

支持的内容类型:

类型说明支持的模型
text文本内容所有模型
image图片(URL 或 Base64)GPT-4o、Claude 4、Gemini 等
file文件(PDF 等)部分模型

3. Tool(工具)

3.1 什么是 Tool

Tool 是你定义给 LLM 的可调用函数。LLM 根据用户意图决定是否调用 Tool、传入什么参数,AI SDK 负责执行并返回结果。

typescript
import { generateText, tool } from 'ai'
import { openai } from '@ai-sdk/openai'
import { z } from 'zod'

const result = await generateText({
  model: openai('gpt-4o'),
  tools: {
    getWeather: tool({
      description: '获取指定城市的当前天气',     // LLM 根据描述判断何时调用
      parameters: z.object({                    // Zod Schema 定义参数
        city: z.string().describe('城市名称'),
      }),
      execute: async ({ city }) => {            // 实际执行逻辑
        // 调用真实的天气 API
        return { city, temperature: '22°C', condition: '晴' }
      },
    }),
  },
  prompt: '北京今天天气怎么样?',
})

前端类比

Tool 的概念类似于 GraphQL 的 Resolver:你定义"这个函数做什么"(description)和"需要什么参数"(parameters),系统根据请求自动路由到正确的函数执行。LLM 扮演了"智能路由器"的角色——它读懂用户意图,自动选择并调用合适的 Tool。

AI SDK 原生语义:Tool 是 AI SDK 中扩展 LLM 能力的核心机制。LLM 本身只能处理文本,但通过 Tool,它可以查询数据库、调用 API、执行计算等。工具调用的流程是:LLM 生成 tool call 请求 → AI SDK 执行 execute 函数 → 结果返回给 LLM → LLM 生成最终回复。

3.2 Tool 的三要素

要素说明类型
description工具的自然语言描述,LLM 据此判断何时使用string
parametersZod Schema,定义参数类型和约束z.ZodObject
execute实际执行函数,接收校验后的参数async (params) => result

更多细节

Tool 的完整用法(多工具协作、工具链、maxSteps 等)将在 工具调用 页面详细讲解。

4. Streaming(流式传输)

4.1 为什么需要流式传输

LLM 生成文本通常需要数秒甚至数十秒。如果等生成完再一次性返回,用户会面对一个长时间的空白等待。流式传输让 AI 的回复逐字显示,极大提升用户体验。

4.2 generateText vs streamText

AI SDK 为每个核心操作都提供了"生成"和"流式"两个版本:

typescript
import { generateText, streamText } from 'ai'
import { openai } from '@ai-sdk/openai'

// 非流式——等待完成后返回完整结果
const { text } = await generateText({
  model: openai('gpt-4o'),
  prompt: '写一首关于 TypeScript 的诗',
})
console.log(text) // 一次性输出完整诗歌

// 流式——逐 Token 返回
const result = streamText({
  model: openai('gpt-4o'),
  prompt: '写一首关于 TypeScript 的诗',
})

for await (const chunk of result.textStream) {
  process.stdout.write(chunk) // 逐字输出
}
函数返回值适用场景
generateTextPromise<{ text, ... }>后台任务、不需要实时显示
streamTextStreamTextResult聊天 UI、实时显示
generateObjectPromise<{ object, ... }>结构化数据提取
streamObjectStreamObjectResult逐步构建结构化数据

前端类比

generateText vs streamText 的区别,就像 fetch 返回 response.json() vs response.body.getReader() 的区别——前者等待完整数据,后者逐块读取。useChat Hook 内部就是基于 ReadableStream 解析 SSE 流。

AI SDK 原生语义:AI SDK 的流式传输基于 Web Streams API(ReadableStream)实现,与浏览器原生流 API 完全兼容。streamText 返回的 StreamTextResult 对象提供多种消费方式:textStream(纯文本流)、fullStream(包含工具调用等完整事件流)、toUIMessageStreamResponse()(转为 HTTP 流响应供 useChat 消费)。

4.3 与前端 Hook 的配合

流式传输的真正威力在于与前端 Hook 的无缝配合:

typescript
// 服务端:返回流式响应
return result.toUIMessageStreamResponse()
tsx
// 前端:useChat 自动处理流
const { messages, isLoading } = useChat()
// messages 的最后一条会实时更新,isLoading 自动切换

不需要手动处理 EventSourceReadableStreamTextDecoder——AI SDK UI 层已经全部封装好了。

5. 四大概念协作关系

一次典型的 AI 交互流程:

  1. Prompt:用户输入"北京天气怎么样"
  2. Provider & Model:通过 OpenAI Provider 调用 GPT-4o
  3. Tool:LLM 判断需要调用 getWeather 工具,AI SDK 执行并返回结果
  4. Streaming:LLM 根据天气数据生成回复,逐 Token 流式传输到前端

下一步

参考资源

学习文档整合站点