在 Vercel AI SDK 里调用 TeamoRouter
Vercel AI SDK(ai 包)通过它的 OpenAI 兼容 provider 接 TeamoRouter:把 Base URL 换成 TeamoRouter、填 TeamoRouter 的 API Key、模型 ID 用我们目录里的就行,generateText、streamText 和工具调用的代码都不用改。Claude 模型改用 Anthropic 原生 provider(见第 4 节)。
新账号余额为 0,先充值再调用。 第一次请求前先充值,$5 起。如果请求返回 402(OpenAI 格式为 400)、提示「钱包余额不足」,说明余额为 0,不是 Base URL 或 Key 配错了,充值后重试即可。
没有海外卡?也可以用 USDT 充值:在充值弹窗点「Crypto支付」,用 USDT、USDC 或 ETH,从币安、OKX 等交易所 App 转账即可——收银台会按金额显示可用网络(BEP20 从 $5 起就能用),不用装钱包插件(教程)。
1. 安装和配置
在 TeamoRouter 控制台 创建 API Key,放进环境变量:
npm install ai @ai-sdk/openai-compatible zod
export TEAMOROUTER_API_KEY=sk-teamo-...
provider 建一次,到处复用:
// teamorouter.ts
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
export const teamorouter = createOpenAICompatible({
name: 'teamorouter',
baseURL: 'https://api.teamorouter.com/v1',
apiKey: process.env.TEAMOROUTER_API_KEY,
includeUsage: true, // 流式输出时也返回用量
});
| 配置项 | 填什么 |
|---|---|
| Base URL | https://api.teamorouter.com/v1 |
| API Key | sk-teamo-...,以 Authorization: Bearer 发送 |
| 模型 ID | 我们目录里的 ID,不带 厂商/ 前缀,例如 deepseek-flash |
可用的模型 ID:
GPT9
gpt-6.1-solgpt-6-astragpt-6-solgpt-6-lunagpt-5.6-solgpt-5.6-terragpt-5.6-lunagpt-5.5gpt-5.4
Claude12
claude-opus-5-5claude-sonnet-5-5claude-haiku-5-5claude-fable-5-1claude-opus-5claude-fable-5claude-sonnet-5claude-opus-4-8claude-opus-4-7claude-opus-4-6claude-sonnet-4-6claude-haiku-4-5
Gemini5
gemini-3.8-flashgemini-3.7-flashgemini-3.6-flashgemini-3.5-flash-litegemini-3.1-pro-preview
DeepSeek6
deepseek-flashdeepseek-flash-freedeepseek-v4-flash-vision-expdeepseek-v4-prodeepseek-v4-flashdeepseek-v4-flash-free
GLM4
glm-5.3-flashglm-5.3-flash-freeglm-5.3glm-5.2
Grok1
grok-4.6
2. generateText 和 streamText
import { generateText, streamText } from 'ai';
import { teamorouter } from './teamorouter';
const { text, usage } = await generateText({
model: teamorouter('deepseek-flash'),
prompt: '用一句话解释 API 网关是做什么的。',
});
console.log(text, usage);
const result = streamText({
model: teamorouter('deepseek-flash'),
prompt: '写一首关于延迟的俳句。',
});
for await (const chunk of result.textStream) {
process.stdout.write(chunk);
}
3. 工具调用
import { generateText, tool, stepCountIs } from 'ai';
import { z } from 'zod';
import { teamorouter } from './teamorouter';
const { text } = await generateText({
model: teamorouter('deepseek-flash'),
tools: {
getWeather: tool({
description: '查询某个城市当前的气温',
inputSchema: z.object({ city: z.string() }),
execute: async ({ city }) => ({ city, temperatureC: 22 }),
}),
},
stopWhen: stepCountIs(3), // 先让模型调用工具,再给出回答
prompt: '上海现在天气怎么样?',
});
console.log(text);
4. Claude:用 Anthropic provider
Claude 走 Anthropic 原生协议。用 @ai-sdk/anthropic,Base URL 指向 TeamoRouter;通过 OpenAI 兼容 provider 调 Claude,可能丢掉提示缓存和思考(thinking)。
npm install @ai-sdk/anthropic
import { createAnthropic } from '@ai-sdk/anthropic';
import { generateText } from 'ai';
const anthropic = createAnthropic({
baseURL: 'https://api.teamorouter.com/v1', // 请求会发到 /v1/messages
apiKey: process.env.TEAMOROUTER_API_KEY, // 以 x-api-key 发送
});
const { text } = await generateText({
model: anthropic('claude-sonnet-5-5'),
prompt: '帮我检查这个函数有没有 bug:...',
});
streamText、工具调用,以及 Anthropic 专有的 providerOptions(提示缓存、思考)用法和直连 Anthropic 官方一样。模型 ID 用 claude-opus-5-5、claude-sonnet-5-5、claude-haiku-5-5 这类。
GPT 模型继续用上面的 OpenAI 兼容 provider 即可。
可能遇到的报错
| 状态码 | 含义 | 怎么办 |
|---|---|---|
| 401 | 没带 API Key 或 Key 不对 | 检查 TEAMOROUTER_API_KEY,Key 应以 sk-teamo- 开头 |
| 402(OpenAI 格式为 400),提示「钱包余额不足」 | 余额为 0 | 充值后重试 |
400 model_not_available |
模型 ID 不在目录里,或带了 厂商/ 前缀 |
用上面列表里的 ID,去掉前缀 |
原始 HTTP 接口、流式和缓存的细节见 API 接入指南。