Sekcje bazy wiedzy ▾

Nawigacja

▸ Zacznij tutaj Według ról

Kategorie

Narzędzia 37
Słownik 12

Narzędzia

TanStack AI + Gonka — aplikacje AI w TypeScript za grosze

TanStack AI (@tanstack/ai) — to bezpieczny typowo SDK dla TypeScript od zespołu TanStack (autorzy Query, Router, Table). Architektura Provider-agnostic: streaming-czat, natywny tool calling, agenci, ustrukturyzowane wyjście i multimodalność poprzez jednolity zestaw adapterów. Gotowe bindingi dla React, Vue, Svelte, Solid i Preact (useChat i inne hooki) oraz headless-client dla serwera.

Problem jest taki sam jak w każdym frameworku AI — cena inferencji. TanStack AI z pudełka wspiera OpenAI, Anthropic i Gemini, ale bezpośrednie taryfy tych dostawców ($2.50–15 za 1M tokenów) sprawiają, że czaty produkcyjne i agenci stają się drodzy: streaming-dialogi i pętle narzędziowe szybko zużywają miliony tokenów.

Kluczowa cecha TanStack AI — funkcja openaiCompatible(): najwyższej klasy sposób na podłączenie dowolnego punktu końcowego kompatybilnego z OpenAI. Oznacza to, że JoinGonka Gateway integruje się bez niestandardowych adapterów — wskazujesz baseURL, klucz i listę modeli. Wynik: ten sam bezpieczny typowo czat i agenci, ale za $0.0069/1M tokenów przez zdecentralizowaną sieć Gonka zamiast $2.50–15 w OpenAI.

Krok 1: Zainstaluj TanStack AI i uzyskaj klucz

Instalacja pakietów (rdzeń + adapter OpenAI, w którym znajduje się openaiCompatible):

# pnpm
pnpm add @tanstack/ai @tanstack/ai-openai

# npm
npm install @tanstack/ai @tanstack/ai-openai

Dla interfejsu czatu w React dodaj klienta i hooki:

pnpm add @tanstack/ai-client @tanstack/ai-react

Klucz API JoinGonka: jeśli jeszcze go nie masz — zarejestruj się na gate.joingonka.ai/register, odbierz 3M darmowych tokenów i utwórz klucz jg-xxx w Dashboard → API Keys. Jeden klucz i jedno saldo działają zarówno dla formatu OpenAI, jak i Anthropic.

Krok 2: Podłącz Gonka przez openaiCompatible

W TanStack AI niestandardowy dostawca kompatybilny z OpenAI konfiguruje się funkcją openaiCompatible(): raz ustawiasz baseURL, apiKey oraz listę modeli, a następnie wybierasz model przy każdym wywołaniu. Nasz Gateway obsługuje format Chat Completions, dlatego zostawiamy api: 'chat-completions' (wartość domyślna).

import { openaiCompatible } from '@tanstack/ai-openai'

// Dostawca Gonka — konfiguruje się raz
export const gonka = openaiCompatible({
  name: 'gonka',
  baseURL: 'https://gate.joingonka.ai/v1',
  apiKey: process.env.GONKA_API_KEY!, // jg-twój-klucz
  api: 'chat-completions',
  models: [
    'MiniMaxAI/MiniMax-M2.7', // domyślny
    'deepseek-ai/DeepSeek-V4-Flash-0731',
    'zai-org/GLM-5.3-Flash', // model reasoning
  ],
})

Streaming-czat na serwerze (na przykład route-handler w dowolnym fullstack-frameworku lub TanStack Start). Długość odpowiedzi ustawiamy przez modelOptions — to jedyne miejsce dla natywnych parametrów wire (max_tokens, temperature):

import { chat, toServerSentEventsResponse } from '@tanstack/ai'
import { gonka } from './gonka'

export async function POST(request: Request) {
  const { messages } = await request.json()

  const stream = chat({
    adapter: gonka('MiniMaxAI/MiniMax-M2.7'),
    messages,
    modelOptions: { max_tokens: 8192 }, // limit wyjściowy przez Gateway
  })

  return toServerSentEventsResponse(stream)
}

React-klient przez hook useChat — strumieniuje odpowiedzi z serwera do UI:

import { useChat } from '@tanstack/ai-react'

function Chat() {
  const { messages, sendMessage, status } = useChat({ api: '/api/chat' })

  return (
    <div>
      {messages.map((m) => (
        <p key={m.id}><b>{m.role}:</b> {m.content}</p>
      ))}
      <button onClick={() => sendMessage('Czym jest Gonka?')}>
        Zapytać
      </button>
    </div>
  )
}

Bez serwera: ten sam dostawca działa w skrypcie lub backendzie bezpośrednio — wywołuj chat() i czytaj strumień. Połączenie z Gonka jest identyczne dla wszystkich wariantów.

Parametry modeli przez Gateway: kontekst — 200K tokenów dla MiniMax M2.7, 380K dla DeepSeek V4 Flash i 390K dla GLM-5.3 Flash. Limit max_tokens — 8192 dla MiniMax M2.7 i GLM-5.3 Flash, 32768 dla DeepSeek V4 Flash. Jeśli max_tokens nie jest określony, domyślna wartość dla non-stream to 1500, dlatego dla długich odpowiedzi określaj go jawnie.

Porównanie kosztów

TanStack AI działa równie wygodnie zarówno przez bezpośrednie taryfy OpenAI/Anthropic, jak i przez Gonka — zmienia się tylko baseURL. Ale cena różni się o rzędy wielkości. Porównajmy typowe obciążenia aplikacji produkcyjnej na TanStack AI:

ScenariuszTokenyOpenAI / AnthropicJoinGonka Gonka
Jedna streaming-odpowiedź czatu~3K$0.008 — $0.045$0.000028
Pętla agenta z tool calling~15K$0.04 — $0.22$0.00014
1 000 dialogów dziennie~3M$7.50 — $45$0.028
Miesiąc produkcji (~100M)~100M$250 — $1 500$0.96

Podejście Provider-agnostic w TanStack AI oznacza, że przejście na Gonka to edycja jednej linii (baseURL), a nie przepisywanie kodu. Jednocześnie twoje bezpieczne typowo narzędzia, ustrukturyzowane wyjście i hooki React pozostają bez zmian. Dla aplikacji z tysiącami użytkowników różnica to dziesiątki tysięcy dolarów miesięcznie.

Cena Gonka: wejście ~$0.0069 za 1M tokenów, wyjście ×3. To setki–tysiące razy taniej niż bezpośrednie taryfy OpenAI i Anthropic.

Bezpieczne typowo narzędzia i wybór modelu

Główną cechą TanStack AI jest jednolity kontrakt toolDefinition(): narzędzie jest definiowane raz (wejście/wyjście przez Zod, ArkType, Valibot lub JSON Schema), a implementacja jest powiązana po stronie serwera lub klienta. MiniMax M2.7, DeepSeek V4 Flash i GLM-5.3 Flash obsługują natywny tool calling przez Gonka, dzięki czemu agenci działają niezawodnie — bez parsowania odpowiedzi tekstowych.

import { chat, toolDefinition } from '@tanstack/ai'
import { gonka } from './gonka'
import { z } from 'zod'

const getWeather = toolDefinition({
  name: 'getWeather',
  description: 'Sprawdź pogodę w mieście',
  inputSchema: z.object({ city: z.string() }),
  outputSchema: z.object({ tempC: z.number() }),
}).server(async ({ city }) => {
  return { tempC: 21 } // twoje rzeczywiste wywołanie API
})

const stream = chat({
  adapter: gonka('MiniMaxAI/MiniMax-M2.7'),
  messages: [{ role: 'user', content: 'Jaka jest pogoda w Moskwie?' }],
  tools: [getWeather],
  modelOptions: { max_tokens: 8192 },
})

Który model wybrać:

  • MiniMaxAI/MiniMax-M2.7 — domyślny, balans między szybkością a jakością, długi kontekst. Limit odpowiedzi 8192.
  • deepseek-ai/DeepSeek-V4-Flash-0731 — jeden z najdłuższych kontekstów w sieci (380K), tanie duże prompty. Limit odpowiedzi 32768.
  • zai-org/GLM-5.3-Flash — model reasoning: rozumuje przed udzieleniem odpowiedzi, silny w skomplikowanej logice; najdłuższy kontekst w sieci (390K). Limit odpowiedzi 8192; rozumowanie zużywa część max_tokens.

Dzięki runtime adapter switching w TanStack AI można trzymać wszystkie trzy modele w jednym providerze i przełączać się między nimi w locie — na przykład zadania z rozumowaniem na GLM-5.3 Flash, szybkie odpowiedzi na MiniMax.

TanStack AI + Gonka = aplikacje AI z silnym typowaniem w TypeScript za grosze. Połączenie przez openaiCompatible — jedna zmiana baseURL, a streaming-chat, agenci i tools działają za $0.0069/1M tokenów zamiast $2.50–15 w OpenAI. Startowe tokeny pozwalają na testy bez karty płatniczej.

Chcesz wiedzieć więcej?

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

Odbierz darmowe tokeny →