Разделы базы знаний ▾

Инструменты

Инструменты

Vercel AI SDK + Gonka AI — AI-приложения на TypeScript за копейки

Vercel AI SDK — самый популярный SDK для создания AI-приложений на TypeScript и JavaScript. Единый API generateText и streamText, потоковая отдача в UI, нативный tool calling, готовые хелперы для Next.js App Router — всё, что нужно для чат-ботов, агентов и RAG-пайплайнов в вебе.

Проблема та же, что и у любого LLM-приложения — цена провайдера. Стриминговый чат-интерфейс отправляет историю диалога на каждое сообщение, агент гоняет контекст через десятки шагов. При ценах Anthropic ($3-15/1M) и OpenAI ($2.5-10/1M) даже скромный pet-проект на проде превращается в счёт на сотни долларов в месяц.

JoinGonka Gateway — OpenAI-совместимый эндпоинт поверх децентрализованной сети Gonka. Vercel AI SDK подключается к нему как к любому OpenAI-совместимому провайдеру — без форка, без своих адаптеров. Та же модель Qwen3-235B, тот же streamText, но за $0.0005/1M токенов на входе — в сотни-тысячи раз дешевле.

Шаг 1: Получить ключ и подключить провайдер

API-ключ JoinGonka: зарегистрируйтесь на gate.joingonka.ai/register — на старте даём 10M бесплатных токенов. В Dashboard создайте ключ с префиксом jg-.

Установка пакетов. Для кастомного OpenAI-совместимого эндпоинта Vercel AI SDK рекомендует провайдер @ai-sdk/openai-compatible:

npm install ai @ai-sdk/openai-compatible

Минимальное подключение — создаём инстанс провайдера через createOpenAICompatible и вызываем generateText:

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { generateText } from 'ai';

const gonka = createOpenAICompatible({
  name: 'gonka',
  baseURL: 'https://gate.joingonka.ai/v1',
  apiKey: process.env.GONKA_API_KEY, // jg-ваш-ключ
});

const { text } = await generateText({
  model: gonka('Qwen/Qwen3-235B-A22B-Instruct-2507-FP8'),
  prompt: 'Объясни, что такое децентрализованная сеть инференса',
});

console.log(text);

Параметр apiKey автоматически добавляет заголовок Authorization: Bearer jg-ваш-ключ — отдельная настройка не нужна. Храните ключ в переменной окружения GONKA_API_KEY (например, в .env.local), а не в коде.

Альтернатива — пакет @ai-sdk/openai с фабрикой createOpenAI({ baseURL, apiKey }). Оба способа рабочие; для эндпоинтов, не принадлежащих OpenAI, документация AI SDK советует именно @ai-sdk/openai-compatible — он не тянет лишних OpenAI-специфичных допущений.

Шаг 2: Стриминг и Next.js route handler

Главная фишка Vercel AI SDK — потоковая отдача ответа. Функция streamText начинает стримить токены сразу, а хелпер toUIMessageStreamResponse() отдаёт готовый поток прямо из route handler в Next.js App Router.

Серверный обработчик app/api/chat/route.ts:

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { streamText, convertToModelMessages, type UIMessage } from 'ai';

const gonka = createOpenAICompatible({
  name: 'gonka',
  baseURL: 'https://gate.joingonka.ai/v1',
  apiKey: process.env.GONKA_API_KEY,
});

// разрешаем стримить до 30 секунд
export const maxDuration = 30;

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

  const result = streamText({
    model: gonka('Qwen/Qwen3-235B-A22B-Instruct-2507-FP8'),
    system: 'Ты полезный ассистент. Отвечай кратко и по делу.',
    messages: convertToModelMessages(messages),
    maxOutputTokens: 8192, // потолок Qwen3-235B через Gateway
  });

  return result.toUIMessageStreamResponse();
}

На клиенте подключите хук useChat из @ai-sdk/react — он сам обращается к /api/chat и рендерит поток сообщений. Бэкенд при этом ходит в Gonka, а не в OpenAI.

Скрипт без UI (Node, async-итератор по потоку):

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { streamText } from 'ai';

const gonka = createOpenAICompatible({
  name: 'gonka',
  baseURL: 'https://gate.joingonka.ai/v1',
  apiKey: process.env.GONKA_API_KEY,
});

const result = streamText({
  model: gonka('Qwen/Qwen3-235B-A22B-Instruct-2507-FP8'),
  prompt: 'Напиши хайку про распределённые вычисления',
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}

Параметры моделей. Через Gateway доступны три модели, контекст у всех 128K токенов; потолок ответа (maxOutputTokens) различается:

  • Qwen/Qwen3-235B-A22B-Instruct-2507-FP8 — дефолт, до 8192 токенов вывода;
  • moonshotai/Kimi-K2.6 — до 3072 (Kimi K2.6);
  • MiniMaxAI/MiniMax-M2.7 — до 4096 (MiniMax M2.7).

Если maxOutputTokens не задан, для non-stream запроса Gateway по умолчанию вернёт до 1500 токенов — для стриминговых чатов лучше указывать значение явно.

Сравнение стоимости

Vercel AI SDK обычно стоит за интерактивным интерфейсом — чат, агент, ассистент в приложении. Каждое сообщение тянет за собой историю диалога, каждый шаг агента — контекст инструментов. Поэтому реальная стоимость считается не по одному запросу, а по нагрузке прода. Сравним типичные сценарии:

СценарийТокеновAnthropic / OpenAIJoinGonka Gonka
Одно сообщение в чате~3K$0.01 — $0.05$0.000003
Диалог из 20 реплик~150K$0.50 — $2.25$0.00015
RAG-ответ (поиск + генерация)~5K$0.015 — $0.05$0.000005
Шаг агента с tool calling~10K$0.03 — $0.10$0.00001
10 000 запросов в день (прод)~50M$150 — $500$0.05

Цена JoinGonka — около $0.0005 за 1M токенов на входе, выход примерно в три раза дороже. Для приложения с тысячами запросов в день это разница между счётом на сотни долларов и счётом на центы. Бесплатных 10M токенов хватает, чтобы полностью прогнать и отладить проект до выхода в прод.

Tool calling и агенты

Vercel AI SDK описывает инструменты декларативно через объект tools и схему zod. Qwen3-235B поддерживает нативный function calling, поэтому AI SDK получает структурированные tool_calls без парсинга текстовых ответов. Параметр stopWhen: stepCountIs(n) разрешает несколько шагов подряд — модель вызывает инструмент, получает результат и продолжает.

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { generateText, tool, stepCountIs } from 'ai';
import { z } from 'zod';

const gonka = createOpenAICompatible({
  name: 'gonka',
  baseURL: 'https://gate.joingonka.ai/v1',
  apiKey: process.env.GONKA_API_KEY,
});

const { text } = await generateText({
  model: gonka('Qwen/Qwen3-235B-A22B-Instruct-2507-FP8'),
  stopWhen: stepCountIs(5),
  tools: {
    weather: tool({
      description: 'Узнать погоду в городе',
      inputSchema: z.object({ city: z.string() }),
      execute: async ({ city }) => ({ city, tempC: 17 }),
    }),
  },
  prompt: 'Какая погода в Москве? Ответь одним предложением.',
});

console.log(text);

Модель вызывает инструмент weather, получает результат и формирует финальный ответ. Весь цикл стоит около $0.00001 через Gonka против $0.03-0.10 у Anthropic или OpenAI. Для агентских приложений, где каждый запрос пользователя разворачивается в 5-10 шагов, экономия на проде измеряется тысячами долларов в месяц.

Если строите AI-приложение на Python, посмотрите гайд по LangChain — там тот же подход через OpenAI-совместимый класс.

Vercel AI SDK + Gonka = production-ready AI-приложения на TypeScript за копейки. createOpenAICompatible подключает Gateway без форков, generateText и streamText работают как обычно, нативный tool calling и Next.js route handlers — всё за $0.0005/1M токенов вместо $2.5-15 у OpenAI и Anthropic.

Хотите узнать больше?

Изучите другие разделы или начните зарабатывать GNK прямо сейчас.

Получить бесплатные 10M токенов →