AI Stats Gateway 为Vercel AI SDK提供商
公务 维塞尔 AI SDK 提供方 AI Stats 网关,允许进入55+ AI供应商通过统一的接口.
特征
✨ 统一访问 - 通过单一的SDK使用55+AI供应商(OpenAI、Anthropic、Google、Mistral、DeepSeek等) 🔄 完整 AI SDK v6 支持 - 与所有Vercel AI SDK原始人合作:
- 文本 :
generateText, (中文(简体) ),streamText, (中文(简体) ),generateObject, (中文(简体) ),streamObject - 嵌入:
embed, (中文(简体) ),embedMany - 图像 :
generateImage - 音频 :
transcribe(STT), (中文(简体) ),speak(TTS) (韩语) 🛠️ 工具调用 - 对功能/工具的完整支持,并行执行 📦 结构化输出 - 以 JSON 计划生成打出的对象 🔢 嵌入层 - 生成用于语义搜索和类似性的矢量嵌入 🖼️ 图像生成 - 从文本提示创建图像( DALL- E, Flux等) 🎙️ 语音译名( T) - 文字对语言和语音对文字的能力 ⚡ 流线 - 实时代币流与使用情况跟踪 🔐 类型安全 - 严格类型的全类型脚本支持 🌐 提供者路线 - 自动认识健康的路由和故障
安装
npm install @ai-stats/ai-sdk-provider ai@^6
快速启动
基本用途
import { aiStats } from "@ai-stats/ai-sdk-provider";
import { generateText } from "ai";
const result = await generateText({
model: aiStats("openai/gpt-4o"),
prompt: "Explain quantum computing in simple terms",
});
console.log(result.text);
流线
import { aiStats } from "@ai-stats/ai-sdk-provider";
import { streamText } from "ai";
const { textStream } = await streamText({
model: aiStats("anthropic/claude-3-5-sonnet"),
prompt: "Write a poem about TypeScript",
});
for await (const chunk of textStream) {
process.stdout.write(chunk);
}
工具调用
import { aiStats } from "@ai-stats/ai-sdk-provider";
import { generateText } from "ai";
import { z } from "zod";
const result = await generateText({
model: aiStats("openai/gpt-4o"),
prompt: "What is the weather in San Francisco?",
tools: {
getWeather: {
description: "Get weather for a location",
parameters: z.object({
location: z.string(),
}),
execute: async ({ location }) => ({
temperature: 72,
conditions: "sunny",
}),
},
},
});
结构化输出
import { aiStats } from "@ai-stats/ai-sdk-provider";
import { generateObject } from "ai";
import { z } from "zod";
const { object } = await generateObject({
model: aiStats("openai/gpt-4o"),
schema: z.object({
name: z.string(),
age: z.number(),
email: z.string().email(),
}),
prompt: "Generate a sample user profile",
});
嵌入层
import { aiStats } from "@ai-stats/ai-sdk-provider";
import { embed, embedMany } from "ai";
// Single embedding
const { embedding } = await embed({
model: aiStats.textEmbeddingModel("openai/text-embedding-3-small"),
value: "Hello, world!",
});
// Batch embeddings
const { embeddings } = await embedMany({
model: aiStats.textEmbeddingModel("openai/text-embedding-3-small"),
values: ["First text", "Second text", "Third text"],
});
图像生成
import { aiStats } from "@ai-stats/ai-sdk-provider";
import { generateImage } from "ai";
const { images } = await generateImage({
model: aiStats.imageModel("openai/dall-e-3"),
prompt: "A serene landscape with mountains at sunset",
size: "1024x1024",
});
console.log(images[0].url); // Image URL or base64
音频译名( 语音对文本)
import { aiStats } from "@ai-stats/ai-sdk-provider";
import { transcribe } from "ai";
import { readFileSync } from "fs";
const audioData = readFileSync("./audio.mp3");
const { text, segments } = await transcribe({
model: aiStats.transcriptionModel("openai/whisper-1"),
audioData: new Blob([audioData], { type: "audio/mp3" }),
language: "en", // optional
});
console.log(text); // Transcribed text
文字对语言
import { aiStats } from "@ai-stats/ai-sdk-provider";
import { speak } from "ai";
import { writeFileSync } from "fs";
const { audio } = await speak({
model: aiStats.speechModel("openai/tts-1"),
text: "Hello, this is text to speech!",
voice: "alloy", // alloy, echo, fable, onyx, nova, shimmer
outputFormat: "mp3",
});
writeFileSync("./speech.mp3", audio);
配置
环境变量
将您的 API 密钥设定为环境变量 :
export AI_STATS_API_KEY=your_api_key_here
然后使用默认实例:
import { aiStats } from "@ai-stats/ai-sdk-provider";
const result = await generateText({
model: aiStats("openai/gpt-4o"),
prompt: "Hello!",
});
自定义配置
import { createAIStats } from "@ai-stats/ai-sdk-provider";
const aiStats = createAIStats({
apiKey: "your_api_key",
baseURL: "https://api.phaseo.app/v1", // optional
headers: {
"X-Custom-Header": "value", // optional
},
});
模型设置
配置特定模型参数 :
const result = await generateText({
model: aiStats("openai/gpt-4o"),
prompt: "Hello!",
temperature: 0.7,
maxTokens: 1000,
topP: 0.9,
frequencyPenalty: 0.5,
presencePenalty: 0.5,
seed: 12345, // for deterministic output
});
支持供应商
通过网关访问55+AI供应商 :
主要供应商
- 开放AI数字 :
openai/gpt-4o, (中文(简体) ),openai/gpt-4-turbo, (中文(简体) ),openai/gpt-3.5-turbo - 安东尼数字 :
anthropic/claude-3-5-sonnet, (中文(简体) ),anthropic/claude-3-opus, (中文(简体) ),anthropic/claude-3-haiku - 谷歌数字 :
google/gemini-2.5-pro-latest, (中文(简体) ),google/gemini-2.5-flash-latest - 迷雾数字 :
mistral/mistral-large, (中文(简体) ),mistral/mistral-small - 十.AI. 联合国数字 :
x-ai/grok-3, (中文(简体) ),x-ai/grok-2
开源模型
- 深层搜索数字 :
deepseek/deepseek-chat, (中文(简体) ),deepseek/deepseek-coder - 问数字 :
qwen/qwen-3-235b, (中文(简体) ),qwen/qwen-3-32b - 元数据数字 :
meta/llama-3.3-70b, (中文(简体) ),meta/llama-3.1-405b
专业供应商
- 格罗克: 对Llama、Mixtral、Gemma的超快推论
- 大赦国际: 有快速推论的开源模型
- 烟花: 开放模型的最佳推论
- 心管: 极快的推论
模式标识格式
模型使用格式 provider/model-id数字 :
// OpenAI models
aiStats("openai/gpt-4o");
aiStats("openai/gpt-4-turbo");
// Anthropic models
aiStats("anthropic/claude-3-5-sonnet");
aiStats("anthropic/claude-3-opus");
// Google models
aiStats("google/gemini-2.5-pro-latest");
// DeepSeek models
aiStats("deepseek/deepseek-chat");
API 参考
createAIStats(settings?)
创建新的 AI Stats 提供者实例 .
参数:
settings.apiKey(字符串,可选) - API 密钥用于认证. 默认为AI_STATS_API_KEY(原始内容存档于2018-10-21). env var.settings.baseURL(字符串,可选) - Gateway base URL. 默认 :https://api.phaseo.app/v1settings.headers(对象,可选) - 请求中包含的额外标题settings.fetch(函数,可选) - 自定义获取执行
回返情况: 提供者函数 (modelId: string, settings?: ModelSettings) => LanguageModelV3
aiStats(modelId, settings?)
使用默认提供者实例 AI_STATS_API_KEY 环境变量.
参数:
modelId(字符串,要求) - 格式的型号IDprovider/modelsettings(对象,可选) - 模式特定设置
模型设置 :
temperature(数量) - 采样温度 (0-2)maxTokens(数字) - 要生成的最大符号topP(数目) - 核心取样阈值 (0-1)topK(数目) - 最大K取样阈值frequencyPenalty(数目) - 频率处罚(-2.0至2.0)presencePenalty(数目) - 在场处罚(-2.0至2.0)seed(数量) - 确定产出的随机种子user(字符串) - 用于跟踪的用户标识符
实例
见 examples/ 完整工作示例目录 :
文本语言( L) :
嵌入搜索( S) :
- 嵌入( t) - 病媒嵌入和相似性
图像 :
- 图像生成.ts - 从文本生成图像
音频 :
多服务:
- 多提供者.ts - 比较多个供应商
测试
该套装包括使用Vitest和AI SDK模拟模型的全面测试覆盖:
运行 Moc 测试( 免费 - 没有 API 呼叫)
cd packages/integrations/ai-sdk-ai-stats
pnpm test
模拟测试的使用 MockLanguageModelV3 财务报告和审定财务报表 MockEmbeddingModelV3 从 ai/test 以验证功能,而无需实际调用 API.
运行集成测试( 需要 API 密钥)
AI_STATS_API_KEY=your_key pnpm test
集成测试对AI Stats Gateway进行真实的调用,并在存在API密钥时自动启用.
测试范围
pnpm test -- --coverage
测试文件 :
tests/language-model.test.ts- 文本生成、流出、工具、结构输出(混合)tests/embedding-model.test.ts- 嵌入的生成和相似性(混合)tests/gateway-integration.test.ts- 真正的网关测试(需要API密钥)
高级使用
自定义获取执行
import { createAIStats } from "@ai-stats/ai-sdk-provider";
const aiStats = createAIStats({
fetch: async (url, init) => {
console.log("Request:", url);
const response = await fetch(url, init);
console.log("Response:", response.status);
return response;
},
});
处理错误
import { aiStats } from "@ai-stats/ai-sdk-provider";
import { generateText } from "ai";
try {
const result = await generateText({
model: aiStats("openai/gpt-4o"),
prompt: "Hello!",
});
} catch (error: any) {
if (error.status === 401) {
console.error("Invalid API key");
} else if (error.status === 429) {
console.error("Rate limit exceeded");
} else if (error.status >= 500) {
console.error("Server error, will retry");
} else {
console.error("Error:", error.message);
}
}
用法跟踪
const result = await generateText({
model: aiStats("openai/gpt-4o"),
prompt: "Hello!",
});
console.log("Prompt tokens:", result.usage.promptTokens);
console.log("Completion tokens:", result.usage.completionTokens);
console.log(
"Total tokens:",
result.usage.promptTokens + result.usage.completionTokens
);
如何运作
- 提供者选择: 您指定使用
provider/model格式 - 网关运行: AI Stats Gateway 将您的请求传递给合适的提供者
- 健康意识失败: 如果提供者失败, 网关会自动尝试选项
- 反应正常化: 答复与AI SDK格式正常化
- 用法跟踪:自动跟踪托肯的使用和费用
使用AI Stats网关的好处
- 统一计费:一次付款,使用多个提供者
- 自动失败: 供应商冗余,可用性高
- 成本优化: 通往最具成本效益的供应商的网关路线
- 用法分析: 详细分析和使用情况跟踪
- 费率限制管理: 网关处理速度在提供者之间受到限制
- 模式异形: 使用映射到真实模型的虚拟模型名称
解决问题
"AI Stats API 键是需要的"
确定你已经设置 AI_STATS_API_KEY 环境变量或通过 apiKey 改为 createAIStats()。 。 。 .
"盖特威请求失败: 401"
您的 API 密钥无效 。 请检查date=中的日期值 (帮助).
"盖特威请求失败:429"
你已经超过你的极限。 等一下,再试一次,或提升你的计划.
流出不工作
确保您使用 streamText 或者说 streamObject 从AI SDK,不是 generateText 或者说 generateObject。 。 。 .
未执行的工具调用
确保你已经提供了 execute 函数在工具定义中。 AI SDK自动处理执行.
类型脚本支持
此软件包以 TypeScript 写成, 并提供完整的类型定义 :
import type {
AIStatsSettings,
AIStatsModelSettings,
} from "@ai-stats/ai-sdk-provider";
const settings: AIStatsSettings = {
apiKey: "your_key",
baseURL: "https://api.phaseo.app/v1",
};
捐款
欢迎捐款! 请看 捐款额 准则.
许可证
麻省理工学院执照 - 看 自由主义 详细情况.
链接
支助
- 文档数字 : https://ai-stats.phaseo.app/docs. 互联网档案馆的存檔,存档日期2013-12-21
- 解析器:加入我们的社区
- 电子邮件数字 : 支持@ai-stats.histano.app
由AI Stats团队制作