Vercel AI SDK
用 OpenAI 兼容 provider 在 Vercel AI SDK 中调用 HopBase,含流式输出与工具调用。
Vercel 的 AI SDK 是构建 AI 应用的 TypeScript 工具包。HopBase 通过官方的 @ai-sdk/openai-compatible provider 接入;Claude 模型用 @ai-sdk/anthropic。
| 配置项 | 值 |
|---|---|
| 包 | @ai-sdk/openai-compatible |
baseURL | https://api.hop-base.com/v1 |
apiKey | 控制台创建的密钥,以 Authorization: Bearer 发送 |
| 模型 ID | 用这把密钥调 GET /v1/models 返回的原样 ID,例如 deepseek-v4.1-flash-1017 |
已在生产环境用 ai 7.0 与 @ai-sdk/openai-compatible 3.0 实测:generateText、streamText 和 tool() 工具调用都正常,用量正常回传。
HopBase 的密钥只能调用它所含分组里的模型。在控制台创建密钥时,选中提供目标模型的分组——例如 deepseek-v4.1-flash-1017 选DeepSeek,deepseek-v4.1-flash-1017-sg 选DeepSeek 新加坡机房,gemini-3.8-flash 选Gemini 全系(含生图)。密钥不含该模型所在分组时会返回 404 model_not_found。
安装
npm i ai @ai-sdk/openai-compatible zod把密钥放在环境变量里:
export HOPBASE_API_KEY=sk-your-key创建 provider
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
export const hopbase = createOpenAICompatible({
name: 'hopbase',
baseURL: 'https://api.hop-base.com/v1',
apiKey: process.env.HOPBASE_API_KEY,
includeUsage: true, // report token usage on streamed responses
});hopbase('<模型 ID>') 返回一个对话模型,ID 必须与 GET /v1/models 完全一致。
生成文本
import { generateText } from 'ai';
import { hopbase } from './hopbase';
const { text } = await generateText({
model: hopbase('deepseek-v4.1-flash-1017'),
prompt: 'Reply with one word: hello.',
});
console.log(text);流式输出
import { streamText } from 'ai';
import { hopbase } from './hopbase';
const result = streamText({
model: hopbase('deepseek-v4.1-flash-1017'),
prompt: 'Count from 1 to 5.',
});
for await (const delta of result.textStream) process.stdout.write(delta);工具调用
import { generateText, tool, stepCountIs } from 'ai';
import { z } from 'zod';
import { hopbase } from './hopbase';
const { text } = await generateText({
model: hopbase('deepseek-v4.1-flash-1017'),
tools: {
getWeather: tool({
description: 'Get the weather for a city',
inputSchema: z.object({ city: z.string() }),
execute: async ({ city }) => ({ city, tempC: 21 }),
}),
},
stopWhen: stepCountIs(3),
prompt: 'What is the weather in Tokyo? Use the tool.',
});
console.log(text);换模型只需改 ID,例如用包含「Gemini 全系(含生图)」分组的密钥调用 hopbase('gemini-3.8-flash')。
Claude 模型
Claude 模型走 Anthropic Messages 协议。使用 @ai-sdk/anthropic,并且 baseURL 要保留 /v1:这个包会在后面拼上 /messages,请求最终发往 https://api.hop-base.com/v1/messages。
import { createAnthropic } from '@ai-sdk/anthropic';
import { generateText } from 'ai';
const hopbaseClaude = createAnthropic({
baseURL: 'https://api.hop-base.com/v1',
apiKey: process.env.HOPBASE_API_KEY,
});
const { text } = await generateText({
model: hopbaseClaude('claude-sonnet-5-5'),
prompt: 'Reply with one word: hello.',
});密钥必须包含 Claude 分组。这一点与 Anthropic 官方 SDK 和 Claude Code 不同:后两者填不带路径的 https://api.hop-base.com,自己拼 /v1/messages。
各模型价格见价格页。
常见问题
| 现象 | 原因 |
|---|---|
401 | 进程里没有设置 HOPBASE_API_KEY,或密钥已停用 |
404 model_not_found | 密钥不含该模型所在分组,或 ID 写简了。重新查看 GET /v1/models |
只有 @ai-sdk/anthropic 的请求失败 | baseURL 少了 /v1。请求地址必须以 /v1/messages 结尾 |
route_not_found | 密钥属于图片或视频分组,没有对话入口 |
下一步
- OpenCode:在编程助手里配置同一个 provider 包
- OpenAI SDK 与 Anthropic SDK:用官方 SDK 调用相同的入口
- 可用模型:查看一把密钥能用的模型 ID