集成 · VERCEL AI SDK

Vercel AI SDK 接入 全部模型。

OminiGate 在 https://api.ominigate.ai/v1 暴露 OpenAI 兼容接口,因此 @ai-sdk/openai 中的 createOpenAI 只需一行代码就能切换。streamText、useChat、generateObject 和工具调用都可直接对接 OminiGate 的完整模型目录。

团队为什么把 Vercel AI SDK 应用部署到 OminiGate

你已经在用的 AI SDK 原语,背后由一个统一、可预测的 API 网关支撑。

createOpenAI 即插即用

在 @ai-sdk/openai 的 createOpenAI 上把 baseURL 设为 https://api.ominigate.ai/v1,已有的 streamText、generateText 和 generateObject 调用无需改动——只需把 model slug 切换到 OminiGate 的命名规范。

完整支持流式与工具调用

streamText().toDataStreamResponse()、useChat、tool(...) 以及 maxSteps 多步 Agent 全部透明转发。OpenAI 协议在所有支持的模型上保持一致。

一把 key,一份余额

一把 sk-omg- key 同时驱动对话、嵌入、图像、视频模型,并由同一份余额支付。无需在 AI SDK 应用中维护多个供应商 key。

兼容 Edge Runtime

OminiGate 是标准 HTTPS API,可在 Edge Route Handler 和 Edge Function 中直接使用。设置 export const runtime = "edge" 后,streamText 处理函数即可全球部署,代码无需改动。

真实可运行的 Vercel AI SDK 示例

原样复制以下代码,替换为自己的 sk-omg- key,即可直接运行。

1. 在 Route Handler 中使用 streamText

最短路径:用 createOpenAI 配好 OminiGate baseURL,然后从 Next.js Route Handler 返回 result.toDataStreamResponse()。可直接配合客户端的 useChat 使用。

// app/api/chat/route.ts
import { createOpenAI } from "@ai-sdk/openai";
import { streamText } from "ai";

const ominigate = createOpenAI({
  baseURL: "https://api.ominigate.ai/v1",
  apiKey: process.env.OMINIGATE_API_KEY,
});

export const maxDuration = 30;

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

  const result = streamText({
    model: ominigate("openai/gpt-5"),
    system: "You are a helpful assistant.",
    messages,
  });

  return result.toDataStreamResponse();
}

2. 在 App Router 中使用 useChat

从 @ai-sdk/react(AI SDK 4.x 的导入路径)引入 useChat,并指向 /api/chat 路由。流式渲染、消息状态和表单处理都已内建。

// app/chat/page.tsx
"use client";

import { useChat } from "@ai-sdk/react";

export default function Chat() {
  const { messages, input, handleInputChange, handleSubmit } = useChat({
    api: "/api/chat",
  });

  return (
    <div className="mx-auto flex max-w-md flex-col gap-4 py-12">
      {messages.map((m) => (
        <div key={m.id}>
          <strong>{m.role === "user" ? "You" : "AI"}: </strong>
          {m.content}
        </div>
      ))}
      <form onSubmit={handleSubmit}>
        <input
          value={input}
          onChange={handleInputChange}
          placeholder="Say something..."
        />
      </form>
    </div>
  );
}

3. 用 generateObject + zod 实现结构化输出

用 zod schema 从任意对话模型中提取强类型对象。OminiGate 透明转发 JSON 模式请求,因此同一份代码可跨多个供应商运行。

import { createOpenAI } from "@ai-sdk/openai";
import { generateObject } from "ai";
import { z } from "zod";

const ominigate = createOpenAI({
  baseURL: "https://api.ominigate.ai/v1",
  apiKey: process.env.OMINIGATE_API_KEY,
});

const { object } = await generateObject({
  model: ominigate("openai/gpt-5"),
  schema: z.object({
    title: z.string(),
    summary: z.string(),
    tags: z.array(z.string()),
  }),
  prompt: "Summarise the OminiGate value proposition for a TypeScript developer.",
});

console.log(object);
// { title: "...", summary: "...", tags: ["..."] }

4. 多步 Agent 与工具调用

用 tool() 助手定义工具,配合 maxSteps 实现多轮执行,让模型自动调用你的函数。任何支持 OpenAI 风格工具调用的模型都可使用。

import { createOpenAI } from "@ai-sdk/openai";
import { generateText, tool } from "ai";
import { z } from "zod";

const ominigate = createOpenAI({
  baseURL: "https://api.ominigate.ai/v1",
  apiKey: process.env.OMINIGATE_API_KEY,
});

const { text } = await generateText({
  model: ominigate("anthropic/claude-sonnet-4"),
  tools: {
    weather: tool({
      description: "Get the current weather for a city.",
      parameters: z.object({
        city: z.string().describe("The city to look up."),
      }),
      execute: async ({ city }) => {
        // Replace with a real weather call in production.
        return { city, tempF: 72, conditions: "sunny" };
      },
    }),
  },
  maxSteps: 5,
  prompt: "What is the weather in San Francisco today?",
});

console.log(text);

团队基于此构建什么

几种典型的 Vercel AI SDK 模式,统一 API 网关让它们更省事。

Next.js 流式聊天应用

在 Route Handler 中使用 streamText,搭配客户端的 useChat。只需切换一个 slug 就能更换底层模型——openai/gpt-5、anthropic/claude-sonnet-4、google/gemini-2.5-pro——客户端代码无需任何改动。

Edge 部署的 AI 接口

在 Vercel Edge Function 上运行 streamText 处理函数,添加 export const runtime = "edge" 即可。OminiGate 的 HTTP API 基于 fetch,冷启动控制在 100 毫秒以内,全球路由保持低延迟。

结构化数据抽取

用 generateObject 配合 zod schema,把非结构化输入转换为强类型对象——发票解析、分类、实体抽取。可按能力需求切换模型,schema 无需改动。

带工具的多步 Agent

用 tool(...) 和 maxSteps 构建可浏览、查询 API 或执行业务逻辑的 Agent。一把 sk-omg- key 同时为对话模型、嵌入模型以及 Agent 调用的图像或视频工具鉴权。

迁移已有的 AI SDK 项目

替换 provider 工厂,已有的 streamText、generateObject 和 useChat 代码就开始通过 OminiGate 运行。

从 OpenAI 直连迁移

把 openai import 替换为 createOpenAI(baseURL, apiKey),并将 model slug 加上 OminiGate 使用的供应商命名空间前缀(例如 openai/gpt-5)。

diff
- import { openai } from "@ai-sdk/openai";
-
- const result = streamText({
-   model: openai("gpt-4o"),
-   prompt,
- });

+ import { createOpenAI } from "@ai-sdk/openai";
+
+ const ominigate = createOpenAI({
+   baseURL: "https://api.ominigate.ai/v1",
+   apiKey: process.env.OMINIGATE_API_KEY,
+ });
+
+ const result = streamText({
+   model: ominigate("openai/gpt-5"),
+   prompt,
+ });

从 OpenRouter 迁移

替换 baseURL 和 API key。Model slug 仍然沿用 OpenRouter 的 provider/model 规范,大部分应用无需改动。

diff
- const openrouter = createOpenAI({
-   baseURL: "https://openrouter.ai/api/v1",
-   apiKey: process.env.OPENROUTER_API_KEY,
- });
-
- const result = streamText({
-   model: openrouter("openai/gpt-4o"),
-   prompt,
- });

+ const ominigate = createOpenAI({
+   baseURL: "https://api.ominigate.ai/v1",
+   apiKey: process.env.OMINIGATE_API_KEY,
+ });
+
+ const result = streamText({
+   model: ominigate("openai/gpt-5"),
+   prompt,
+ });

常见问题

如何把 Vercel AI SDK 指向 OminiGate?

从 @ai-sdk/openai 引入 createOpenAI,传入 baseURL: "https://api.ominigate.ai/v1" 和 sk-omg- API key,然后在原本调用 openai(...) 的地方使用返回的工厂即可。已有的 streamText、generateText 和 generateObject 调用全部继续可用。

toDataStreamResponse 流式返回支持吗?

支持。streamText(...).toDataStreamResponse() 按文档原样工作。OminiGate 透明转发 OpenAI 流式协议,因此响应可直接被客户端的 useChat 消费,无需任何额外适配层。

工具调用和 generateObject 兼容吗?

兼容。tool() 助手、maxSteps 多步执行和带 zod schema 的 generateObject 对所有支持 OpenAI 工具或 JSON 模式的 OminiGate 模型都直接可用,包括 OpenAI、Anthropic 和 Google 对话系列。

OminiGate 兼容 Edge Runtime 吗?

兼容。OminiGate 是基于 fetch 的 HTTPS API,可在 Vercel Edge Function 与 Edge Route Handler 中运行。在处理函数中加上 export const runtime = "edge",其余代码保持不变。

如何安全地存放 API key?

把 sk-omg- key 放进 process.env.OMINIGATE_API_KEY,且只在 Server Component、Server Action 或 Route Handler 中读取,绝不放进客户端组件。createOpenAI 是服务端工厂,AI SDK 自然遵循这一边界。

如何查看 token 用量和费用?

每个请求都会显示在 OminiGate Dashboard 的用量页中,包含 model slug、输入/输出 token 数和费用。也可以读取 streamText / generateText 返回值上的 result.usage,把每次请求的 token 计数接入自有的分析系统。

错误和重试如何处理?

错误返回遵循 OpenAI 的错误结构,因此 AI SDK 自带的错误处理与 experimental_telemetry 重试选项无需修改即可使用。401 表示 key 无效,429 表示触发限流——按标准退避策略处理即可。

如何在 OminiGate 模型之间切换?

Model ID 遵循 provider/model 格式——openai/gpt-5、anthropic/claude-sonnet-4、google/gemini-2.5-pro 等。把 slug 作为唯一参数传入 ominigate(...) 工厂,AI SDK 的其他代码保持不变。

把下一个 AI SDK 应用部署到 OminiGate

在 Dashboard 中创建一把 key,把 createOpenAI 指向 https://api.ominigate.ai/v1,已有的 streamText、useChat 和 generateObject 代码立即可在整个模型目录上运行。