Sekcje bazy wiedzy ▾

Narzędzia

Narzędzia

Vercel AI SDK + Gonka AI — aplikacje AI w TypeScript za grosze

Vercel AI SDK — najpopularniejszy SDK do tworzenia aplikacji AI w TypeScript i JavaScript. Jednolity interfejs API generateText i streamText, strumieniowe przesyłanie do UI, natywne wywoływanie narzędzi, gotowe pomocniki dla Next.js App Router — wszystko, co potrzebne do chatbotów, agentów i potoków RAG w sieci.

Problem jest ten sam, co w przypadku każdej aplikacji LLM — cena dostawcy. Streamingowy interfejs czatu wysyła historię dialogu na każdą wiadomość, agent przetwarza kontekst przez dziesiątki kroków. Przy cenach Anthropic ($3-15/1M) i OpenAI ($2.5-10/1M) nawet skromny projekt dla zwierząt domowych na produkcji zamienia się w rachunek rzędu setek dolarów miesięcznie.

JoinGonka Gateway — endpoint kompatybilny z OpenAI, działający na bazie zdecentralizowanej sieci Gonka. Vercel AI SDK łączy się z nim tak samo, jak z każdym innym dostawcą kompatybilnym z OpenAI — bez forka, bez własnych adapterów. Ten sam model Qwen3-235B, ten sam streamText, ale za $0.0005/1M tokenów na wejściu — setki-tysiące razy taniej.

Krok 1: Uzyskaj klucz i podłącz dostawcę

Klucz API JoinGonka: zarejestruj się na gate.joingonka.ai/register — na start dajemy 10M darmowych tokenów. W Dashboardzie utwórz klucz z prefiksem jg-.

Instalacja pakietów. Dla niestandardowego endpointu kompatybilnego z OpenAI, Vercel AI SDK zaleca dostawcę @ai-sdk/openai-compatible:

npm install ai @ai-sdk/openai-compatible

Minimalne połączenie — tworzymy instancję dostawcy za pomocą createOpenAICompatible i wywołujemy 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-twój-klucz
});

const { text } = await generateText({
  model: gonka('Qwen/Qwen3-235B-A22B-Instruct-2507-FP8'),
  prompt: 'Wyjaśnij, czym jest zdecentralizowana sieć wnioskowania',
});

console.log(text);

Parametr apiKey automatycznie dodaje nagłówek Authorization: Bearer jg-twój-klucz — oddzielna konfiguracja nie jest potrzebna. Przechowywać klucz w zmiennej środowiskowej GONKA_API_KEY (na przykład w .env.local), a nie w kodzie.

Alternatywa — pakiet @ai-sdk/openai z fabryką createOpenAI({ baseURL, apiKey }). Obie metody są skuteczne; dla endpointów nienależących do OpenAI, dokumentacja AI SDK zaleca właśnie @ai-sdk/openai-compatible — nie wprowadza on zbędnych założeń specyficznych dla OpenAI.

Krok 2: Streaming i handler trasy Next.js

Główną cechą Vercel AI SDK jest strumieniowe przekazywanie odpowiedzi. Funkcja streamText od razu zaczyna strumieniować tokeny, a pomocnik toUIMessageStreamResponse() zwraca gotowy strumień bezpośrednio z handlera trasy w Next.js App Router.

Obsługa serwera 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,
});

// zezwalamy na strumieniowanie do 30 sekund
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: 'Jesteś pomocnym asystentem. Odpowiadaj krótko i na temat.',
    messages: convertToModelMessages(messages),
    maxOutputTokens: 8192, // limit Qwen3-235B przez Gateway
  });

  return result.toUIMessageStreamResponse();
}

Na kliencie podłącz hook useChat z @ai-sdk/react — sam odwołuje się on do /api/chat i renderuje strumień wiadomości. Backend w tym czasie komunikuje się z Gonką, a nie z OpenAI.

Skrypt bez interfejsu użytkownika (Node, asynchroniczny iterator przez strumień):

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: 'Napisz haiku o obliczeniach rozproszonych',
});

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

Parametry modeli. Przez Gateway dostępne są trzy modele, kontekst dla wszystkich to 128K tokenów; limit odpowiedzi (maxOutputTokens) różni się:

  • Qwen/Qwen3-235B-A22B-Instruct-2507-FP8 — domyślny, do 8192 tokenów wyjściowych;
  • moonshotai/Kimi-K2.6 — do 3072 (Kimi K2.6);
  • MiniMaxAI/MiniMax-M2.7 — do 4096 (MiniMax M2.7).

Jeśli maxOutputTokens nie jest podany, dla żądań innych niż strumieniowe Gateway domyślnie zwróci do 1500 tokenów — dla czatów strumieniowych lepiej jest jawnie określić wartość.

Porównanie kosztów

Vercel AI SDK zwykle obsługuje interaktywny interfejs — czat, agent, asystent w aplikacji. Każda wiadomość pociąga za sobą historię dialogu, każdy krok agenta — kontekst narzędzi. Dlatego rzeczywisty koszt jest obliczany nie na podstawie jednego zapytania, ale na podstawie obciążenia produkcyjnego. Porównajmy typowe scenariusze:

ScenariuszTokenyAnthropic / OpenAIJoinGonka Gonka
Jedna wiadomość w czacie~3K$0.01 — $0.05$0.000003
Dialog z 20 replikami~150K$0.50 — $2.25$0.00015
Odpowiedź RAG (wyszukiwanie + generacja)~5K$0.015 — $0.05$0.000005
Krok agenta z tool calling~10K$0.03 — $0.10$0.00001
10 000 zapytań dziennie (prod)~50M$150 — $500$0.05

Cena JoinGonka wynosi około $0.0005 za 1M tokenów na wejściu, wyjście jest około trzy razy droższe. Dla aplikacji z tysiącami zapytań dziennie to różnica między rachunkiem na setki dolarów a rachunkiem na centy. Bezpłatne 10M tokenów wystarcza, aby w pełni uruchomić i debugować projekt przed wprowadzeniem na produkcję.

Tool calling i agenci

Vercel AI SDK opisuje narzędzia deklaratywnie poprzez obiekt tools i schemat zod. Qwen3-235B obsługuje natywne wywoływanie funkcji, dlatego AI SDK odbiera ustrukturyzowane tool_calls bez parsowania tekstowych odpowiedzi. Parametr stopWhen: stepCountIs(n) pozwala na kilka kolejnych kroków — model wywołuje narzędzie, odbiera wynik i kontynuuje.

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: 'Sprawdź pogodę w mieście',
      inputSchema: z.object({ city: z.string() }),
      execute: async ({ city }) => ({ city, tempC: 17 }),
    }),
  },
  prompt: 'Jaka jest pogoda w Moskwie? Odpowiedz jednym zdaniem.',
});

console.log(text);

Model wywołuje narzędzie weather, otrzymuje wynik i tworzy ostateczną odpowiedź. Cały cykl kosztuje około $0.00001 za pośrednictwem Gonka w porównaniu do $0.03-0.10 w Anthropic lub OpenAI. W przypadku aplikacji agentowych, gdzie każde zapytanie użytkownika rozwijane jest na 5-10 kroków, oszczędności na produkcji mierzone są w tysiącach dolarów miesięcznie.

Jeśli budujesz aplikację AI w Pythonie, sprawdź przewodnik po LangChain — tam jest to samo podejście poprzez klasę kompatybilną z OpenAI.

Vercel AI SDK + Gonka = gotowe do produkcji aplikacje AI w TypeScript za grosze. createOpenAICompatible podłącza Gateway bez forków, generateText i streamText działają jak zwykle, natywne tool calling i Next.js route handlers — wszystko za $0.0005/1M tokenów zamiast $2.5-15 w OpenAI i Anthropic.

Chcesz wiedzieć więcej?

Zapoznaj się z innymi sekcjami lub zacznij zarabiać GNK już teraz.

Otrzymaj 10M darmowych tokenów →