Outras SDKs e Boas Práticas de Compatibilidade com OpenAI
Um checklist para escolher entre um SDK nativo Go, Java, C#, PHP ou Ruby e o atalho de migração compatível com OpenAI, e para usar cada um bem depois de escolhido.
Como Usar Este Checklist
- Trabalhe primeiro na seção A se você ainda não escolheu um caminho de integração; as seções B-D assumem que você já tem um.
- Releia esta lista sempre que adicionar uma nova linguagem a um backend poliglota, ou quando um protótipo de camada de compatibilidade estiver prestes a se tornar uma solução permanente.
- Trate os itens não marcados como perguntas abertas a serem resolvidas antes que uma integração Claude vá para produção, não como polimento opcional.
A - Escolhendo um Caminho de Integração
- Combine o SDK com a linguagem do serviço, não com a preferência pessoal. Um serviço Go deve usar
anthropic-sdk-go; um aplicativo Ruby deve usar o SDK Ruby, mesmo que a linguagem favorita da equipe seja outra. - Use a camada de compatibilidade OpenAI apenas como uma ponte, não como um destino. Ela é construída para migração rápida e testes lado a lado, não como o caminho de integração recomendado a longo prazo.
- Verifique a referência de mapeamento de parâmetros antes de migrar uma base de código que usa parâmetros OpenAI incomuns. Penalidades de amostragem, requisições de múltiplas completações e formatos de chamadas de função são os locais mais prováveis para encontrar uma lacuna.
- Planeje o caminho de graduação da camada de compatibilidade com antecedência. Decida, antes de começar, qual condição ("assim que validarmos a qualidade da saída", "assim que o protótipo receber tráfego real") aciona a mudança para o SDK nativo.
- Aceite que um backend poliglota pode usar vários SDKs oficiais simultaneamente. Não há um imposto de compatibilidade entre SDKs; um gateway Go e um service mesh Java podem chamar Claude nativamente sem qualquer sobrecarga de coordenação entre eles.
B - Trabalhando com um SDK Nativo (Go, Java, C#, PHP, Ruby)
- Construa o cliente uma vez e reutilize-o. Construir um novo cliente por requisição (especialmente em Go, Java e C#) descarta o pooling de conexões e adiciona latência evitável.
- Leia a chave de API da configuração do ambiente, não de strings codificadas. O construtor do cliente de cada SDK aceita uma chave de API originada de
ANTHROPIC_API_KEYpor convenção; mantenha-a fora do controle de versão. - Defina um
max_tokensexplícito para cada requisição. Nenhum dos cinco SDKs fornece um padrão implícito razoável; dimensione-o para o comprimento esperado da sua resposta. - Combine o tratamento de erros com a convenção própria da linguagem, não com os hábitos de outra linguagem. Verifique os erros retornados em Go, capture exceções tipadas em Java e C#, e trate exceções lançadas em PHP e Ruby, da maneira que o código nativo dessa linguagem normalmente faria.
- Trate um motivo de parada
tool_usecomo "aguardando", não como "concluído". Execute a ferramenta solicitada, então envie umtool_resultem uma chamada subsequente antes de considerar a troca como completa.
C - Uso Idiomático de Ferramentas Entre Linguagens
- Use o formato de esquema natural de cada linguagem para definições de ferramentas. Structs em Go, builders em Java, objetos tipados em C#, arrays associativos em PHP, hashes em Ruby; não lute contra os idiomas da linguagem para fazer cinco SDKs parecerem idênticos.
- Lembre-se que o protocolo de rede é idêntico, independentemente da sintaxe. Um esquema de ferramenta construído como uma struct Go e um construído como um hash Ruby produzem o mesmo JSON Schema na rede; depure no nível do protocolo quando algo parecer errado, não apenas no nível da linguagem.
- Combine cada
tool_resultcom seu IDtool_usede origem. Este requisito é idêntico em todos os cinco SDKs; um ID incorreto ou ausente produz uma requisição rejeitada, não importa qual linguagem a enviou. - Valide o formato de entrada da ferramenta no lado do receptor, especialmente em PHP e Ruby. Nenhuma das linguagens verifica o tipo da requisição ou resposta em tempo de compilação, então adicione sua própria validação antes de confiar em campos como a entrada de uma ferramenta.
D - Streaming em Java e C#
- Consuma o stream do Java através de try-with-resources.
StreamResponsemantém uma conexão HTTP aberta; falhar em fechá-la vaza conexões sob carga sustentada. - Mantenha as chamadas de streaming do C# totalmente assíncronas de ponta a ponta. Use
await foreachdentro de uma cadeia de métodosasync; chamar.Resultou.Wait()em uma chamada de streaming arrisca deadlocks e derrota o propósito deIAsyncEnumerable. - Não assuma que os deltas de texto se alinham com os limites de palavras ou frases. Armazene em buffer e renderize incrementalmente em ambas as linguagens sem assumir que um delta termina de forma limpa.
- Acumule JSON parcial para entrada
tool_usetransmitida antes de analisá-lo. Os argumentos de um blocotool_usepodem chegar como fragmentos JSON incompletos; analise apenas quando o evento de parada do bloco for disparado. - Verifique o motivo final de parada, não apenas o último delta de texto recebido. Uma resposta que parou cedo devido a
max_tokensse parece com uma completa se você estiver apenas observando o texto, então leia explicitamente o motivo de parada do evento terminal.
Quando Você Terminar
Trabalhe na seção A uma vez para cada nova integração, e mantenha B-D como uma referência contínua ao construir contra o SDK que o serviço acabar usando.
Se mais de alguns itens na seção A permanecerem desmarcados para um serviço agora em produção na camada de compatibilidade, isso é um sinal de que a migração para um SDK nativo está atrasada, não opcional.
FAQs
Devo começar com a camada de compatibilidade OpenAI ou um SDK nativo?
Comece com a camada de compatibilidade apenas se você já tiver uma integração OpenAI funcionando e quiser um teste rápido ou migração. Se você está construindo do zero, vá direto para o SDK nativo para sua linguagem; não há benefício da camada de compatibilidade para um projeto greenfield.
É errado deixar um serviço na camada de compatibilidade permanentemente?
Não é automaticamente errado, mas é uma troca: você está limitado à superfície de parâmetros em formato OpenAI e herda suas lacunas de tradução. Se os parâmetros que você usa mapeiam todos de forma limpa e a equipe não tem largura de banda para migrar, pode ser uma escolha aceitável a longo prazo.
Qual é o erro mais comum que as equipes cometem ao escolher entre SDKs?
Escolher uma linguagem para a integração com base na preferência da equipe em vez do que o serviço é realmente escrito, o que então força um salto desnecessário entre linguagens apenas para chamar Claude.
Por que o tratamento de erros do Go difere do Java e do C# nesta lista?
Porque cada SDK segue a convenção de sua linguagem hospedeira: Go retorna erros como valores, enquanto Java e C# lançam exceções tipadas. Isso não é inconsistência nos SDKs Claude; é cada SDK combinando os idiomas que os desenvolvedores nessa linguagem já esperam.
Preciso me preocupar com vazamentos de conexão em todos os SDKs, ou apenas em Java?
O StreamResponse do Java é o caso mais explícito, pois é um AutoCloseable que você deve fechar. Go e C# gerenciam o ciclo de vida da conexão subjacente de forma mais implícita através de seus padrões de iterador e stream assíncrono, mas reutilizar um único cliente de longa duração (em vez de construir um por requisição) é importante em todos eles.
Qual é a maior lacuna a observar ao migrar código de chamada de ferramentas através da camada de compatibilidade?
A incompatibilidade de formato entre os parâmetros de chamada de função da OpenAI e o protocolo tool_use do Claude. Teste fluxos de chamada de ferramentas especificamente após a migração, em vez de assumir que eles se comportam identicamente apenas porque a geração de texto simples funcionou.
Posso misturar a camada de compatibilidade e um SDK nativo na mesma base de código?
Sim, temporariamente, como uma estratégia de migração: mantenha a camada de compatibilidade em caminhos de chamada estáveis e de baixo risco enquanto porta primeiro os caminhos de chamada de maior valor ou com muitas ferramentas para o SDK nativo.
Quão rigoroso devo ser em combinar a sintaxe do esquema com os idiomas de cada linguagem?
Rigoroso. Lutar contra as convenções naturais de uma linguagem (como tentar forçar esquemas estritamente tipados em PHP ou Ruby) adiciona atrito sem adicionar segurança, já que o protocolo de rede é idêntico, independentemente de quão idiomático você escreva o código do lado do cliente.
O que deve acionar a saída da camada de compatibilidade definitivamente?
Qualquer um dos seguintes: você validou que Claude é o modelo certo para produção, você precisa de uma capacidade específica do Claude não exposta através da superfície em formato OpenAI, ou você atingiu uma lacuna de mapeamento de parâmetros que afeta um recurso real.
Existe um custo de desempenho ao usar um SDK nativo em vez da camada de compatibilidade?
Não de forma significativa pelo próprio SDK; ambos conversam via HTTP com a infraestrutura da Anthropic. O benefício prático do SDK nativo é uma superfície de parâmetros mais completa e tratamento idiomático de erros/streaming, não velocidade bruta.
Relacionados
- Além de Python e TypeScript: Os Outros SDKs Oficiais Claude - a visão geral conceitual por trás da orientação da seção A
- Migrando uma Base de Código do SDK OpenAI para Claude - o guia completo de migração por trás das seções A e B
- Referência de Mapeamento de Parâmetros da Camada de Compatibilidade OpenAI - os detalhes parâmetro a parâmetro por trás da orientação de mapeamento da seção A
- Uso Idiomático de Ferramentas em Go, Java, C#, PHP e Ruby - a comparação completa por trás da seção C
- Respostas de Streaming em Java e C# com os SDKs Oficiais - o guia completo por trás da seção D
Versões da Stack: Escrito contra a linha de modelos Claude atual em ~junho de 2026 - Claude Fable 5, Claude Opus 4.8, Claude Sonnet 5 (o padrão), e Claude Haiku 4.5 - e os SDKs oficiais atuais para Go, Java, C#, PHP e Ruby. Nomes de modelos, versões de SDK e preços mudam rapidamente - verifique os detalhes atuais em platform.claude.com/docs antes de confiar neles.