Provider 与模型

AI SDK 用 Provider 把各家 HTTP 差异藏起来。7.x 默认全局 Provider 是 Vercel AI Gatewaymodel 可以是字符串 "openai/gpt-4.1-mini"。你也可以安装 @ai-sdk/openai 等包直连厂商。

模型 ID 会变。 本教程用 Gateway 字符串 openai/gpt-4.1-mini;官方 Quickstart 常写 xai/grok-4.6;直连示例用 openai('gpt-5.1')。以 Providers and Models 和控制台为准。


Gateway(默认)

pnpm add ai
# .env.local
# AI_GATEWAY_API_KEY=xxxxxxxxx
import { generateText, gateway } from 'ai';

await generateText({ model: 'openai/gpt-4.1-mini', prompt: 'Hi' });
await generateText({
  model: gateway('anthropic/claude-sonnet-4.5'),
  prompt: 'Hi',
});

三种写法等价:纯字符串、gateway() from 'ai'gateway() from '@ai-sdk/gateway'。一条 Key 可换多家模型,适合快速试错和 Vercel 部署。

可把全局默认 Provider 换成别的,这样全项目的字符串都走你指定的后端。见官方 Provider Management。


直连 OpenAI:@ai-sdk/openai

pnpm add @ai-sdk/openai
import { openai, createOpenAI } from '@ai-sdk/openai';
import { streamText } from 'ai';

streamText({ model: openai('gpt-5.1'), prompt: 'Hi' });

const proxy = createOpenAI({
  apiKey: process.env.OPENAI_API_KEY,
  baseURL: 'https://api.openai.com/v1', // 默认同此
});

默认 openai('...')Responses API。若自定义 baseURL 只实现 Chat Completions,用 openai.chat('model-id'),或改用下一节的 OpenAI Compatible 包。

不要把 Gateway 字符串 "openai/gpt-4.1-mini" 传给 openai(),也不要把 openai('gpt-5.1') 当成 Gateway 路由。

其它一等包:@ai-sdk/anthropic@ai-sdk/google@ai-sdk/xai@ai-sdk/azure@ai-sdk/mistral@ai-sdk/groq 等。安装对应包后 import { anthropic } from '@ai-sdk/anthropic'


OpenAI 兼容与本地 Ollama

许多本地 / 网关服务实现 OpenAI HTTP。官方包:

pnpm add @ai-sdk/openai-compatible
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { generateText } from 'ai';

const ollama = createOpenAICompatible({
  name: 'ollama',
  baseURL: 'http://localhost:11434/v1',
});

const { text } = await generateText({
  model: ollama('gemma4'), // 以 ollama.com/library 的标签为准
  prompt: 'Say hello.',
});

本机先按 Ollama 教程 跑起服务。Docker 里不要写 localhost,用 host.docker.internal:11434。兼容层取决于 Ollama 对 /v1 的实现;若缺工具或结构化输出,可试社区包 ollama-ai-provider-v2(见官方 Community Providers)。

vLLM、llama.cpp、各类国内兼容网关同样用 createOpenAICompatible({ baseURL })。需要时再加 apiKeyheadersqueryParams


能力差异

不是每个模型都支持图像输入、工具流、对象生成。换模型前看官方能力表。Gateway 上的 "provider/model" 与直连包的 id 不是同一张表,切换时要分别核对。

TypeScript 里把 model 收成配置(环境变量或 gateway(process.env.MODEL_ID!)),避免把 ID 写死在十个文件里。


下一步

评论