Перейти к содержанию

AI SDK от Vercel

AI SDK — библиотека Vercel для работы с моделями на TypeScript: генерация текста, потоковые ответы, вызов инструментов. К хабу она подключается через провайдер @ai-sdk/openai-compatible, в котором доступны модели всех провайдеров хаба.

1. Установите пакеты​

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

zod нужен для описания параметров инструментов.

2. Подключите хаб​

Сохраните ключ хаба в переменной окружения COREINFRA_API_KEY и создайте провайдер:

coreinfra.ts
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";

export const coreinfra = createOpenAICompatible({
name: "coreinfra",
baseURL: "https://hub.coreinfra.ai/openai/api/v1",
apiKey: process.env.COREINFRA_API_KEY,
includeUsage: true,
});

С includeUsage в потоковых ответах приходит расход токенов, без него AI SDK его не получает.

Отправляйте запросы к хабу с сервера: ключ даёт доступ к балансу, поэтому в коде, который выполняется в браузере, его быть не должно.

3. Отправьте запрос​

Модель указывается идентификатором из раздела Модели и цены, например claude-sonnet-5-5 или gpt-5.4-mini:

import { generateText } from "ai";
import { coreinfra } from "./coreinfra";

const { text } = await generateText({
model: coreinfra("claude-sonnet-5-5"),
prompt: "Объясни кэш промптов в двух предложениях.",
});
console.log(text);

Потоковый ответ​

streamText отдаёт текст по частям, пока модель его генерирует:

import { streamText } from "ai";
import { coreinfra } from "./coreinfra";

const result = streamText({
model: coreinfra("gpt-5.4-mini"),
prompt: "Напиши хайку о шлюзах.",
});
for await (const text of result.textStream) {
process.stdout.write(text);
}

Инструменты​

Модель вызывает инструмент, AI SDK выполняет execute и возвращает результат модели, а stopWhen ограничивает число шагов:

import { generateText, stepCountIs, tool } from "ai";
import { z } from "zod";
import { coreinfra } from "./coreinfra";

const { text } = await generateText({
model: coreinfra("gpt-5.4-mini"),
prompt: "Какая погода в Москве?",
tools: {
weather: tool({
description: "Погода в городе",
inputSchema: z.object({ city: z.string() }),
execute: async ({ city }) => ({ city, temperature: 12, sky: "облачно" }),
}),
},
stopWhen: stepCountIs(5),
});
console.log(text);

Что дальше​