Розділи бази знань ▾

Інструменти

Інструменти

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 токенів →