- Что такое Vercel AI SDK?
- AI SDK Core: generateText, streamText и generateObject
- AI SDK Tools: Вызов функций и использование инструментов
- Создание циклов AI-агентов с помощью Vercel AI SDK
- AI SDK React: Хук useChat и интеграция с Next.js
- Как использовать Novita AI с Vercel AI SDK
- Выбор LLM-провайдера для Vercel AI SDK
- Заключение
- FAQ
- Рекомендуемые статьи
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 Tools: Вызов функций и использование инструментов
Инструменты позволяют моделям вызывать внешние функции — поисковые 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 для управления. Для рабочих процессов агентов serverless 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
Модели, поддерживающие вызов функций, работают с интерфейсом инструментов 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=ваш_ключ_novita_api_здесь
Получите ключ на novita.ai — новые аккаунты включают бесплатные кредиты для тестирования API.
Agent Sandbox для длительных рабочих нагрузок
Для задач агентов, которые выполняют код, работают с файловыми системами или выполняют многошаговые рабочие процессы продолжительностью в несколько минут, Agent Sandbox от Novita AI предоставляет изолированные среды выполнения поверх LLM API. AI SDK обрабатывает слой рассуждений модели. Песочница обрабатывает выполнение с сохранением состояния, которое не может работать внутри тайм-аута edge-функции.
Выбор LLM-провайдера для Vercel AI SDK
AI SDK упрощает смену провайдеров, что полезно — но стоит понимать компромиссы, прежде чем выбирать один для продакшна.
Задержка: Время до первого токена важнее общей скорости генерации для стримингового чата. Меньшие модели (8B–14B) выдают первые токены быстрее. Serverless-точки доступа Novita AI оптимизированы для низкой задержки холодного старта на открытых моделях.
Стоимость в масштабе: GPT-4o отлична, но при больших объемах запросов разница в цене между frontier-моделью и хорошо настроенной открытой моделью (например, Llama 3.3 70B) становится значительной. AI SDK позволяет экспериментировать с обеими без переписывания логики приложения.
Поддержка вызовов инструментов: Не все модели надежно поддерживают вызов функций. Тестируйте вашу конкретную модель на схемах инструментов — поведение различается у разных провайдеров даже для одного семейства моделей.
Контекстное окно: Для 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 — новые аккаунты включают бесплатные кредиты.
FAQ
Что такое 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 моделями?
Да. Любой провайдер, поддерживающий вызов функций, работает с интерфейсом tool() AI SDK. Novita AI размещает несколько открытых моделей с поддержкой вызова функций. Качество поведения варьируется — 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 обрабатывает все это на уровне библиотеки, так что вам не придется перестраивать это для каждого проекта.
