Substituição da API OpenAI: Checklist de Migração
Uma substituição da API OpenAI só funciona bem se você verificar três coisas antes: quais endpoints seu código chama, quais recursos ele depende e como o novo modelo se comporta com seus prompts. Este checklist cobre os três, com comandos que você pode executar hoje.

Resumo
- Chat completions, respostas, streaming, tools e modo JSON funcionam com o SDK OpenAI padrão após uma alteração na base URL.
- Os endpoints de embeddings, imagem, áudio e ajuste fino não estão disponíveis. Mantenha-os no provedor atual.
- O modelo é diferente, então teste prompts antes de fazer a troca. Mantenha um indicador para reverter.
- O faturamento é pré-pago e por token: $0,15 por 1M de entrada e $0,50 por 1M de saída.
Passo 1: inventariar o que seu código chama
Antes de alterar qualquer coisa, liste quais recursos da OpenAI você realmente usa. A maioria dos projetos usa menos do que imagina, e a lista decide se esta troca é uma tarefa de cinco minutos ou parcial. Execute estes comandos na raiz do projeto:
# New values you will point the project at:
export OPENAI_BASE_URL="https://api.alternativeapiopenai.com/v1"
export OPENAI_API_KEY="YOUR_API_KEY"
export MODEL="uncensored"
# What does the code call today?
grep -rnE "embeddings|images\.|audio\.|fine_tuning|moderations|assistants|batches" --include="*.py" --include="*.js" --include="*.ts" .
grep -rnE "model *[=:] *['\"]" --include="*.py" --include="*.js" --include="*.ts" .
O primeiro grep encontra endpoints que esta API não oferece. O segundo lista todos os nomes de modelo codificados, que você precisará alterar. Coloque os resultados em uma tabela curta com uma linha por recurso: usado, não usado e o que fazer a respeito.
Passo 2: comparar com o que é suportado
| Recurso OpenAI | Aqui | Notas |
|---|---|---|
| Completions de chat | Sim | POST /v1/chat/completions |
| API de Respostas | Sim | POST /v1/responses |
| Listar modelos | Sim | GET /v1/models retorna uncensored |
| Streaming | Sim | SSE, com uso no final |
| Chamada de funções | Sim | tools, tool_choice, tool_calls em streaming, resultados com role: "tool" |
| Modo JSON | Sim | response_format: {"type":"json_object"} |
| Parâmetros | Sim | temperature, top_p, stop, seed, penalidades |
| Embeddings | Não | Não oferecido |
| Geração de imagem, áudio, vídeo | Não | Apenas texto |
| Fine-tuning | Não | Não oferecido |
Qualquer coisa que não esteja no lado suportado desta tabela deve ser tratada como indisponível até que você confirme na documentação. Isso inclui saída com esquema restrito: o modo JSON faz o modelo retornar JSON válido, mas não impõe seu próprio esquema, então mantenha seu código de validação. Entradas de imagem em uma mensagem de chat também não estão listadas, então planeje-se para usar apenas prompts de texto.
O modelo é um único modelo de pesos abertos executado por um provedor independente. Não é o modelo da OpenAI nem uma API oficial de nenhum fornecedor, e não faz roteamento entre fornecedores. Espere estilo diferente, pontos fortes diferentes e modos de falha diferentes.
Passo 3: fazer a troca
Com o SDK oficial Python, três valores mudam:
from openai import OpenAI
client = OpenAI(
base_url="https://api.alternativeapiopenai.com/v1", # was the default OpenAI URL
api_key="YOUR_API_KEY", # was your old key
)
resp = client.chat.completions.create(
model="uncensored", # was your old model name
messages=[{"role": "user", "content": "Give me three names for a coffee shop."}],
)
print(resp.choices[0].message.content)
Melhor ainda, mantenha a Base URL, a chave e o nome do modelo na configuração para que a mesma compilação possa apontar para qualquer provedor. Um padrão simples são três variáveis de ambiente: LLM_BASE_URL, LLM_API_KEY e LLM_MODEL. Assim, uma reversão significa alterar três valores e reiniciar, sem enviar uma nova versão.
Se seu código usa a API de Respostas, os mesmos três valores se aplicam. Para frameworks como LangChain ou LlamaIndex, procure o conector compatível com OpenAI e passe a mesma base URL e nome do modelo.
Passo 4: testar antes da produção
O risco em qualquer troca de modelo é o comportamento, não a conexão. Teste estes na ordem:
- Conexão. Uma requisição com curl. Se retornar uma resposta, a chave e a URL estão corretas.
- Seus prompts reais. Reproduza pelo menos vinte prompts de produção e analise a saída. Verifique tom, comprimento e aderência às instruções.
- Chamadas de ferramentas. Execute cada uma de suas ferramentas e verifique os argumentos que o modelo produz. Confirme que seu loop lida com
tool_callsem uma resposta em streaming. - Saída JSON. Execute cem chamadas no modo JSON e conte quantas falham no seu parser ou esquema.
- Entradas longas. A janela de contexto é de 100.000 tokens para prompt mais resposta. Teste um prompt grande uma vez para saber quanto tempo leva.
- Limites. Uma chave completa permite 8 requisições simultâneas e 300 por minuto. Faça load-test no seu pico real.
As contagens de tokens diferirão
Se seu código estima tokens com uma biblioteca de tokenizer feita para outro modelo, trate o resultado como aproximado. Use o objeto usage em cada resposta para faturamento e orçamento, e deixe uma margem de segurança ao cortar o histórico para caber na janela de 100.000 tokens. Definir max_tokens é opcional aqui, mas um limite sensato impede que uma resposta descontrolada gaste mais do que você planejou.
Como os erros se parecem
Ao ultrapassar o limite, a API retorna HTTP 429 com o código rate_limited (requisições por minuto) ou concurrency (muitas de uma vez). Uma sobrecarga temporária também retorna 429, com o cabeçalho Retry-After: 5. Uma solicitação em streaming mantém sua cota de concorrência até o fim do stream, então clientes lentos contam contra você. Solicitações falhas ou recusadas não são cobradas.
Passo 5: verificar o custo
O preço é $0,15 por 1M de tokens de input e $0,50 por 1M de tokens de output, pagos a partir de crédito pré-pago. Para comparar com sua conta atual, use suas próprias contagens de tokens do campo usage e aplique a fórmula: custo = input_tokens x 0,15 / 1.000.000 + output_tokens x 0,50 / 1.000.000. Para outros provedores, verifique seus preços atuais e aplique as mesmas contagens.
Um exemplo prático: uma ferramenta de suporte lida com 30.000 requisições por mês com 1.200 tokens de input e 250 de output cada. Input é 36M tokens, custando $5,40. Output é 7,5M tokens, custando $3,75. O total mensal é $9,15. Se a mesma carga preencher a janela de contexto em vez disso, com 100.000 tokens de input, cada requisição custa $0,015 apenas em input, então o tamanho do prompt é o número a observar.
A página de preços lista valores de recarregar. Eles variam de $20 a $500, com +5% de $50, +10% de $100 e +15% de $200, pagos apenas em cripto (USDT no TRC20 ou USDC na Base). O crédito nunca expira e não há assinatura. O guia relacionado sobre preços de API para modelos uncensored explica a estrutura de custos em mais profundidade.
Passo 6: lançar e manter uma via de retorno
Envie uma pequena parte do tráfego para o novo endpoint primeiro. Registre o ID da requisição do cabeçalho X-Request-Id para rastrear uma resposta ruim, e registre X-Balance-USD após as chamadas para que o crédito nunca acabe sem aviso. Alerta quando o saldo cair abaixo de alguns dias de gasto.
Quando o tráfego sombra parecer bom, aumente a parte em etapas e mantenha a chave do provedor antigo válida por uma semana. Para qualquer coisa envolvendo conteúdo adulto, o modelo é destinado para uso adulto legal, e conteúdo sexual envolvendo menores de idade é sempre recusado. Prompts não são usados para treinamento.
Contas novas podem solicitar $0,50 de crédito de teste com um clique na página da chave de API, válido por 7 dias, o suficiente para executar toda a lista de verificação em uma amostra do seu tráfego.
Mais guias
Perguntas frequentes
Meu código existente do SDK OpenAI funcionará?
Para chat completions e respostas, sim. Altere a Base URL, a chave e o nome do modelo. Chamadas para embeddings, imagens, áudio ou fine-tuning não funcionarão.
A qualidade da resposta é a mesma dos modelos da OpenAI?
Não, é um modelo de pesos abertos diferente. Teste seus próprios prompts em vez de assumir paridade em qualquer direção.
Como reverter se algo quebrar?
Mantenha a base URL, a chave e o modelo na configuração e mantenha a chave do seu provedor antigo ativa. Voltar atrás é apenas uma alteração de configuração.
Suporta chamada de funções?
Sim. Use ferramentas e tool_choice, e retorne os resultados como mensagens com role: tool. tool_calls em streaming são suportados.
A geração de chave requer apenas um formulário
Entre, copie sua chave e atualize sua Base URL. Essa é toda a configuração necessária.