I tre valori di cui hai bisogno
Ogni client compatibile con OpenAI richiede le stesse tre cose. Ecco quali sono per questo servizio.
| Impostazione | Valore |
|---|---|
| URL di base | https://api.getcodexapi.com/v1 |
| Chiave API | La tua chiave dalla pagina delle chiavi API |
| Modello | uncensored |
La chiave viene inviata come Authorization: Bearer YOUR_KEY. I due endpoint che puoi chiamare sono POST /v1/chat/completions e GET /v1/models. Questo è un servizio indipendente che esegue un modello a pesi aperti, non il Codex di OpenAI, quindi non incollare l'endpoint di OpenAI o una chiave OpenAI nella stessa impostazione.
Verifica la connessione con curl
Prima di modificare la configurazione di un'app, conferma che la chiave e l'URL funzionino da terminale. L'elenco dei modelli è il controllo più economico, poiché non richiede prompt:
curl https://api.getcodexapi.com/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
Dovresti ricevere un elenco JSON che include il modello uncensored. Poi invia una vera completazione:
curl https://api.getcodexapi.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Say hello in five words."}]
}'
Se entrambe le chiamate funzionano, il problema in eventuali fallimenti successivi è nella configurazione del tuo client, non del servizio. Gli header di risposta includono X-Request-Id, utile da conservare se dovessi mai tracciare una chiamata specifica, e X-Balance-USD, che mostra il tuo credito residuo.
Python con l'SDK OpenAI
Il pacchetto ufficiale openai accetta l'URL base nel costruttore del client. Nient'altro nel tuo codice cambia.
from openai import OpenAI
client = OpenAI(
base_url="https://api.getcodexapi.com/v1",
api_key="YOUR_API_KEY",
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain what a base URL is in two sentences."},
],
)
print(resp.choices[0].message.content)
Se preferisci tenere la configurazione fuori dal codice, l'SDK legge anche OPENAI_BASE_URL e OPENAI_API_KEY dall'ambiente:
export OPENAI_BASE_URL="https://api.getcodexapi.com/v1"
export OPENAI_API_KEY="YOUR_API_KEY"
Con queste impostazioni, OpenAI() senza argomenti le rileva. È utile perché molti strumenti di terze parti basati sull'SDK ereditano le stesse variabili senza modifiche al codice.
Node.js
L'SDK JavaScript usa lo stesso nome di opzione, scritto baseURL.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.getcodexapi.com/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Write a haiku about version control." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
Lo streaming torna come eventi server-sent con stream: true e l'utilizzo è incluso alla fine. Tieni presente che una richiesta in streaming occupa uno dei tuoi slot di concorrenza fino al termine dello stream, quindi uno stream abbandonato senza chiusura continua a contare contro il limite.
App con una schermata di impostazioni
Gli strumenti desktop e gli editor di solito etichettano il campo in uno di questi tre modi: "Base URL", "API Base" o "endpoint compatibile con OpenAI". Tutti vogliono la stessa stringa. Alcune note che fanno risparmiare tempo:
- Scegli il tipo di provider OpenAI o "custom OpenAI-compatible", non uno specifico del fornitore.
- Digita il nome del modello a mano se l'app ha una casella di testo libero.
uncensoredè l'ID esatto. - Se l'app ha un pulsante "testa la connessione", di solito chiama l'elenco dei modelli, che questa API supporta.
- Alcune app memorizzano nella cache l'elenco dei modelli di un provider precedente. Rimuovi la vecchia voce e aggiungine una nuova se il menu a discesa sembra errato.
Per un esempio pratico in un editor specifico, consulta la guida per connettere Cursor, o la pagina API di coding per il quadro generale. Il riferimento completo dei parametri è nella documentazione API.
Una volta che la connessione funziona, salva i valori esatti da qualche parte dove puoi ritrovarli: l'URL, il nome del modello e la data di creazione della chiave. I team spesso perdono un'ora dopo per una copia della configurazione che contiene ancora un valore vecchio. Un unico file di esempio condiviso nel repository, con un segnaposto invece della chiave reale, previene questo problema.
Errori comuni e relative soluzioni
L'URL finisce come /v1/v1
Alcuni client aggiungono /v1 da soli. Se le tue richieste falliscono e il log del client mostra un percorso con /v1/v1/chat/completions, rimuovi il /v1 dall'URL base che hai inserito. Succede anche il contrario: un client che non lo aggiunge lo necessita nelle tue impostazioni. Il log del percorso della richiesta risolve rapidamente la questione.
Hai inserito l'endpoint completo nell'URL base
L'URL base si ferma a /v1. Non inserire /chat/completions lì. L'SDK aggiunge il percorso per ogni chiamata.
Una barra finale o un errore di battitura nell'host
La maggior parte degli SDK tollera una barra finale, ma alcuni strumenti più vecchi costruiscono i percorsi per semplice concatenazione e finiscono con una doppia barra. Rimuovila se vedi risposte 404 strane.
Chiave errata o chiave di un altro servizio
Una chiave OpenAI non funzionerà qui, e la nostra non funzionerà lì. Gli errori di autenticazione significano quasi sempre un problema di copia-incolla, come un carattere mancante o uno spazio alla fine.
Funziona in curl ma non nella tua app
Se curl ha successo e l'applicazione fallisce con lo stesso URL e chiave, la differenza è nell'ambiente. Controlla se l'app è dietro un proxy o in un container senza accesso in uscita, se legge una vecchia variabile d'ambiente come un OPENAI_BASE_URL residuo di un altro progetto, e se un file di configurazione sovrascrive il valore impostato nel codice. Stampare l'URL finale che il client chiamerà, appena prima della richiesta, risolve la maggior parte di questi casi in un minuto.
HTTP 429
Questo significa che è stato raggiunto un limite. Il codice di errore rate_limited indica il numero di richieste al minuto, mentre concurrency indica troppe richieste simultanee. Una chiave completa permette 8 richieste parallele e 300 al minuto; una chiave di prova ne permette 2 e 60. In caso di sovraccarico temporaneo ricevi anche un 429 con l'intestazione Retry-After: 5, quindi aspetta cinque secondi e riprova.
LangChain e mantenere l'URL in un unico punto
I framework basati sul client OpenAI prendono gli stessi valori. Nell'integrazione OpenAI di LangChain gli argomenti sono nominati così:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="uncensored",
base_url="https://api.getcodexapi.com/v1",
api_key="YOUR_API_KEY",
)
print(llm.invoke("Name three uses of a base URL.").content)
Indipendentemente dal framework, non spargere l'URL nel codice. Inseriscilo in una variabile d'ambiente o in un file di configurazione e leggilo da lì. In questo modo, il passaggio tra una chiave di test e una di produzione, o tra macchine, richiede la modifica di una sola riga. Inoltre, tieni le chiavi fuori dal repository: memorizza la chiave in una variabile d'ambiente o in un gestore di segreti, mai in un file di cui hai fatto il commit.
Se stavi cercando l'endpoint ufficiale di OpenAI per i suoi prodotti Codex, questo non è quello. Il loro URL base e l'autenticazione sono documentati da OpenAI, quindi segui la loro documentazione corrente per quello. L'indirizzo in questa pagina appartiene a un servizio indipendente e accetta solo chiavi emesse qui.
Cosa puoi inviare una volta connesso
L'endpoint supporta lo streaming, la chiamata di funzioni (tools, tool_choice, con risultati restituiti come messaggi role: "tool") e la modalità JSON tramite response_format: {"type": "json_object"}. I parametri temperature, top_p, stop, seed e le penalità vengono passati invariati. La finestra di contesto è di 100.000 token per prompt più completamento, e il corpo della richiesta massimo è di 8 MB.
È solo testo. Non ci sono generazione di immagini o audio, né embeddings né fine-tuning, quindi una funzionalità del client che dipende da queste non funzionerà con questo base URL. L'utilizzo viene fatturato per token a $0,15 per 1M di input e $0,50 per 1M di output; la pagina dei prezzi contiene esempi pratici.
