Home / Impara / Usa Claude con l'SDK OpenAI: endpoint compatibile con OpenAI, streaming, strumenti e limiti
SDK OpenAI + Claude. Due connettori fisici dalle forme complementari collegano una finestra di codice a un'altra, una chiara metafora della compatibilità degli SDK.

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 basehttps://aiprimetech.io/v1
Endpoint chatPOST https://aiprimetech.io/v1/chat/completions
Elenco dei modelliGET https://aiprimetech.io/v1/models
AutenticazioneAuthorization: Bearer <key>; x-api-key è anch'esso accettato
ModelliID Claude come claude-sonnet-5; ID GPT con una chiave del gruppo Codex

Python

terminale
pip install openai
app.py
import 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

app.mjs
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.py
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.py
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.

reasoning.py
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-5Scelta predefinita per programmazione e attività degli agenti: veloce, potente, di fascia media.
claude-opus-5-5Ragionamenti più complessi, refactoring estesi, esecuzioni prolungate degli agenti.
claude-fable-5-1Il più capace e il più costoso; riservalo alle attività più difficili.
claude-haiku-4-5Economico 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 /v1https://aiprimetech.io/v1
404 page not found/v1 due volteEsattamente un /v1
401 Invalid API keyChiave mancante o errata nel processoControlla la variabile; una chiave appartiene a un solo gateway
Modello non supportatoID del modello vecchio e con data, oppure scritto in modo erratoUsa un ID della tabella qui sopra
'none' is not supportedreasoning_effort="none"Usa low o superiore, oppure omettilo
429 Concurrency limit exceeded for userTroppe richieste in corsoLimita il parallelismo; consulta limiti di frequenza e nuovi tentativi
Timeout per le risposte lungheRichiesta lunga senza streamingUsa lo streaming o aumenta il timeout del client

Domande frequenti

Posso usare Claude con l'SDK OpenAI?
Sì, tramite un endpoint compatibile con OpenAI: imposta base_url su /v1 del gateway, usa una chiave API del gateway e un ID di modello Claude come claude-sonnet-5. Lo streaming e le chiamate di funzione funzionano nel formato OpenAI.
Quale URL di base devo usare per Claude nell'SDK OpenAI?
L'URL del gateway che termina con /v1, ad esempio https://aiprimetech.io/v1. L'SDK aggiunge /chat/completions.
Le chiamate di funzione funzionano con Claude tramite il formato OpenAI?
Sì. Passa tools nel formato OpenAI; Claude restituisce tool_calls con finish_reason impostato su tool_calls, e tu rispondi con messaggi tool come di consueto.
Quando dovrei usare invece l'API nativa di Anthropic?
Quando ti servono la memorizzazione esplicita dei prompt nella cache, blocchi di ragionamento tra i turni, input PDF o citazioni. Queste funzionalità fanno parte del formato Messages di Anthropic.
Inizia a usare Claude in pochi minuti

Ottieni una chiave API: non servono un account Anthropic né una lista d'attesa.

Ottieni la tua chiave API

AI 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.

Altre guide all'API di Claude

Come ottenere una chiave API di ClaudeI prezzi dell'API Claude, spiegatiIl modo più economico per usare l'API ClaudeCursor illimitato con l'API ClaudeAccesso illimitato a Claude CodeGateway API Claude e accesso diretto ad Anthropic a confrontoI modelli Claude spiegati: un confronto tra Claude Opus, Sonnet, Haiku e Fable — tutti i modelli API Claude, i nomi dei modelli Anthropic e i prezzi (2026)Pagare l'API Claude con criptovaluteAccesso all'API Claude senza lista d'attesaCome ridurre l'utilizzo dei token di ClaudeCline illimitato con l'API ClaudeRoo Code illimitato con l'API ClaudeClaude illimitato negli IDE JetBrainsAider con Claude tramite un gateway: ANTHROPIC_API_BASE, file di configurazione, modalità architect e soluzioni ai problemiClaude illimitato in VS CodeConfigurazione di OpenCode per Claude: impostazione di opencode.json, modelli ed errori comuniHermes Agent con Claude tramite un gateway: configurazione di un provider personalizzato, controllo dei costi e soluzioni ai problemiEseguire OpenClaw senza limiti con ClaudeCosa significa un'API compatibile con AnthropicChiave API di Claude Code — ANTHROPIC_API_KEY: come ottenerla, configurarla e quando usare invece claude setup-tokenCosti dell'API di Claude Code — Prezzi e come ridurliGli errori dell'API Claude spiegati: errore del server 500, sovraccarico 529, limite di frequenza 429, richiesta non valida 400 — e la soluzione per ciascunoCome acquistare crediti per l'API di Claude e perché un credito Claude conviene più di qualsiasi offerta per «acquistare un account Claude»API Claude gratuita: esiste una chiave API di Claude gratuita e che cosa è davvero gratuito nel 2026?API Claude e abbonamento Claude Pro/Max a confronto — Quale scegliereCodex CLI con un provider personalizzato: config.toml, modelli GPT e Claude, estensione IDE e soluzioni ai problemiCollegare Claude a n8nInstradare LiteLLM verso ClaudeUsare Claude in Kilo CodeGitHub Copilot Chat con Claude tramite un gateway: configurazione di Custom Endpoint, modalità agente e soluzioni ai problemiCollega Zed a Claude tramite il gatewayCollega Cherry Studio a ClaudeChatAnthropic in LangChain: importazione, base_url, streaming, strumenti ed erroriSDK Python di Anthropic: installazione, configurazione di base_url, streaming e gestione degli erroriClaude con Vercel AI SDK: baseURL di createAnthropic, streaming e soluzioni ai problemiEsegui Factory Droid con ClaudeL'API di Claude Code spiegataIntegrare l'API di Claude nella tua applicazioneCome ottenere un utilizzo illimitato di Claude e perché non esiste un «Claude Code craccato»