API 文档 · Vercel AI SDK

在 Vercel AI SDK 中使用 GPTZZZ

用 @ai-sdk/openai-compatible 的 createOpenAICompatible,baseURL 填 https://gptzzz.ai/v1,apiKey 读环境变量 GPTZZZ_API_KEY,就能在 generateText 和 streamText 里调用 GPT 分组的模型。要走 Responses API,换用 @ai-sdk/openai。调用 Claude 分组的模型用 @ai-sdk/anthropic,baseURL 同样填 https://gptzzz.ai/v1。

更新于 。对照 AI SDK 7 官方文档与当天 npm 最新版核验:ai 7.0.137、@ai-sdk/openai-compatible 3.0.67、@ai-sdk/openai 4.0.91、@ai-sdk/anthropic 4.0.78。示例按官方文档写成,接入后先用自己的 Key 发一条最小请求确认。

English summary. GPTZZZ is an independent third-party AI API gateway, not affiliated with any model vendor. In the Vercel AI SDK, use createOpenAICompatible from @ai-sdk/openai-compatible with baseURL: 'https://gptzzz.ai/v1' and apiKey: process.env.GPTZZZ_API_KEY; requests go to /v1/chat/completions. For the Responses API, use createOpenAI from @ai-sdk/openai with the same base URL. For Claude models, use createAnthropic from @ai-sdk/anthropic with baseURL: 'https://gptzzz.ai/v1' and a key from the Claude官key group. With createOpenAI and createAnthropic, check that GPTZZZ_API_KEY is set first: if apiKey is undefined, they fall back to OPENAI_API_KEY or ANTHROPIC_API_KEY and send that key to the gateway. Each API key belongs to one group and can only call that group's models. Overview in English: gptzzz.ai/en/.

先按模型选包

GPTZZZ 的每个 API Key 只属于一个分组,只能调用这个分组里的模型。先确定要调用的模型在哪个分组,再选 AI SDK 的包。

要调用的模型Key 所属分组AI SDK 包与写法实际请求
GPT 模型,如 gpt-5.5GPT 分组:opai puls、opai pro、pro200-500不降智、GPT官key@ai-sdk/openai-compatible
createOpenAICompatible(...)('gpt-5.5')
POST https://gptzzz.ai/v1/chat/completions
GPT 模型,走 Responses API,如 gpt-6-sol同上@ai-sdk/openai
createOpenAI(...)('gpt-6-sol')
POST https://gptzzz.ai/v1/responses
Claude 模型,如 claude-sonnet-5Claude官key@ai-sdk/anthropic
createAnthropic(...)('claude-sonnet-5')
POST https://gptzzz.ai/v1/messages

GPT 分组支持 /v1/chat/completions(含流式、工具调用、JSON 模式)和 /v1/responses。Claude 分组用 Claude Messages 接口。Gemini、DeepSeek、Grok、Qwen、MiMo 等其他分组可用哪些接口,以控制台和 API 文档为准,本页不给示例。GPTZZZ 暂不支持 embeddings,所以 AI SDK 的 embed() 用不了。

每个模型在哪些分组,见模型价格页的分组一览。

准备:Node.js、Key 与安装

  1. Node.js 22 或更高。AI SDK 7 要求 Node.js 22+,并且只提供 ESM:package.json 里要有 "type": "module"。下面的 .ts 示例用了顶层 await,要按 ESM 运行。还在 Node.js 18、20 上的项目,见下文 AI SDK 6 一节。
  2. 创建 Key。登录后在控制台 /keys 创建 API Key,创建时选择分组。要同时调用 GPT 和 Claude 模型,就为两个分组各建一个 Key,余额共用。
  3. Key 只放服务端环境变量。不要写进前端代码或公开仓库。也不要放进 URL 查询参数:GPTZZZ 会拒绝查询参数里的 Key。
npm install ai @ai-sdk/openai-compatible

# 按需安装
npm install @ai-sdk/openai       # 走 Responses API
npm install @ai-sdk/anthropic    # 调用 Claude 分组的模型
npm install zod                  # 定义工具参数

# 直接运行 .ts 文件
npm install -D tsx typescript @types/node

export GPTZZZ_API_KEY="<YOUR_API_KEY>"

下面的示例都从 GPTZZZ_API_KEY 读 Key,每个示例注明需要哪个分组的 Key。同一个进程要同时用两个分组时,给第二个 Key 另起一个变量名,不要混用。

createOpenAICompatible:调用 GPT 模型

这是 AI SDK 文档给 OpenAI 兼容服务的通用接法。先建一个 provider,后面的示例都复用它:

// gptzzz.ts
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';

export const gptzzz = createOpenAICompatible({
  name: 'gptzzz',
  baseURL: 'https://gptzzz.ai/v1',
  apiKey: process.env.GPTZZZ_API_KEY,
  includeUsage: true, // 流式响应也返回 token 用量
});

generateText 一次返回完整结果。需要 GPT 分组的 Key:

// generate.ts
import { generateText } from 'ai';
import { gptzzz } from './gptzzz';

const { text, usage } = await generateText({
  model: gptzzz('gpt-5.5'),
  instructions: '用中文回答,不超过两句话。',
  prompt: '什么是 API 网关?',
});

console.log(text);
console.log(usage.inputTokens, usage.outputTokens);

运行:npx tsx generate.ts。AI SDK 7 把系统提示的参数名从 system 改成了 instructions;system 仍可用,但已弃用。

streamText:流式输出

需要 GPT 分组的 Key:

// stream.ts
import { streamText } from 'ai';
import { gptzzz } from './gptzzz';

const result = streamText({
  model: gptzzz('gpt-5.5'),
  prompt: '从 1 数到 10,每行一个数字。',
  onError({ error }) {
    console.error(error);
  },
});

for await (const delta of result.textStream) {
  process.stdout.write(delta);
}

const usage = await result.usage;
console.log('\n', usage.inputTokens, usage.outputTokens);

流式事件、结束标记和工具调用怎么验收,见流式输出和工具调用的兼容性验收方法。

工具调用

需要 GPT 分组的 Key,另外安装 zod。execute 里换成你自己的查询逻辑:

// tools.ts
import { generateText, tool, isStepCount } from 'ai';
import { z } from 'zod';
import { gptzzz } from './gptzzz';

const { text, steps } = await generateText({
  model: gptzzz('gpt-5.5'),
  tools: {
    weather: tool({
      description: '查询城市当前气温',
      inputSchema: z.object({ city: z.string() }),
      execute: async ({ city }) => ({ city, temperatureC: 22 }),
    }),
  },
  stopWhen: isStepCount(3),
  prompt: '上海现在多少度?',
});

console.log(steps.length, text);

Next.js 路由处理器

在 App Router 里,把模型调用放在服务端的路由处理器,Key 不会进浏览器。下面按 AI SDK 7 官方 Next.js App Router 快速入门的写法,只换了 provider。需要 GPT 分组的 Key:

// app/api/chat/route.ts
import {
  streamText,
  UIMessage,
  convertToModelMessages,
  createUIMessageStreamResponse,
  toUIMessageStream,
} from 'ai';
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';

const gptzzz = createOpenAICompatible({
  name: 'gptzzz',
  baseURL: 'https://gptzzz.ai/v1',
  apiKey: process.env.GPTZZZ_API_KEY,
  includeUsage: true,
});

export async function POST(req: Request) {
  const { messages }: { messages: UIMessage[] } = await req.json();

  const result = streamText({
    model: gptzzz('gpt-5.5'),
    messages: await convertToModelMessages(messages),
  });

  return createUIMessageStreamResponse({
    stream: toUIMessageStream({ stream: result.stream }),
  });
}

Key 写在项目根目录的 .env.local:

GPTZZZ_API_KEY=<YOUR_API_KEY>

前端用 @ai-sdk/react 的 useChat,页面代码照官方快速入门写即可。AI SDK 6 的 result.toUIMessageStreamResponse() 在 7 里已弃用,仍能用但会有警告。

走 Responses API:@ai-sdk/openai

GPT 分组也支持 /v1/responses。需要 Responses API 时,用 @ai-sdk/openai 的 createOpenAI,同样用 GPT 分组的 Key:

// responses.ts
import { createOpenAI } from '@ai-sdk/openai';
import { generateText } from 'ai';

const apiKey = process.env.GPTZZZ_API_KEY;
if (!apiKey) throw new Error('GPTZZZ_API_KEY 未设置');

const openai = createOpenAI({
  baseURL: 'https://gptzzz.ai/v1',
  apiKey,
});

const { text } = await generateText({
  model: openai('gpt-6-sol'), // 默认走 POST /v1/responses
  prompt: '用一句话解释什么是 API 网关。',
});

console.log(text);

怎么选:普通对话、流式和工具调用,用 createOpenAICompatible 就够了。要用 Responses API,或要用 gpt-6 系列模型调工具,选 @ai-sdk/openai。两种写法用同一个 GPT 分组的 Key。迁移时要比对的差异见 OpenAI 兼容 API 迁移。

调用 Claude 模型:@ai-sdk/anthropic

需要 Claude官key 分组的 Key。GPT 分组的 Key 调不了 Claude 模型。

// claude.ts
import { createAnthropic } from '@ai-sdk/anthropic';
import { generateText } from 'ai';

const apiKey = process.env.GPTZZZ_API_KEY; // Claude官key 分组的 Key
if (!apiKey) throw new Error('GPTZZZ_API_KEY 未设置');

const anthropic = createAnthropic({
  baseURL: 'https://gptzzz.ai/v1',
  apiKey,
});

const { text } = await generateText({
  model: anthropic('claude-sonnet-5'),
  prompt: '用一句话解释什么是 API 网关。',
});

console.log(text);

Claude Messages 的请求格式和流式事件见 Claude API 接入教程。

还在用 AI SDK 6

AI SDK 6 仍在发布维护版本,npm 上的 dist-tag 是 ai-v6,支持 Node.js 18+。GPTZZZ 的 provider 配置写法不变,只有几个 API 名称不同:

npm install ai@ai-v6 @ai-sdk/openai-compatible@ai-v6

# 按需安装
npm install @ai-sdk/openai@ai-v6      # 走 Responses API
npm install @ai-sdk/anthropic@ai-v6   # 调用 Claude 分组的模型

AI SDK 6 项目里,所有 @ai-sdk/* 包都要装 ai-v6 标签的版本:@ai-sdk/openai-compatible 2.x、@ai-sdk/openai 3.x、@ai-sdk/anthropic 3.x。混装 AI SDK 7 的 provider 包(@ai-sdk/openai 4.x 等),调用时会报 UnsupportedModelVersionError。

AI SDK 6AI SDK 7
systeminstructions
stopWhen: stepCountIs(3)stopWhen: isStepCount(3)
result.toUIMessageStreamResponse()createUIMessageStreamResponse({ stream: toUIMessageStream({ stream: result.stream }) })
Node.js 18+,支持 CommonJSNode.js 22+,只支持 ESM

完整变更见 AI SDK 7 迁移指南。

常见报错

先拿到状态码和响应体,再对照下表。请求失败时 AI SDK 抛出 APICallError:

import { APICallError } from 'ai';

try {
  // generateText(...)
} catch (error) {
  if (APICallError.isInstance(error)) {
    console.error(error.statusCode, error.responseBody);
  }
}
现象常见原因处理
401GPTZZZ_API_KEY 没加载或值不对;Key 已删除;复制时带了空格。用 createOpenAI 或 createAnthropic 时,变量没加载会改发 OPENAI_API_KEY 或 ANTHROPIC_API_KEY确认变量已加载(不要打印 Key 本身),到控制台 /keys 核对
提示模型不存在或无权调用模型不在这个 Key 的分组里,比如用 GPT 分组的 Key 调 claude-sonnet-5按分组一览换模型 ID,或为对应分组新建 Key
404baseURL 写成了 .../v1/chat/completions 或重复了 /v1;Claude 的 baseURL 漏了 /v1;createAnthropic 读到了 Claude Code 的 ANTHROPIC_BASE_URLbaseURL 只写 https://gptzzz.ai/v1,并显式传入
Received a Chat Completions stream while using the OpenAI Responses API@ai-sdk/openai 默认走 Responses,但请求到了只支持 Chat Completions 的地址检查 baseURL;或改用 openai.chat()、createOpenAICompatible
streamText 没输出,调用方也没收到异常错误进了流。默认只用 console.error 打印在服务端日志里,调用方没有处理先看服务端日志;传 onError 自己记录或上报,并把流读完
本地或代理后面不逐字输出,最后一次性返回代理中间件压缩了响应按 AI SDK 官方排错,在响应头加 'Content-Encoding': 'none'
流式响应拿不到用量没开 includeUsage在 createOpenAICompatible 里设 includeUsage: true
图片输入失败GPT 分组的图片输入要用 base64。@ai-sdk/openai 默认把 http(s) 图片 URL 原样发给接口。@ai-sdk/anthropic 也会原样转发 http(s) 图片和 PDF 的 URL传图片数据(如 Buffer)而不是 URL。createOpenAICompatible 默认会先下载 URL,再以 base64 发送。Claude 分组下传 URL 失败时,同样改传数据
embed() 失败GPTZZZ 暂不支持 embeddings向量另选服务
429 或 5xx限流或上游故障;可重试的错误 SDK 默认会重试 2 次(maxRetries)看服务状态,按错误码手册处理

更多状态码见 AI API 错误码速查手册。仍无法定位时,带上 UTC 时间、模型 ID、状态码和脱敏后的请求联系技术支持。

常见问题

用 createOpenAICompatible 还是 createOpenAI?

普通对话、流式和工具调用用 @ai-sdk/openai-compatible 的 createOpenAICompatible,请求走 /v1/chat/completions。需要 Responses API,或要用 gpt-6 系列模型调用工具,用 @ai-sdk/openai 的 createOpenAI,openai('model-id') 默认走 /v1/responses。两种写法都用 GPT 分组的 Key,baseURL 都填 https://gptzzz.ai/v1。

一个 Key 能同时调用 GPT 和 Claude 模型吗?

不能。每个 API Key 只属于一个分组,只能调用这个分组里的模型。为 GPT 分组和 Claude官key 分组各建一个 Key,余额共用。

@ai-sdk/anthropic 的 baseURL 要不要带 /v1?

要。填 https://gptzzz.ai/v1,SDK 会请求 https://gptzzz.ai/v1/messages。不带 /v1 的 https://gptzzz.ai 是 Claude Code 的 ANTHROPIC_BASE_URL 写法,不要用在 AI SDK 里。

能用 AI SDK 的 embed() 生成向量吗?

不能。GPTZZZ 暂不支持 embeddings,向量需要另选服务。

说明:GPTZZZ 是独立的第三方 AI API 中转服务,不隶属于任何模型厂商;本页不是 Vercel 官方文档。模型、分组与价格以控制台和模型价格页为准。

不熟悉文中的概念?配合 AI API 术语表 一起看。