
Use Claude com o SDK da OpenAI: endpoint compatível com OpenAI, streaming, ferramentas e limites
O código escrito para o SDK da OpenAI pode chamar o Claude sem precisar ser reescrito: aponte base_url para o /v1do gateway, use uma chave do gateway e um ID de modelo Claude. O endpoint aceita solicitações Chat Completions, transmite em streaming no mesmo formato e oferece suporte a chamadas de funções. Alguns recursos do Claude só existem no formato nativo da Anthropic; a última seção explica quando mudar.
Informações sobre o endpoint
| Item | Valor |
|---|---|
| URL base | https://aiprimetech.io/v1 |
| Endpoint de chat | POST https://aiprimetech.io/v1/chat/completions |
| Lista de modelos | GET https://aiprimetech.io/v1/models |
| Autenticação | Authorization: Bearer <key>; x-api-key também é aceito |
| Modelos | IDs do Claude, como claude-sonnet-5; IDs do GPT com uma chave do grupo Codex |
Python
pip install openaiimport os
from openai import OpenAI
client = OpenAI(base_url="https://aiprimetech.io/v1", api_key=os.environ["AIPRIME_API_KEY"])
resp = client.chat.completions.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain idempotency keys in two sentences."},
],
)
print(resp.choices[0].message.content)
print(resp.usage)base_url deve terminar em /v1: o SDK acrescenta /chat/completions ao final. Sem /v1 a solicitação chega ao site e retorna HTML; com /v1 duas vezes, retorna 404 page not found.
Node.js
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://aiprimetech.io/v1", apiKey: process.env.AIPRIME_API_KEY });
const resp = await client.chat.completions.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Write a haiku about retries." }],
});
console.log(resp.choices[0].message.content);Transmissão
stream = client.chat.completions.create(
model="claude-sonnet-5",
max_tokens=2048,
stream=True,
stream_options={"include_usage": True},
messages=[{"role": "user", "content": "Outline a zero-downtime migration."}],
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
if chunk.usage:
print("\n", chunk.usage)Use streaming para respostas longas: uma solicitação sem streaming precisa terminar dentro do tempo limite do cliente; com streaming, isso não é necessário. include_usage adiciona um bloco final com a contagem de tokens. Saiba mais sobre por que isso importa em respostas de LLM com streaming.
Chamada de funções
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Current weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
resp = client.chat.completions.create(
model="claude-sonnet-5", max_tokens=512, tools=tools,
messages=[{"role": "user", "content": "What is the weather in Paris?"}],
)
call = resp.choices[0].message.tool_calls[0]
print(call.function.name, call.function.arguments) # get_weather {"city": "Paris"}A resposta retorna com finish_reason: "tool_calls" e, no estilo OpenAI, tool_calls. Execute a função, acrescente uma mensagem tool com o resultado e o tool_call_idcorrespondente e faça outra chamada, exatamente como com os modelos da OpenAI.
Raciocínio e pensamento
reasoning_effort corresponde à configuração de esforço do Claude e aceita low, medium, high, xhigh ou max. O valor none é rejeitado. Quando o modelo pensa, seu raciocínio chega em um campo separado reasoning_content ao lado de content, de modo que o código que lê message.content continua funcionando sem alterações.
resp = client.chat.completions.create(
model="claude-opus-5-5", max_tokens=4096, reasoning_effort="high",
messages=[{"role": "user", "content": "Find the bug in this function: ..."}],
)Modelos
| ID do modelo | Use para |
|---|---|
claude-sonnet-5 | Padrão para programação e trabalho com agentes: rápido, eficiente e de preço intermediário. |
claude-opus-5-5 | Raciocínio mais complexo, grandes refatorações e execuções longas de agentes. |
claude-fable-5-1 | O mais capaz e mais caro; reserve-o para as tarefas mais difíceis. |
claude-haiku-4-5 | Barato e rápido: títulos, resumos, classificação e pequenas etapas. |
Use estes IDs exatamente como estão. IDs antigos com data, como claude-3-5-sonnet-20241022 ainda aparecem em algumas listas de modelos, mas não são disponibilizados e retornam um erro de modelo não compatível.
Quando usar a API nativa da Anthropic
O formato da OpenAI abrange chat, streaming, ferramentas e imagens. Use o formato Messages da própria Anthropic, no mesmo gateway, quando precisar de pontos explícitos de delimitação do cache de prompts, blocos de pensamento que são reenviados entre turnos, documentos PDF ou citações. O guia do SDK Python da Anthropic e a guia do Vercel AI SDK abordam essa opção.
Solução de problemas
| O que você vê | Causa | Correção |
|---|---|---|
Um erro de análise de JSON, com a resposta começando por < | base_url sem /v1 | https://aiprimetech.io/v1 |
404 page not found | /v1 duas vezes | Exatamente um /v1 |
401 Invalid API key | Chave ausente ou incorreta no processo | Verifique a variável; cada chave pertence a um gateway |
| Modelo não compatível | ID de modelo antigo com data ou com erro de digitação | Use um ID da tabela acima |
'none' is not supported | reasoning_effort="none" | Use low ou superior, ou omita esse parâmetro |
429 Concurrency limit exceeded for user | Requisições demais em andamento | Limite o paralelismo; consulte limites de requisições e novas tentativas |
| Tempo limite excedido em respostas longas | Solicitação longa sem streaming | Use streaming ou aumente o tempo limite do cliente |
Perguntas frequentes
Posso usar o Claude com o SDK da OpenAI?
Qual URL base devo usar para o Claude no SDK da OpenAI?
As chamadas de função funcionam com o Claude por meio do formato da OpenAI?
Quando devo usar a API nativa da Anthropic?
Obtenha uma chave de API — sem precisar de conta na Anthropic nem de lista de espera.
Obtenha sua chave de APIAI Prime Tech é um gateway de API independente. Não tem afiliação com a Anthropic, não é endossado por ela e não é seu revendedor. Claude e os nomes dos modelos relacionados são marcas comerciais de seus respectivos proprietários.