- Что такое Vercel AI SDK?
- AI SDK Core: generateText, streamText и generateObject
- Инструменты AI SDK: Function Calling и использование инструментов
- Создание циклов AI-агентов с Vercel AI SDK
- AI SDK React: хук useChat и интеграция с Next.js
- Как использовать Novita AI с Vercel AI SDK
- Выбор LLM-провайдера для Vercel AI SDK
- Заключение
- Часто задаваемые вопросы
- Рекомендуемые статьи
Vercel AI SDK — это инструментарий на TypeScript для создания AI-приложений. Он обрабатывает генерацию текста, стриминг, структурированные выходные данные, вызовы инструментов и многошаговые циклы агентов через единый унифицированный API — и работает с любым крупным LLM-провайдером. Если вы когда-либо напрямую подключали OpenAI или Anthropic к приложению Next.js и в итоге поддерживали три разные реализации стриминга, этот SDK решает эту проблему.
Это руководство охватывает основные возможности SDK, способы подключения к OpenAI-совместимому LLM API от Novita AI, а также то, как вписываются рабочие процессы агентов для разработчиков, создающих нечто большее, чем простой чат-бот.
Что такое Vercel AI SDK?
Vercel AI SDK (пакет: ai на npm) — это библиотека с открытым исходным кодом, которая абстрагируется от различий между LLM-провайдерами. Вместо того чтобы изучать отдельные протоколы стриминга для OpenAI, Anthropic и Google, вы вызываете одни и те же функции generateText, streamText или generateObject и меняете провайдера, изменяя один импорт.
SDK поставляется в двух слоях:
- AI SDK Core отвечает за взаимодействие с моделями: генерация текста, стриминг, структурированные объекты, вызовы инструментов, эмбеддинги и циклы агентов.
- AI SDK UI предоставляет хуки React (
useChat,useCompletion,useObject,useAssistant), а также адаптеры для Next.js, SvelteKit и Nuxt, которые управляют состоянием стриминга в браузере.
Также существует пакет @ai-sdk/openai-compatible для подключения к любому провайдеру, реализующему формат OpenAI Chat Completions — именно так интегрируется Novita AI.
SDK работает в Node.js, Deno, edge-средах (Cloudflare Workers, Vercel Edge) и браузерных окружениях.
AI SDK Core: generateText, streamText и generateObject
Установите SDK и пакет провайдера:
npm install ai @ai-sdk/openai
generateText
Для нестриминговых завершений — пакетная обработка, классификация, одноразовая генерация:
import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';
const { text } = await generateText({
model: openai('gpt-4o-mini'),
prompt: 'Объясни, как работают эмбеддинги LLM, в двух предложениях.',
});
console.log(text);
streamText
Для чат-интерфейсов, где важна задержка:
import { streamText } from 'ai';
import { openai } from '@ai-sdk/openai';
const result = streamText({
model: openai('gpt-4o-mini'),
messages: [
{ role: 'user', content: 'Проведи меня по настройке приложения Next.js.' },
],
});
for await (const chunk of result.textStream) {
process.stdout.write(chunk);
}
generateObject
Когда нужен структурированный JSON на выходе, а не сырой текст — проверка схемы выполняется автоматически с помощью Zod:
import { generateObject } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';
const { object } = await generateObject({
model: openai('gpt-4o-mini'),
schema: z.object({
name: z.string(),
skills: z.array(z.string()),
experienceLevel: z.enum(['junior', 'mid', 'senior']),
}),
prompt: 'Сгенерируй профиль вымышленного инженера-программиста.',
});
console.log(object.name, object.skills);
SDK обрабатывает вставку системного промпта, необходимую для принуждения модели к корректному JSON, и повторяет попытки при некорректном выводе.
Инструменты AI SDK: Function Calling и использование инструментов
Инструменты позволяют моделям вызывать внешние функции — поисковые API, запросы к базам данных, калькуляторы — во время генерации. Параметр tools в SDK принимает объект, где каждый ключ становится вызываемой функцией:
import { generateText, tool } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';
const { text, toolCalls } = await generateText({
model: openai('gpt-4o-mini'),
tools: {
getWeather: tool({
description: 'Получить текущую погоду для местоположения',
parameters: z.object({
city: z.string().describe('Название города'),
unit: z.enum(['celsius', 'fahrenheit']).default('celsius'),
}),
execute: async ({ city, unit }) => {
// Замените на реальный вызов API погоды
return { city, temperature: 22, unit, condition: 'sunny' };
},
}),
},
prompt: 'Какая сейчас погода в Токио?',
});
console.log(text);
Хелпер tool() обеспечивает вывод типов из схемы Zod в параметры функции execute. Ручной разбор JSON не требуется.
Многошаговые вызовы инструментов
По умолчанию generateText останавливается после одного раунда вызовов инструментов. Установите maxSteps, чтобы модель могла использовать результаты инструментов в последующих рассуждениях:
const { text } = await generateText({
model: openai('gpt-4o'),
maxSteps: 5,
tools: { getWeather, searchWeb, lookupCalendar },
prompt: 'Спланируй мои активности на открытом воздухе на эти выходные в Берлине.',
});
SDK автоматически обрабатывает цикл вызов инструмента → результат → продолжение. Каждый шаг доступен через onStepFinish, если вам нужна видимость промежуточных рассуждений.
Создание циклов AI-агентов с Vercel AI SDK
Агент в AI SDK — это модель, работающая в цикле с инструментами до тех пор, пока она не решит, что у неё достаточно информации для ответа. Шаблон такой же, как и при многошаговом вызове инструментов, но с большим количеством инструментов и более длинным maxSteps:
import { generateText, tool } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';
const result = await generateText({
model: openai('gpt-4o'),
maxSteps: 10,
system: 'Ты — исследовательский помощник. Используй доступные инструменты для тщательного ответа.',
prompt: 'Каковы основные различия между Llama 3.1 и Qwen3?',
tools: {
search: tool({
description: 'Поиск в интернете актуальной информации',
parameters: z.object({ query: z.string() }),
execute: async ({ query }) => searchWeb(query),
}),
summarize: tool({
description: 'Суммировать содержимое URL',
parameters: z.object({ url: z.string() }),
execute: async ({ url }) => fetchAndSummarize(url),
}),
},
onStepFinish({ stepType, toolCalls, toolResults }) {
console.log('Шаг:', stepType, toolCalls?.map(t => t.toolName));
},
});
Для продуктовых конвейеров агентов подключите Novita AI в качестве бэкенда модели для контроля стоимости и пропускной способности в масштабе — это описано в следующем разделе.
AI SDK React: хук useChat и интеграция с Next.js
Хук useChat управляет состоянием стримингового чата без шаблонного кода:
// app/chat/page.tsx
'use client';
import { useChat } from 'ai/react';
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat({
api: '/api/chat',
});
return (
<div>
{messages.map(m => (
<div key={m.id} className={m.role === 'user' ? 'user' : 'assistant'}>
{m.content}
</div>
))}
<form onSubmit={handleSubmit}>
<input
value={input}
onChange={handleInputChange}
placeholder="Спросите что-нибудь..."
disabled={isLoading}
/>
<button type="submit" disabled={isLoading}>Отправить</button>
</form>
</div>
);
}
Соответствующий обработчик маршрута:
// app/api/chat/route.ts
import { streamText } from 'ai';
import { openai } from '@ai-sdk/openai';
export async function POST(req: Request) {
const { messages } = await req.json();
const result = streamText({
model: openai('gpt-4o-mini'),
messages,
});
return result.toDataStreamResponse();
}
toDataStreamResponse() обрабатывает протокол стрима Vercel AI, который useChat на клиенте понимает нативно. Для стриминга структурированных объектов из API замените useChat на useObject и streamText на streamObject.
Как использовать Novita AI с Vercel AI SDK
Novita AI предоставляет OpenAI-совместимый API по адресу https://api.novita.ai/v3/openai, что делает его заменой вставкой для любого SDK, использующего формат OpenAI Chat Completions — включая Vercel AI SDK.
Зачем использовать Novita AI с AI SDK
Novita AI размещает более 70 моделей с открытым исходным кодом — Llama 3.3 70B, Qwen3, DeepSeek V3, Mistral и Gemma 3 — через единую конечную точку API. Никакой инфраструктуры GPU для управления. Для рабочих процессов агентов серверный API масштабируется от небольших 7B инструктивных моделей до больших моделей рассуждений без изменения конфигурации.
Настройка
Установите пакет провайдера, совместимого с OpenAI:
npm install ai @ai-sdk/openai-compatible
Настройте провайдера:
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
const novita = createOpenAICompatible({
name: 'novita',
baseURL: 'https://api.novita.ai/v3/openai',
apiKey: process.env.NOVITA_API_KEY,
});
Это полная настройка. Теперь используйте его точно так же, как и любого другого провайдера AI SDK:
import { generateText } from 'ai';
const { text } = await generateText({
model: novita('meta-llama/llama-3.3-70b-instruct'),
prompt: 'Каковы компромиссы между RAG и тонкой настройкой для бота поддержки клиентов?',
});
Стриминг работает так же:
import { streamText } from 'ai';
const result = streamText({
model: novita('qwen/qwen3-235b-a22b-instruct-2507'),
messages: [
{ role: 'system', content: 'Ты — полезный помощник по программированию.' },
{ role: 'user', content: 'Покажи мне, как создать REST API с помощью FastAPI.' },
],
});
for await (const chunk of result.textStream) {
process.stdout.write(chunk);
}
Вызовы инструментов с Novita AI
Модели, поддерживающие function calling, работают с интерфейсом инструментов AI SDK без дополнительной настройки. Llama 3.3 70B Instruct и Qwen3 поддерживают вызовы инструментов через API Novita:
import { generateText, tool } from 'ai';
import { z } from 'zod';
const { text } = await generateText({
model: novita('meta-llama/llama-3.3-70b-instruct'),
maxSteps: 5,
tools: {
calculator: tool({
description: 'Вычислить математическое выражение',
parameters: z.object({ expression: z.string() }),
execute: async ({ expression }) => {
return { result: eval(expression) }; // используйте безопасный парсер математики в продакшене
},
}),
},
prompt: 'Сколько будет 12% от 847, затем разделить на 3.14?',
});
Настройка окружения
Добавьте ваш API-ключ Novita в .env.local:
NOVITA_API_KEY=ваш_ключ_api_novita_здесь
Получите ключ на novita.ai — новые аккаунты получают бесплатные кредиты для тестирования API.
Agent Sandbox для длительных рабочих нагрузок
Для задач агентов, которые выполняют код, получают доступ к файловым системам или выполняют многошаговые рабочие процессы, Novita AI Agent Sandbox предоставляет изолированные среды выполнения поверх LLM API. AI SDK обрабатывает слой рассуждений модели. Песочница обрабатывает сохранение состояния, которое не может выполняться внутри тайм-аута edge-функции.
Выбор LLM-провайдера для Vercel AI SDK
AI SDK упрощает смену провайдеров, что полезно — но стоит понимать компромиссы, прежде чем выбирать один для продакшена.
Задержка: Время до первого токена важнее общей скорости генерации для стримингового чата. Меньшие модели (8B–14B) выдают первые токены быстрее. Серверные конечные точки Novita AI оптимизированы для низкой задержки холодного старта на открытых моделях.
Стоимость в масштабе: GPT-4o отличен, но при больших объёмах запросов разница в цене между фронтирной моделью и хорошо настроенной открытой моделью (например, Llama 3.3 70B) становится значительной. AI SDK позволяет экспериментировать с обеими, не переписывая логику приложения.
Поддержка вызовов инструментов: Не все модели надёжно поддерживают function calling. Тестируйте вашу конкретную модель на схемах ваших инструментов — поведение различается у разных провайдеров даже для одной и той же модели.
Контекстное окно: Для RAG с большими документами или длинных историй разговоров проверяйте лимиты контекста. Многие открытые модели поддерживают 128K токенов, что покрывает большинство практических случаев.
Привязка к вендору: Абстракция провайдера в AI SDK вместе с OpenAI-совместимой конечной точкой Novita AI означает, что вы можете переключать модели или добавлять резервного провайдера, не трогая код приложения.
Заключение
Vercel AI SDK устраняет шаблонный код при создании AI-приложений — один API для генерации текста, стриминга, вызовов инструментов и циклов агентов в любом LLM-провайдере. Строите ли вы стриминговый чат-интерфейс с useChat, извлекаете структурированные данные с generateObject или запускаете многошагового агента, вызывающего внешние инструменты, SDK берёт на себя всю инфраструктуру, чтобы вы могли сосредоточиться на логике приложения.
Для инференса открытых моделей OpenAI-совместимый API Novita AI напрямую встраивается в SDK через @ai-sdk/openai-compatible. Вы получаете доступ к более чем 70 моделям — Llama, Qwen3, DeepSeek, Mistral — без управления GPU-инфраструктурой, и можете менять модели или добавлять резервных провайдеров, не затрагивая код приложения.
Начните работу на novita.ai — новые аккаунты получают бесплатные кредиты.
Часто задаваемые вопросы
Что такое ai sdk react?
Интеграция AI SDK с React находится в пакете ai/react. Он предоставляет хуки — useChat, useCompletion, useObject, useAssistant — которые подключают фронтенд на React к серверному стриминговому маршруту. Хуки обрабатывают состояние стриминга, историю сообщений, индикаторы загрузки и обработку ошибок, так что вам не придётся управлять ReadableStream в состоянии компонента.
Что добавляет ai sdk 5?
AI SDK 5 (выпущенный в бета-версии в середине 2025 года) переработал спецификацию провайдера для лучшей типобезопасности, разделил управление состоянием UI от логики взаимодействия с моделью и ввёл пересмотренный формат сообщений, упрощающий сериализацию состояния агентного UI. Если вы начинаете новый проект в 2026 году, проверьте ai-sdk.dev на предмет последней стабильной версии — SDK продолжал развиваться до версий 6 и 7.
Есть ли документация ai sdk, на которую можно ссылаться?
Каноническая документация находится на ai-sdk.dev. Она включает руководства по настройке провайдеров, справочники API для всех основных функций, руководства по интеграции с фреймворками (Next.js, Nuxt, SvelteKit) и примеры рецептов для типичных паттернов, таких как RAG, циклы агентов и структурированное извлечение.
Могу ли я использовать инструменты ai sdk с моделями, отличными от OpenAI?
Да. Любой провайдер, поддерживающий function calling, работает с интерфейсом tool() AI SDK. Novita AI размещает несколько открытых моделей с поддержкой function calling. Качество поведения варьируется — Llama 3.3 70B и Qwen3 являются наиболее надёжными для многошагового использования инструментов среди открытых моделей, доступных через API Novita.
В чём разница между документацией vercel ai sdk и документацией ai-sdk.dev?
Это один и тот же продукт. Ранее документация находилась по адресу sdk.vercel.ai и теперь перенаправляет на ai-sdk.dev. SDK поддерживается командой Vercel, но является открытым исходным кодом и не привязан к развёртыванию на инфраструктуре Vercel.
Как SDK искусственного интеллекта соотносятся с прямым вызовом LLM API?
Прямые вызовы API подходят для простых одноразовых запросов. SDK становится оправданным, когда вам нужно несколько вещей одновременно: стриминг, интегрированный в UI-фреймворк, многошаговые циклы вызовов инструментов, проверка структурированного вывода, унифицированное переключение провайдеров и согласованная обработка повторных попыток и ошибок между провайдерами. AI SDK обрабатывает всё это на уровне библиотеки, чтобы вам не пришлось пересобирать это для каждого проекта.
