Các phần cơ sở kiến thức ▾

Điều hướng

▸ Bắt đầu tại đây Theo vai trò

Danh mục

Công cụ 54
Bảng thuật ngữ 12

Công cụ

TanStack AI + Gonka — Ứng dụng AI trên TypeScript giá rẻ

TanStack AI (@tanstack/ai) là SDK an toàn kiểu (type-safe) cho TypeScript từ đội ngũ TanStack (tác giả của Query, Router, Table). Kiến trúc Provider-agnostic: streaming-chat, tool calling nguyên bản, agent, đầu ra có cấu trúc và đa phương thức thông qua bộ adapter thống nhất. Có sẵn các binding cho React, Vue, Svelte, Solid và Preact (useChat và các hook khác) cộng với headless-client cho server.

Vấn đề tương tự như bất kỳ framework AI nào — chi phí suy luận (inference). TanStack AI hỗ trợ sẵn OpenAI, Anthropic và Gemini, nhưng giá trực tiếp của các nhà cung cấp này ($2.50–15 cho 1M token) khiến việc chạy chat và agent thực tế trở nên đắt đỏ: các hội thoại streaming và vòng lặp tool tiêu tốn hàng triệu token rất nhanh.

Tính năng chính của TanStack AI là hàm openaiCompatible(): cách tốt nhất để kết nối bất kỳ endpoint nào tương thích với OpenAI. Điều này có nghĩa là JoinGonka Gateway có thể tích hợp mà không cần adapter tùy chỉnh — bạn chỉ cần chỉ định baseURL, key và danh sách model. Kết quả: cùng một chat và agent an toàn kiểu (type-safe), nhưng với $0.0062/1M token qua mạng phi tập trung Gonka thay vì $2.50–15 của OpenAI.

Bước 1: Cài đặt TanStack AI và nhận khóa

Cài đặt gói (core + OpenAI-adapter, nơi chứa openaiCompatible):

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

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

Đối với giao diện trò chuyện trên React, hãy thêm client và hooks:

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

API-khóa JoinGonka: nếu chưa có — hãy đăng ký tại gate.joingonka.ai/register, nhận 3M token miễn phí và tạo khóa jg-xxx trong Dashboard → API Keys. Một khóa và một số dư hoạt động cho cả định dạng OpenAI và Anthropic.

Bước 2: Kết nối Gonka qua openaiCompatible

Trong TanStack AI, nhà cung cấp tương thích OpenAI tùy chỉnh được cấu hình bằng hàm openaiCompatible(): bạn thiết lập baseURL, apiKey và danh sách model một lần, sau đó chọn model cho từng lần gọi. Gateway của chúng tôi nói định dạng Chat Completions, nên ta giữ api: 'chat-completions' (đây là giá trị mặc định).

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

// Gonka provider: configured once
export const gonka = openaiCompatible({
  name: 'gonka',
  baseURL: 'https://gate.joingonka.ai/v1',
  apiKey: process.env.GONKA_API_KEY!, // jg-your-key
  api: 'chat-completions',
  models: [
    'MiniMaxAI/MiniMax-M2.7', // default
    'deepseek-ai/DeepSeek-V4-Flash-0731',
    'zai-org/GLM-5.3-Flash', // reasoning model
  ],
})

Chat streaming trên server (ví dụ route handler trong bất kỳ framework fullstack nào hoặc TanStack Start). Độ dài phản hồi được đặt qua modelOptions — đây là điểm duy nhất cho các tham số wire gốc (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 }, // Gateway output cap
  })

  return toServerSentEventsResponse(stream)
}

Client React qua hook useChat — stream phản hồi từ server lên 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('What is Gonka?')}>
        Ask
      </button>
    </div>
  )
}

Không cần server: cùng nhà cung cấp đó hoạt động trực tiếp trong script hoặc backend — gọi chat() và đọc luồng. Kết nối tới Gonka giống nhau cho mọi phương án.

Tham số model qua Gateway: ngữ cảnh — 180K token với MiniMax M2.7, 380K với DeepSeek V4 Flash và 390K với GLM-5.3 Flash. Giới hạn max_tokens — 8192 với MiniMax M2.7 và GLM-5.3 Flash, 32768 với DeepSeek V4 Flash. Nếu không chỉ định max_tokens, mặc định cho non-stream là 1500, nên với phản hồi dài hãy đặt nó rõ ràng.

So sánh chi phí

TanStack AI hoạt động thuận tiện như nhau thông qua giá trực tiếp của OpenAI/Anthropic và thông qua Gonka — chỉ cần thay đổi baseURL. Nhưng giá cả khác biệt hoàn toàn. Hãy so sánh tải thực tế của ứng dụng sản xuất trên TanStack AI:

Kịch bảnTokenOpenAI / AnthropicJoinGonka Gonka
Một phản hồi streaming chat~3K$0.008 — $0.045$0.000028
Vòng lặp agent với tool calling~15K$0.04 — $0.22$0.00014
1 000 hội thoại mỗi ngày~3M$7.50 — $45$0.028
Một tháng sản xuất (~100M)~100M$250 — $1 500$0.96

Phương pháp Provider-agnostic của TanStack AI có nghĩa là việc chuyển sang Gonka chỉ là thay đổi một dòng (baseURL), không cần viết lại mã. Đồng thời, các tool an toàn kiểu, đầu ra có cấu trúc và React-hook của bạn vẫn được giữ nguyên. Đối với một ứng dụng với hàng ngàn người dùng, sự khác biệt là hàng chục ngàn đô la mỗi tháng.

Giá của Gonka: đầu vào ~$0.0062 cho 1M token, đầu ra ×3. Điều này rẻ hơn hàng trăm đến hàng nghìn lần so với giá trực tiếp của OpenAI và Anthropic.

Công cụ an toàn kiểu và lựa chọn mô hình

Điểm đặc biệt nhất của TanStack AI là hợp đồng thống nhất toolDefinition(): công cụ được mô tả một lần (đầu vào/đầu ra qua Zod, ArkType, Valibot hoặc JSON Schema), còn phần triển khai được gắn kết trên server hoặc client. MiniMax M2.7, DeepSeek V4 Flash và GLM-5.3 Flash hỗ trợ native tool calling qua Gonka, nhờ đó các agent hoạt động đáng tin cậy — không cần phân tích cú pháp câu trả lời dạng văn bản.

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

const getWeather = toolDefinition({
  name: 'getWeather',
  description: 'Get the weather in a city',
  inputSchema: z.object({ city: z.string() }),
  outputSchema: z.object({ tempC: z.number() }),
}).server(async ({ city }) => {
  return { tempC: 21 } // your real API call
})

const stream = chat({
  adapter: gonka('MiniMaxAI/MiniMax-M2.7'),
  messages: [{ role: 'user', content: 'What is the weather in Moscow?' }],
  tools: [getWeather],
  modelOptions: { max_tokens: 8192 },
})

Nên chọn model nào:

  • MiniMaxAI/MiniMax-M2.7 — mặc định, cân bằng giữa tốc độ và chất lượng, ngữ cảnh dài. Giới hạn phản hồi 8192.
  • deepseek-ai/DeepSeek-V4-Flash-0731 — một trong những ngữ cảnh dài nhất của mạng lưới (380K), prompt lớn giá rẻ. Giới hạn phản hồi 32768.
  • zai-org/GLM-5.3-Flash — model reasoning: suy luận trước khi trả lời, mạnh về logic phức tạp; ngữ cảnh dài nhất của mạng lưới (390K). Giới hạn phản hồi 8192; phần suy luận tiêu tốn một phần max_tokens.

Nhờ runtime adapter switching trong TanStack AI, bạn có thể giữ cả ba model trong cùng một provider và chuyển đổi giữa chúng tức thì — ví dụ, các tác vụ suy luận dùng GLM-5.3 Flash, phản hồi nhanh dùng MiniMax.

TanStack AI + Gonka = ứng dụng AI kiểu an toàn trên TypeScript với chi phí cực thấp. Kết nối thông qua openaiCompatible — chỉ cần một thay đổi baseURL, và chat streaming, tác nhân và công cụ hoạt động với giá $0.0062/1M token thay vì $2.50–15 tại OpenAI. Token khởi đầu cho phép bạn trải nghiệm mà không cần thẻ tín dụng.

Muốn tìm hiểu thêm?

Khám phá các phần khác hoặc bắt đầu kiếm GNK ngay bây giờ.

Nhận token miễn phí →