Voltar ao blog
Guia·23 de maio de 2026·6 min de leitura

Migrando da OpenAI para a Kunavo em 10 minutos — Python, Node, LangChain, Vercel AI SDK

Quatro formas de integração com a OpenAI, a mudança de uma linha necessária para começar a operar pela Kunavo e um teste básico que custa menos de um centavo.

Se seu aplicativo já conversa com a API da OpenAI, mudar para o Kunavo leva cerca de dez minutos — a maior parte desse tempo é para se cadastrar. Este guia percorre os quatro formatos de integração mais comuns entre as equipes e a alteração de uma linha necessária em cada um.

Etapa 0 — Obtenha uma chave (2 minutos)

  1. Cadastre-se em kunavo.com/app/signup. Recarregue a partir de US$ 10, pague conforme o uso e seu saldo nunca expira.
  2. Acesse /app/keys e crie uma chave. Ela começa com sk-kn-.
  3. Defina a variável de ambiente: export KUNAVO_API_KEY=sk-kn-....

Etapa 1 — Troque seu SDK (1 minuto)

Python (pacote openai)

migrate.py
# Before — pointing at OpenAI directly
from openai import OpenAI
client = OpenAI(
    api_key=os.environ["OPENAI_API_KEY"],
)

# After — pointing at Kunavo. Everything else stays the same.
from openai import OpenAI
client = OpenAI(
    api_key=os.environ["KUNAVO_API_KEY"],
    base_url="https://api.kunavo.com/v1",
)

Node / TypeScript

migrate.mjs
// Before
import OpenAI from "openai";
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

// After
import OpenAI from "openai";
const client = new OpenAI({
  apiKey: process.env.KUNAVO_API_KEY,
  baseURL: "https://api.kunavo.com/v1",
});

LangChain

O LangChain usa internamente o mesmo cliente da OpenAI, portanto a alteração é idêntica. O ID do modelo agora é um slug do Kunavo — veja /models para a lista atualizada (experimente claude-sonnet-4-6, gpt-5-6-terra, claude-opus-4-7).

langchain_setup.py
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="claude-sonnet-4-6",          # switched the model
    api_key=os.environ["KUNAVO_API_KEY"],
    base_url="https://api.kunavo.com/v1",
)

Vercel AI SDK

@ai-sdk/openai lê a URL base e a chave de API das variáveis de ambiente por padrão. Defina-as e pronto — todos os auxiliares do framework (streamText, generateObject, novas tentativas e roteamento de ferramentas) funcionam sem alterações.

vercel_ai.mjs
import { openai } from "@ai-sdk/openai";

// @ai-sdk/openai reads OPENAI_BASE_URL automatically
process.env.OPENAI_BASE_URL = "https://api.kunavo.com/v1";
process.env.OPENAI_API_KEY = process.env.KUNAVO_API_KEY;

const model = openai("claude-sonnet-4-6");
// then use streamText / generateText / streamObject as before

SDK da Anthropic (se você já usa Claude)

O Kunavo expõe a Messages API nativa da Anthropic em /v1/messages, além do formato da OpenAI — portanto, você não precisa trocar de SDK.

anthropic_sdk.py
from anthropic import Anthropic

# Before — Anthropic SDK against api.anthropic.com
client = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])

# After — same SDK, against Kunavo. Caching, thinking, tools all pass through.
client = Anthropic(
    api_key=os.environ["KUNAVO_API_KEY"],
    base_url="https://api.kunavo.com",   # SDK appends /v1/messages
)

Etapa 2 — Faça um teste rápido do saldo (1 minuto)

Antes de alterar o código de produção, execute um teste barato contra claude-haiku-4-5. Se isso retornar com sucesso, sua chave funciona, a cobrança funciona e a camada de roteamento está saudável.

smoke_test.py
# Cheap, deterministic-ish smoke test for migration validation.
resp = client.chat.completions.create(
    model="claude-haiku-4-5",            # the cheapest Claude
    messages=[{"role": "user", "content": "ping"}],
    max_tokens=8,
    temperature=0,
)
assert resp.choices[0].message.content, "empty response"
print("ok — Kunavo wallet works, total cost ~$0.0001")

Etapa 3 — Mova o tráfego (5 minutos)

O padrão seguro: duas variáveis de ambiente no seu aplicativo — AI_BASE_URL e AI_API_KEY — selecionadas por ambiente. A produção permanece na OpenAI; o staging muda para o Kunavo. Depois de 24 horas, mude a produção.

Se quiser entender o impacto no custo antes da migração, o dashboard do Kunavo mostra o custo por chamada em comparação com a tarifa oficial do upstream — é fácil calcular a economia mensal projetada com seus prompts reais.

O que permanece igual

  • Seu SDK e sua base de código.
  • Streaming, chamadas de função, uso de ferramentas, visão e saídas estruturadas.
  • Os esquemas exatos de solicitação e resposta da OpenAI.
  • Formato dos erros (error.message / error.type / error.code).

O que muda para melhor

  • Preços. Os preços e descontos disponíveis variam de acordo com o modelo — consulte as tarifas atuais em /pricing.
  • Modalidade. O mesmo SDK alcança Claude (claude-opus-4-7), GPT (gpt-5-6-sol), GPT-Image-2, Nano Banana, Veo 3 e Suno — veja /models.
  • Faturamento. Carteira Stripe, com preços em USD. Cartões em todos os lugares; Apple Pay, Google Pay e Link em todos os lugares, exceto na Índia; além de métodos locais por país (Alipay e WeChat Pay na China, Cash App Pay, Klarna e ACH nos EUA, UPI na Índia, KakaoPay na Coreia…) — a lista completa está em /docs/billing.
  • Failover. Failover imediato entre vários fornecedores, com redirecionamento automático dentro da mesma solicitação quando um upstream oscila.

Observações sobre o caminho de erro

  • Endpoints específicos da OpenAI que não cobrimos hoje: /v1/responses (use /v1/chat/completions), /v1/assistants (mantenha o estado do seu lado; somos um gateway sem estado), /v1/realtime (planejado).
  • Alguns recursos específicos do Claude — cache_control, thinking estendido — funcionam melhor pelo endpoint nativo /v1/messages, não pelo formato da OpenAI.
  • O cache de prompts não é um deles: no formato da OpenAI, o Kunavo define ele mesmo os pontos de interrupção do cache do Claude em um prompt longo, e um cache_control que você coloque em uma mensagem ou em uma definição de ferramenta é repassado ao Claude.

Travou? contact@kunavo.com — uma pessoa responde em até um dia útil. Se você estiver fazendo uma migração importante, marcaremos uma reunião.