Base URL and SDK Migration7 de julho de 2026Flatkey

Migração de SDK para Múltiplos Modelos: Mantenha Clientes OpenAI para Claude, Gemini e DeepSeek

Planeje uma migração de SDK para múltiplos modelos que mantém os clientes OpenAI enquanto testa Claude, Gemini, DeepSeek, ferramentas, streaming, faturamento e reversão.

Migração de SDK para Múltiplos Modelos: Mantenha Clientes OpenAI para Claude, Gemini e DeepSeek

A migração de SDK para múltiplos modelos não deve começar substituindo todas as bibliotecas de cliente em sua aplicação. Se o seu código de produção já utiliza o SDK OpenAI para Python ou Node para conclusões de chat, o primeiro passo mais seguro é manter essa superfície de cliente estável, mover a escolha do provedor para a configuração e comprovar o comportamento do Claude, Gemini e DeepSeek por trás de uma rota compatível antes de ampliar o tráfego.

O Flatkey foi criado para equipes que desejam uma única chave, uma camada de roteamento compatível com OpenAI, acesso a modelos de vários provedores e revisão de uso e faturamento em um só lugar. Isso o torna útil para uma migração de SDK para múltiplos modelos, mas não elimina a necessidade de testar famílias de endpoints, aliases de modelos, streaming, chamadas de ferramentas e registros de uso. Trate cada amostra de código aqui como um modelo até que você a valide com sua própria chave Flatkey e o catálogo de modelos atual.

O objetivo prático é simples: manter o objeto de solicitação que sua aplicação já conhece, isolar os poucos valores que precisam mudar e construir um pacote de prova antes da transição.

Matriz de Decisão para Migração de SDK para Múltiplos Modelos

Use esta matriz antes de alterar o código. Ela separa o que pode permanecer estável do que deve se tornar configurável.

CamadaManter EstávelTornar ConfigurávelProva a Salvar
Cliente SDKImportação existente do SDK OpenAI e caminho de chamada de conclusão de chatChave de API, URL base, tempo limite, política de nova tentativaVersão do SDK e configuração de inicialização editada
Formato da Solicitaçãomessages, model, stream, tools básicos onde suportadoExtras específicos do provedor e parâmetros não suportadosSolicitação mínima e resposta bruta
Seleção de ModeloAliases no nível da aplicação, como support_chat ou analysis_fastAlias de modelo do gateway e família de endpointsCaptura de tela ou exportação do catálogo de modelos
OperaçõesLogs existentes, IDs de solicitação e tratamento de errosMetadados de provedor, rota, uso, cota e reversãoEvidência do painel/leitura de confirmação
LançamentoCaminho de implantação atual da aplicaçãoVariáveis de ambiente para lançamento percentual e reversãoResponsável pela reversão e configuração anterior

Esta é a disciplina central da migração de SDK para múltiplos modelos: não misture substituição de biblioteca, migração de prompts, avaliação de provedor, validação de faturamento e lançamento em produção em uma única implantação.

O Que a Documentação Oficial Diz Sobre Compatibilidade

Os SDKs da OpenAI já suportam o padrão que você precisa. O atual README do OpenAI para Python documenta o cliente OpenAI e uma opção base_url, e o README para Node documenta o cliente OpenAI padrão e as conclusões de chat. A referência da API da OpenAI diz que o Chat Completions cria uma resposta de modelo para uma conversa, suporta streaming e retorna um objeto de conclusão de chat ou pedaços de stream.

Se você está dividindo o lançamento por ambiente de execução, combine esta lista de verificação com o guia de URL base personalizada do SDK OpenAI para Python e o guia de URL base do SDK OpenAI para Node. Se a primeira decisão for o roteamento de provedor em vez da configuração do cliente, use o guia de roteamento de API Claude vs GPT antes de escolher a carga de trabalho de teste.

A compatibilidade do provedor difere:

ProvedorSinal de Compatibilidade OficialImplicação para a Migração
SDK OpenAIPython suporta base_url; Node usa baseURL; Chat Completions tem campos messages, model, stream, tools e usage.Mantenha o wrapper do cliente OpenAI para a primeira fatia da migração.
Anthropic / ClaudeA Anthropic publica uma camada de compatibilidade com o SDK da OpenAI, mas diz que é principalmente para testes e comparação, não o caminho de produção a longo prazo para a maioria dos casos de uso. A API Messages nativa usa /v1/messages, max_tokens, messages e um parâmetro system de nível superior.Use a compatibilidade para uma avaliação rápida, mas teste os requisitos nativos do Claude antes de depender de recursos específicos do provedor.
Google GeminiO Google diz que os modelos Gemini são acessíveis através das bibliotecas OpenAI para Python, TypeScript/JavaScript e REST, alterando a chave de API, a URL base e o modelo.O Gemini é um bom candidato para um teste de fumaça no formato OpenAI, com o raciocínio e o comportamento específico do modelo verificados separadamente.
DeepSeekA DeepSeek afirma que seu formato de API é compatível com OpenAI e Anthropic; sua documentação de primeira chamada lista URLs base da OpenAI e da Anthropic e exemplos no formato OpenAI.O DeepSeek pode se encaixar no caminho do cliente OpenAI, mas as depreciações de nomes de modelos e as configurações de "thinking" precisam de verificações explícitas.
FlatkeyA página pública de modelos do Flatkey expõe tipos de endpoint como openai, anthropic e gemini; a página inicial mostra uma rota de conclusões de chat compatível com OpenAI.Selecione modelos pela família de endpoints, não apenas pelo nome do provedor.

A lição importante é que "compatível com OpenAI" geralmente significa que o cliente pode enviar uma solicitação no formato da OpenAI. Isso não significa que todos os parâmetros, esquemas de ferramentas, controle de raciocínio, entrada de mídia ou campo de uso se comportem de forma idêntica entre os provedores.

Passo 1: Congele a Fronteira do Cliente

Inicie a migração do SDK para múltiplos modelos colocando o cliente OpenAI por trás de uma única factory local. A factory deve ser o único lugar que conhece a chave, a URL base, o tempo limite e o alias do modelo.

import os
from openai import OpenAI


def make_llm_client() -> OpenAI:
    return OpenAI(
        api_key=os.environ["FLATKEY_API_KEY"],
        base_url=os.getenv("FLATKEY_BASE_URL", "https://router.flatkey.ai/v1"),
        timeout=float(os.getenv("LLM_TIMEOUT_SECONDS", "60")),
        max_retries=int(os.getenv("LLM_MAX_RETRIES", "2")),
    )


client = make_llm_client()

completion = client.chat.completions.create(
    model=os.environ["FLATKEY_MODEL"],
    messages=[
        {"role": "system", "content": "You answer with short implementation notes."},
        {"role": "user", "content": "Reply with exactly: migration probe ok"},
    ],
)

print(completion.choices[0].message.content)

Para Node:

import OpenAI from "openai";

export function makeLlmClient() {
  return new OpenAI({
    apiKey: process.env.FLATKEY_API_KEY,
    baseURL: process.env.FLATKEY_BASE_URL ?? "https://router.flatkey.ai/v1",
    timeout: Number(process.env.LLM_TIMEOUT_MS ?? 60000),
    maxRetries: Number(process.env.LLM_MAX_RETRIES ?? 2),
  });
}

const client = makeLlmClient();

const completion = await client.chat.completions.create({
  model: process.env.FLATKEY_MODEL,
  messages: [
    { role: "system", content: "You answer with short implementation notes." },
    { role: "user", content: "Reply with exactly: migration probe ok" },
  ],
});

console.log(completion.choices[0].message.content);

O aplicativo deve chamar make_llm_client() ou makeLlmClient(), e não construir clientes em controladores, workers e scripts. Essa fronteira única é o que permite que uma migração de SDK para múltiplos modelos permaneça reversível.

Passo 2: Crie um Mapa de Modelos e Endpoints

Não aponte todas as cargas de trabalho para um único nome de modelo novo. Comece com um mapa que nomeie a carga de trabalho, a família de endpoints, o provedor atual, o provedor de destino e o valor de rollback.

Carga de TrabalhoFamília de EndpointsCaminho AtualCaminho de DestinoRollback
Chat de suporteConclusões de chat no estilo OpenAIModelo OpenAI atualAlias de chat Flatkey para GPT, Claude, Gemini ou DeepSeekChave, URL base e modelo anteriores
Análise internaConclusões de chat no estilo OpenAIModelo OpenAI atualAlias de modelo Flatkey selecionado para raciocínio e custoAlias de modelo anterior
Fluxo de trabalho de ferramentasConclusões de chat com ferramentasModelo atual compatível com ferramentasModelo candidato com comportamento de ferramenta verificadoDesativar rota do provedor
UI de streamingStream de conclusões de chatAnalisador de stream atualProvedor candidato com prova de stream brutoReverter o tráfego de stream
Recurso nativo do ClaudeAPI de Mensagens da AnthropicCliente nativo do ClaudeManter nativo se a compatibilidade remover um recurso necessárioNão migrar este caminho

A página de modelos da Flatkey é útil aqui porque expõe os tipos de endpoint. Se um modelo estiver listado em uma família de endpoints nativa, não presuma que ele está disponível através do caminho de chat da OpenAI até que o catálogo da sua conta e os testes de fumaça (smoke tests) o comprovem.

Passo 3: Execute o Teste de Fumaça (Smoke Test) de Quatro Provedores

O teste de fumaça (smoke test) mínimo útil para a migração de SDK para múltiplos modelos tem quatro linhas de provedores e o mesmo prompt. Mantenha o prompt simples para que o estilo da resposta não oculte falhas de transporte.

TesteSolicitaçãoCondição de AprovaçãoFalha a Ser Triada
GPT ou modelo OpenAI atualSolicitação existente no formato OpenAI através da FlatkeyA resposta retorna, o uso é visível, os logs apontam para o alias esperadoChave errada, URL base errada, /v1 duplicado, modelo ausente
ClaudeMesma solicitação no formato OpenAI através do alias Flatkey selecionadoA resposta simples retorna; nenhum recurso não suportado na solicitaçãoMapeamento de mensagem de sistema, esquema de ferramentas, recursos nativos exclusivos do Claude
GeminiMesma solicitação no formato OpenAI através do alias Flatkey selecionadoA resposta simples retorna; os padrões de raciocínio são aceitáveisAlias do modelo, configurações de raciocínio, suposições multimodais
DeepSeekMesma solicitação no formato OpenAI através do alias Flatkey selecionadoA resposta simples retorna; o alias sensível à depreciação está atualizadoRenomeação do modelo, configurações de pensamento, analisador de stream

Salve o corpo da solicitação bruto, cabeçalhos redigidos, corpo da resposta, status HTTP, alias do modelo, ID da solicitação (se retornado) e a entrada de uso no painel. Se algum provedor precisar de um parâmetro diferente, mova esse parâmetro para um perfil de provedor em vez de espalhar ramificações if provider == pelo seu aplicativo.

Passo 4: Teste o Streaming e as Chamadas de Ferramentas Separadamente

Uma conclusão simples prova apenas o caminho de menor risco. Streaming e chamadas de ferramentas são contratos separados.

Para streaming, salve:

EvidênciaPor que é importante
Cabeçalhos de respostaConfirma se a rota retorna dados de event-stream.
Primeiro eventoDetecta problemas de buffer ou do analisador de proxy.
Evento finalConfirma o tratamento do fim do fluxo e o comportamento de uso.
Saída do analisador da UIProva que seu frontend não presumiu o formato do chunk de um provedor.

Para ferramentas, teste primeiro um esquema minúsculo:

{
  "type": "function",
  "function": {
    "name": "lookup_order_status",
    "description": "Return a test order status.",
    "parameters": {
      "type": "object",
      "properties": {
        "order_id": { "type": "string" }
      },
      "required": ["order_id"]
    }
  }
}

Não use seu maior esquema de ferramenta de produção como a primeira prova. A documentação de compatibilidade da Anthropic, por exemplo, aponta limitações em relação à compatibilidade com a OpenAI e recomenda a API nativa do Claude para o conjunto completo de recursos do Claude. Esse é exatamente o tipo de detalhe que uma lista de verificação de migração de SDK para múltiplos modelos deve capturar antes do lançamento.

Passo 5: Mantenha os Perfis de Provedor Pequenos

Os perfis de provedor devem descrever diferenças, não conter lógica de negócios.

{
  "support_chat": {
    "base_url_env": "FLATKEY_BASE_URL",
    "model_env": "FLATKEY_SUPPORT_CHAT_MODEL",
    "endpoint_family": "openai_chat_completions",
    "stream": true,
    "tools": "basic",
    "fallback_alias": "support_chat_previous"
  },
  "analysis_fast": {
    "base_url_env": "FLATKEY_BASE_URL",
    "model_env": "FLATKEY_ANALYSIS_FAST_MODEL",
    "endpoint_family": "openai_chat_completions",
    "stream": false,
    "tools": "none",
    "fallback_alias": "analysis_fast_previous"
  }
}

Mantenha os recursos nativos do provedor fora do caminho do cliente OpenAI compartilhado, a menos que você tenha testes para cada provedor de destino. Se citações do Claude, comportamento de mídia específico do Gemini, controles de pensamento do DeepSeek ou um endpoint de lote nativo do provedor forem necessários, crie um adaptador nativo nomeado e mantenha o caminho compatível com OpenAI para cargas de trabalho que realmente se encaixem nele.

Passo 6: Comprove o Faturamento e a Reversão

Uma migração que retorna texto, mas perde a evidência de faturamento, não está concluída. Antes de aumentar o tráfego, salve:

Verificação de OperaçõesCondição de Aprovação
Visibilidade de usoA solicitação aparece no uso ou nos logs do Flatkey com o contexto de rota/modelo esperado.
Revisão de custosOs registros de preços ou uso são visíveis o suficiente para que o financeiro ou as operações possam reconciliar.
Comportamento da cotaUma cota de teste baixa ou um limite de orçamento se comporta como esperado em uma chave de não produção.
Taxonomia de errosErros 401, 403, 404, 429, 5xx e de provedor são mapeados para ações claras do proprietário.
ReversãoUma mudança de ambiente retorna o tráfego para a chave/URL base/modelo anterior.

É aqui que a revisão unificada de faturamento e uso do Flatkey importa. O objetivo não é apenas o acesso a mais modelos. O objetivo de uma migração de SDK para múltiplos modelos é o acesso que o produto, as operações e o financeiro possam inspecionar após a movimentação do tráfego.

Um Fluxo de Trabalho de Transição para Migração de SDK para Múltiplos Modelos

Use esta ordem para a primeira fatia de produção:

  1. Escolha uma carga de trabalho de baixo risco com um cliente SDK OpenAI existente.
  2. Adicione a fábrica de clientes e as variáveis de ambiente sem alterar o provedor atual.
  3. Comprove o modelo atual através da nova fábrica.
  4. Comprove um alvo Claude, Gemini ou DeepSeek com uma conclusão simples.
  5. Comprove o streaming e as ferramentas apenas se essa carga de trabalho os utilizar.
  6. Verifique o uso, faturamento, tratamento de erros e reversão.
  7. Direcione uma pequena porcentagem do tráfego para o novo alias de modelo.
  8. Revise as falhas por provedor e família de endpoints antes de adicionar a próxima carga de trabalho.

Se a primeira carga de trabalho precisar de recursos nativos do provedor, escolha uma carga de trabalho diferente para a primeira migração de SDK para múltiplos modelos. A primeira fatia deve comprovar o padrão de migração, não todas as capacidades do modelo.

FAQ

Posso usar um cliente SDK OpenAI para Claude, Gemini e DeepSeek?

Você geralmente pode manter um cliente SDK OpenAI para rotas compatíveis com OpenAI, mas ainda precisa de testes específicos do provedor. Google e DeepSeek documentam o acesso compatível com OpenAI. A Anthropic documenta uma camada de compatibilidade com o SDK OpenAI, mas afirma que é principalmente para testes e comparação, em vez de ser a escolha de produção a longo prazo para a maioria dos casos de uso.

Devo migrar o tráfego da API de Respostas da mesma forma?

Apenas se o gateway de destino e o modelo de destino suportarem explicitamente a família de endpoints que você está usando. Conclusões de Chat e Respostas não são o mesmo contrato. Comece com a família de endpoints que seu aplicativo já usa e, em seguida, crie um plano de teste separado para Respostas.

Qual é o erro mais comum em uma migração de SDK para múltiplos modelos?

O erro mais comum é tratar a mudança da URL base como a migração inteira. Uma migração real de SDK para múltiplos modelos também verifica nomes de modelos, famílias de endpoints, streaming, ferramentas, uso, cota, tratamento de erros e reversão.

Quando devo manter um SDK de provedor nativo?

Mantenha um SDK de provedor nativo quando sua carga de trabalho depender de recursos específicos do provedor que a camada de compatibilidade não cobre. Recursos nativos do Claude, caminhos de mídia específicos do Gemini ou controles de raciocínio específicos do DeepSeek podem justificar um adaptador separado.

Lista de Verificação Final

Antes de considerar a migração concluída, confirme que você tem:

ItemConcluído Quando
Fábrica de clientesTodos os caminhos do aplicativo usam um wrapper do SDK OpenAI ou um adaptador nativo nomeado.
Divisão de configuraçãoChave de API, URL base, alias do modelo, tempo limite, novas tentativas e proprietário da rota são orientados pelo ambiente.
Prova do provedorOs candidatos GPT, Claude, Gemini e DeepSeek foram testados com evidências brutas salvas.
Prova de funcionalidadeStreaming e ferramentas foram testados separadamente do chat simples.
Prova de operaçõesUso, faturamento, cota, logs e erros são visíveis para os proprietários corretos.
Prova de reversãoUma alteração documentada retorna a carga de trabalho para a rota anterior.

A migração de SDK para múltiplos modelos funciona melhor quando é monótona: uma pequena carga de trabalho, um limite de cliente, um mapa de modelo e evidências para cada provedor que você adiciona. Quando estiver pronto para executar esses testes por meio de uma rota unificada, obtenha uma chave Flatkey e comece com um caminho de chat compatível com OpenAI de baixo risco.