
Usa Claude con l'SDK OpenAI: endpoint compatibile con OpenAI, streaming, strumenti e limiti
Il codice scritto per l'SDK OpenAI può chiamare Claude senza essere riscritto: indirizza base_url al /v1del gateway, usa una chiave del gateway e un ID modello Claude. L'endpoint accetta richieste Chat Completions, trasmette in streaming nello stesso formato e supporta le chiamate di funzione. Alcune funzionalità di Claude sono disponibili solo nel formato nativo di Anthropic; l'ultima sezione spiega quando passare a quel formato.
Informazioni sull'endpoint
| Voce | Valore |
|---|---|
| URL di base | https://aiprimetech.io/v1 |
| Endpoint chat | POST https://aiprimetech.io/v1/chat/completions |
| Elenco dei modelli | GET https://aiprimetech.io/v1/models |
| Autenticazione | Authorization: Bearer <key>; x-api-key è anch'esso accettato |
| Modelli | ID Claude come claude-sonnet-5; ID GPT con una chiave del gruppo 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 terminare con /v1: l'SDK aggiunge /chat/completions a questo indirizzo. Senza /v1 la richiesta arriva al sito web e restituisce HTML; con /v1 ripetuto due volte restituisce 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);Streaming
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)Usa lo streaming per le risposte lunghe: una richiesta senza streaming deve completarsi entro il timeout del client, mentre uno stream no. include_usage aggiunge un blocco finale con il conteggio dei token. Per saperne di più sul perché è importante, consulta streaming delle risposte degli LLM.
Chiamata di funzioni
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"}La risposta viene restituita con finish_reason: "tool_calls" e, in stile OpenAI, tool_calls. Esegui la funzione, aggiungi un tool messaggio con il risultato e il corrispondente tool_call_id, quindi effettua un'altra chiamata, esattamente come con i modelli OpenAI.
Ragionamento e thinking
reasoning_effort corrisponde all'impostazione del livello di impegno di Claude e accetta low, medium, high, xhigh o max. Il valore none viene rifiutato. Quando il modello elabora il suo ragionamento, questo viene restituito in un campo reasoning_content separato, accanto a content, quindi il codice che legge message.content continua a funzionare senza modifiche.
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: ..."}],
)Modelli
| ID del modello | Usalo per |
|---|---|
claude-sonnet-5 | Scelta predefinita per programmazione e attività degli agenti: veloce, potente, di fascia media. |
claude-opus-5-5 | Ragionamenti più complessi, refactoring estesi, esecuzioni prolungate degli agenti. |
claude-fable-5-1 | Il più capace e il più costoso; riservalo alle attività più difficili. |
claude-haiku-4-5 | Economico e rapido: titoli, riepiloghi, classificazione, piccoli passaggi. |
Usa questi ID esattamente come riportati. I vecchi ID con data, come claude-3-5-sonnet-20241022 compaiono ancora in alcuni elenchi di modelli, ma non sono disponibili e restituiscono un errore di modello non supportato.
Quando usare invece l'API nativa di Anthropic
Il formato OpenAI supporta chat, streaming, strumenti e immagini. Usa il formato Messages di Anthropic, sullo stesso gateway, quando ti servono punti di interruzione espliciti per la cache dei prompt, blocchi di ragionamento da reinviare tra un turno e l'altro, documenti PDF o citazioni. La guida all'SDK Python di Anthropic e l'impostazione guida a Vercel AI SDK illustra questo approccio.
Risoluzione dei problemi
| Che cosa vedi | Causa | Soluzione |
|---|---|---|
Un errore di parsing di JSON, con una risposta che inizia con < | base_url senza /v1 | https://aiprimetech.io/v1 |
404 page not found | /v1 due volte | Esattamente un /v1 |
401 Invalid API key | Chiave mancante o errata nel processo | Controlla la variabile; una chiave appartiene a un solo gateway |
| Modello non supportato | ID del modello vecchio e con data, oppure scritto in modo errato | Usa un ID della tabella qui sopra |
'none' is not supported | reasoning_effort="none" | Usa low o superiore, oppure omettilo |
429 Concurrency limit exceeded for user | Troppe richieste in corso | Limita il parallelismo; consulta limiti di frequenza e nuovi tentativi |
| Timeout per le risposte lunghe | Richiesta lunga senza streaming | Usa lo streaming o aumenta il timeout del client |
Domande frequenti
Posso usare Claude con l'SDK OpenAI?
Quale URL di base devo usare per Claude nell'SDK OpenAI?
Le chiamate di funzione funzionano con Claude tramite il formato OpenAI?
Quando dovrei usare invece l'API nativa di Anthropic?
Ottieni una chiave API: non servono un account Anthropic né una lista d'attesa.
Ottieni la tua chiave APIAI Prime Tech è un gateway API indipendente. Non è affiliato ad Anthropic, non è approvato da Anthropic e non è un suo rivenditore. Claude e i nomi dei modelli correlati sono marchi dei rispettivi proprietari.