Vercel AI SDK
O Vercel AI SDK e o framework mais popular para construir aplicacoes de IA com Next.js. Como o Tokia expoe a API no formato OpenAI-compatible, basta usar o provider @ai-sdk/openai apontando para o endpoint Tokia.
Instalacao
npm install ai @ai-sdk/openaiConfiguracao do provider
Crie uma instancia do provider OpenAI com baseURL e apiKey do Tokia:
import { createOpenAI } from "@ai-sdk/openai";
const tokia = createOpenAI({
apiKey: process.env.TOKIA_API_KEY!,
baseURL: "https://api.usetokia.com/v1",
});Streaming (Route Handler)
O caso de uso mais comum: um endpoint de chat que retorna tokens via SSE.
import { createOpenAI } from "@ai-sdk/openai";
import { streamText } from "ai";
const tokia = createOpenAI({
apiKey: process.env.TOKIA_API_KEY!,
baseURL: "https://api.usetokia.com/v1",
});
export async function POST(req: Request) {
const { messages } = await req.json();
const result = streamText({
model: tokia("gpt-4o-mini"),
system: "Responda em portugues brasileiro, de forma concisa.",
messages,
});
return result.toDataStreamResponse();
}useChat (componente cliente)
No lado do cliente, o hook useChat conecta ao endpoint e gerencia estado automaticamente:
"use client";
import { useChat } from "ai/react";
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit, isLoading } =
useChat({ api: "/api/chat" });
return (
<div>
{messages.map((m) => (
<div key={m.id} className={m.role === "user" ? "text-right" : ""}>
<strong>{m.role === "user" ? "Voce" : "IA"}:</strong> {m.content}
</div>
))}
<form onSubmit={handleSubmit}>
<input
value={input}
onChange={handleInputChange}
placeholder="Digite sua mensagem..."
disabled={isLoading}
/>
<button type="submit" disabled={isLoading}>
Enviar
</button>
</form>
</div>
);
}generateText (sem streaming)
Para chamadas que nao precisam de streaming (background jobs, APIs internas):
import { createOpenAI } from "@ai-sdk/openai";
import { generateText } from "ai";
const tokia = createOpenAI({
apiKey: process.env.TOKIA_API_KEY!,
baseURL: "https://api.usetokia.com/v1",
});
const { text } = await generateText({
model: tokia("gpt-4o-mini"),
prompt: "Resuma a LGPD em 3 pontos.",
});Structured Outputs (generateObject)
Extraia dados estruturados com validacao de schema via Zod:
import { createOpenAI } from "@ai-sdk/openai";
import { generateObject } from "ai";
import { z } from "zod";
const tokia = createOpenAI({
apiKey: process.env.TOKIA_API_KEY!,
baseURL: "https://api.usetokia.com/v1",
});
const { object } = await generateObject({
model: tokia("gpt-4o-mini"),
schema: z.object({
nome: z.string(),
email: z.string().email(),
sentimento: z.enum(["positivo", "negativo", "neutro"]),
}),
prompt: "Extraia os dados: 'Oi, sou Maria, maria@email.com, adorei o produto!'",
});Tool Calling
Defina ferramentas que o modelo pode chamar durante a geracao:
import { createOpenAI } from "@ai-sdk/openai";
import { streamText, tool } from "ai";
import { z } from "zod";
const tokia = createOpenAI({
apiKey: process.env.TOKIA_API_KEY!,
baseURL: "https://api.usetokia.com/v1",
});
const result = streamText({
model: tokia("gpt-4o-mini"),
messages,
tools: {
consultarSaldo: tool({
description: "Consulta o saldo atual do usuario",
parameters: z.object({
userId: z.string().describe("ID do usuario"),
}),
execute: async ({ userId }) => {
return { saldo: "R$ 150,00", userId };
},
}),
},
});Trocar de modelo
A mesma key do Tokia acessa todos os modelos. Troque o primeiro argumento de tokia():
tokia("gpt-4o-mini")— rapido e barato para o grosso das tarefastokia("claude-sonnet-46")— qualidade maxima para raciociniotokia("gemini-2.5-flash")— otimo para tarefas com contexto longotokia("deepseek-v3-0324")— custo-beneficio para codigo
Lista completa em Modelos.
Variaveis de ambiente
TOKIA_API_KEY=sk-SUA_KEY_AQUISe preferir usar a variavel padrao do Vercel AI SDK (OPENAI_API_KEY), configure tambem OPENAI_API_BASE:
OPENAI_API_KEY=sk-SUA_KEY_TOKIA
OPENAI_API_BASE=https://api.usetokia.com/v1Proximos passos
- Streaming (SSE) — detalhes do protocolo SSE
- Tool Calling — guia completo de function calling
- Structured Outputs — JSON mode e JSON Schema
- Cookbook — receitas prontas para casos de uso comuns