IT ▾
Ottieni la chiave API

Cosa significa OpenAI-Compatible per un'API?

Un'API è definita openai-compatible quando puoi puntare un SDK OpenAI al suo URL, sostituire la chiave e il tuo codice esistente continua a funzionare. L'etichetta descrive il formato wire, nient'altro.

Aggiornato

Due macchine diverse unite da un connettore standard, che illustrano un formato API condiviso

Punti chiave

  • L'etichetta copre percorsi URL, strutture di richiesta e risposta JSON, autenticazione Bearer e streaming SSE.
  • Non dice nulla sul modello che risponde, sul suo comportamento o sui suoi costi.
  • Il cambio di solito significa modificare due valori: URL base e chiave API.
  • Testa streaming, tools, JSON mode e codici di errore prima di affidarti a un provider.

La risposta breve

Quando un provider dice che la sua API è openai-compatible, significa che accetta le stesse richieste HTTP che inviano le librerie client OpenAI e restituisce risposte nella stessa struttura. Mantieni il tuo codice, cambia l'URL base e la chiave, e la chiamata va a un server diverso.

Questa è l'intera promessa. È un'affermazione sull'interfaccia, come dire che due caricatori usano la stessa spina. Non ti dice cosa c'è dall'altra parte del cavo. Il modello, le sue regole di sicurezza, il suo prezzo e i suoi limiti sono tutti decisi dal provider e differiscono molto.

Cosa copre effettivamente l'etichetta

In pratica, la compatibilità OpenAI è un breve elenco di cose concrete. Se un provider le supporta tutte, la maggior parte del codice client funziona senza modifiche.

  • Percorsi. Le richieste chat vanno a POST /v1/chat/completions e l'elenco dei modelli viene da GET /v1/models.
  • Autenticazione. La chiave viaggia in un'intestazione Authorization: Bearer.
  • Corpo della richiesta. Una stringa model, un array messages di oggetti con role e content, e campi di campionamento opzionali come temperature, top_p, stop e seed.
  • Corpo della risposta. Un array choices con il messaggio dell'assistente, un finish_reason e un oggetto usage con conteggi token.
  • Streaming. Con stream: true il server invia Server-Sent Events, ognuno con un piccolo delta JSON, terminando con un marcatore finale.
  • Funzionalità opzionali. Tool calling, JSON mode e campi simili, dove il provider sceglie di supportarli.

Poiché così tanti strumenti sono stati scritti per questo formato, è diventato un target comune. Editor, framework agent, interfacce roleplay e script semplici ti permettono di inserire un URL base personalizzato, ed è tutto ciò di cui hanno bisogno.

Perché un formato è diventato il target comune

Il formato chat completions si è diffuso perché era semplice e arrivato presto. Un autore di strumenti che lo supporta una volta può raggiungere molti backend, e un autore di backend che lo supporta una volta può raggiungere molti strumenti. È un buon affare per entrambe le parti, quindi il formato è rimasto, anche tra servizi che non hanno nulla a che fare con l'azienda che lo ha progettato.

Per te come sviluppatore questo ha un significato pratico. Il tuo codice non ha bisogno di un'integrazione diversa per ogni provider. Puoi spostare un prototipo tra endpoint in un pomeriggio, confrontare due modelli sugli stessi prompt o mantenere un secondo provider come fallback quando il primo è lento. Il costo di cambiare idea è basso e questo rende più facile provare un nuovo servizio senza impegnarsi con esso.

Il lato opposto è che la superficie condivisa nasconde differenze reali. Poiché il cambio è così facile, è tentante assumere che tutto dietro l'URL sia equivalente. Non lo è, e le sezioni seguenti mostrano dove appaiono solitamente le lacune.

Cosa non ti dice

Ecco dove le persone rimangono sorprese. L'etichetta omette tutto ciò che determina se l'API è utile per il tuo lavoro.

Il modello dietro di essa

Un endpoint compatibile può servire qualsiasi modello. Alcuni servono modelli open-weight, altri instradano verso diversi vendor, altri avvolgono un modello proprietario. La compatibilità non significa che il servizio è eseguito da OpenAI, e non significa che il modello si comporta come uno dei loro. Il nome del modello che passi in model è solo una stringa definita dal provider.

Comportamento di rifiuto

Le regole sui contenuti appartengono al modello e al provider, non al protocollo. Due API compatibili possono rispondere allo stesso prompt in modi opposti. Se il tuo caso d'uso è finzione, roleplay o altro contenuto adulto legale, controlla cosa dice il provider sui rifiuti prima di collegare qualsiasi cosa.

Profondità delle funzionalità

Alcuni provider implementano solo chat. Altri aggiungono tools, JSON mode, log probabilità o endpoint extra. Un client che invia un campo che il server ignora non fallirà sempre rumorosamente, quindi è possibile un disallineamento silenzioso.

Limiti, prezzi ed errori

Rate limits, lunghezza del contesto, dimensione massima del corpo e prezzo per token sono tutte scelte del provider. Anche i corpi di errore differiscono nei dettagli anche quando i codici di stato HTTP corrispondono, quindi la logica di retry dovrebbe basarsi sui codici di stato e sulle intestazioni piuttosto che sul testo del messaggio.

Un test di compatibilità veloce

Puoi verificare un provider in pochi minuti con tre richieste. Sostituisci la chiave con la tua. Questo esempio usa l'URL base di questo sito.

curl https://api.kimicode.top/v1/models \
  -H "Authorization: Bearer YOUR_API_KEY"

curl https://api.kimicode.top/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "Reply with the word ready."}]
  }'

La prima chiamata conferma la chiave e elenca gli ID dei modelli. La seconda verifica la struttura chat. Poi testa le parti su cui dipende la tua applicazione: aggiungi "stream": true e osserva i chunk incrementali, passa un array tools se usi function calling, e imposta response_format a {"type":"json_object"} se hai bisogno di output analizzabile.

Attiva anche un errore intenzionalmente, ad esempio una chiave errata. Vuoi vedere un HTTP status pulito e un corpo di errore JSON che il tuo client può gestire.

La stessa chiamata in Node

L'SDK JavaScript prende gli stessi due valori. Ecco una chiamata streaming, che è la struttura usata dalla maggior parte delle interfacce chat.

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.kimicode.top/v1",
  apiKey: process.env.API_KEY,
});

const stream = await client.chat.completions.create({
  model: "uncensored",
  stream: true,
  messages: [{ role: "user", content: "Name three uses of SSE." }],
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

Se questo stampa il testo parola per parola, il percorso di streaming funziona dall'inizio alla fine. Lo stesso ciclo funziona con qualsiasi provider compatibile, che è il punto fondamentale del formato.

Come appare il passaggio nel codice

Con l'SDK Python ufficiale, il cambiamento richiede due argomenti nel costruttore. Il resto del tuo programma resta come era.

from openai import OpenAI

client = OpenAI(
    base_url="https://api.kimicode.top/v1",
    api_key="YOUR_API_KEY",
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Summarize SSE in one sentence."}],
)
print(resp.choices[0].message.content)

L'SDK Node segue la stessa idea con le opzioni baseURL e apiKey. Molti strumenti leggono OPENAI_BASE_URL e OPENAI_API_KEY dall'ambiente, quindi a volte puoi fare il passaggio senza toccare il codice.

Ricorda di cambiare anche la stringa del modello. Una richiesta che nomina un modello che il nuovo server non ospita fallirà, ed è l'errore iniziale più comune.

Dove si inserisce l'API di questo sito

Questo servizio è un'API ospitata, solo testo, che segue il formato OpenAI. Esegue un modello a pesi aperti, gestito da un provider indipendente e ottimizzato per rispondere senza filtri sui contenuti per uso adulto legale. Non è l'API ufficiale di alcun fornitore di modelli e non effettua routing tra fornitori. L'ID del modello è uncensored.

Supporta lo streaming su SSE con utilizzo riportato alla fine, la chiamata di funzioni, la modalità JSON, e passa attraverso temperatura, top_p, stop, seed e le penalità. La finestra di contesto è di 100.000 token per prompt e completamento insieme. Non genera immagini o audio, e non offre embedding o fine-tuning. Una regola è fissa: nessun contenuto sessuale che coinvolga minorenni.

La fatturazione è prepagata e misurata: $0,15 per 1M di token di input e $0,50 per 1M di token di output, senza abbonamento. Puoi vedere i numeri nella pagina dei prezzi, e la documentazione illustra una prima richiesta. Se vuoi provarlo senza pagare, i nuovi account possono richiedere un credito di prova di $0,50 con un clic nella pagina della chiave API.

Problemi di compatibilità comuni

  1. Base URL errato. L'URL dovrebbe terminare con /v1. I client aggiungono /chat/completions da soli, quindi aggiungerlo alla base produce un 404.
  2. Parametri non supportati. Se una libreria invia un campo che il server non conosce, verifica se viene rifiutato o ignorato, quindi rimuovilo.
  3. Streaming e concorrenza. Una richiesta in streaming occupa uno slot di concorrenza fino alla fine dello stream. Se la tua app apre molti stream, puoi incontrare un errore 429 con codice concurrency anche se il tuo conteggio per minuto è basso.
  4. Retry su 429. Tratta il 429 come un segnale per aspettare. Quando è presente l'intestazione Retry-After, onoralo.
  5. Conteggio dei token. Non assumere che il tokenizer di un altro provider corrisponda. Leggi l'oggetto usage nella risposta per i numeri su cui vieni fatturato.

Nessuno di questi è difficile da risolvere una volta che sai dove cercare, e la maggior parte si riduce a leggere attentamente il primo messaggio di errore.

Domande e risposte

Un'API compatibile con OpenAI è creata da OpenAI?

No. Il termine descrive il formato delle richieste e delle risposte. Molti provider indipendenti lo seguono e eseguono i propri modelli.

Posso usare l'SDK Python o Node.js di OpenAI con essa?

Sì. Imposta l'URL di base e la chiave API nel costruttore del client, e usa l'ID del modello che il provider ti fornisce. Per questo servizio è uncensored.

Funzioneranno tutte le funzionalità di OpenAI su un'API compatibile?

Non necessariamente. I provider scelgono quali funzionalità implementare. Qui ottieni completamenti chat, streaming, chiamata di funzioni e modalità JSON, ma nessuna immagine, audio o embedding.

La compatibilità significa le stesse risposte di un altro modello?

No. Le risposte dipendono dal modello e dalle regole del provider. Fai test con i tuoi prompt invece di assumere un comportamento simile.

La tua chiave è a un modulo di distanza

Crea un account, copia la chiave, modifica l'URL di base. È tutta la configurazione.

Ottieni la chiave API