Trzy wartości, których potrzebujesz
Każdy klient kompatybilny z OpenAI żąda tych samych trzech rzeczy. Oto one dla tej usługi.
| Ustawienie | Wartość |
|---|---|
| Bazowy URL | https://api.getcodexapi.com/v1 |
| Klucz API | Twój klucz ze strony klucz API |
| Model | uncensored |
Klucz jest wysyłany jako Authorization: Bearer YOUR_KEY. Dwa endpointy, które możesz wywołać, to POST /v1/chat/completions i GET /v1/models. Jest to niezależna usługa uruchamiająca jeden model o otwartych wagach, nie jest to Codex OpenAI, więc nie wklejaj endpointu ani klucza samego OpenAI w tych samych ustawieniach.
Sprawdź połączenie z curl
Przed edycją konfiguracji aplikacji potwierdź, że klucz i URL działają z terminala. Wyświetlenie listy modeli to najtańsze sprawdzenie, ponieważ nie wymaga promptu:
curl https://api.getcodexapi.com/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
Powinieneś otrzymać listę JSON zawierającą model uncensored. Następnie wyślij jedno poprawne uzupełnienie:
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."}]
}'
Jeśli oba wywołania działają, problem w późniejszych niepowodzeniach leży w konfiguracji klienta, a nie w usłudze. Nagłówki odpowiedzi zawierają X-Request-Id, przydatny do śledzenia konkretnego wywołania, oraz X-Balance-USD, pokazujący pozostały kredyt.
Python z SDK OpenAI
Oficjalny pakiet openai przyjmuje podstawowy URL w konstruktorze klienta. Nic innego w Twoim kodzie się nie zmienia.
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)
Jeśli wolisz trzymać konfigurację z dala od kodu, SDK odczytuje również OPENAI_BASE_URL i OPENAI_API_KEY ze środowiska:
export OPENAI_BASE_URL="https://api.getcodexapi.com/v1"
export OPENAI_API_KEY="YOUR_API_KEY"
Po ich ustawieniu OpenAI() bez argumentów je pobiera. To wygodne, ponieważ wiele narzędzi zewnętrznych opartych na SDK dziedziczy te same zmienne bez zmiany kodu.
Node.js
SDK JavaScript używa tej samej nazwy opcji, zapisanej jako 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 ?? "");
}
Strumieniowanie zwraca zdarzenia wysyłane przez serwer z stream: true, a użycie jest uwzględnione na końcu. Pamiętaj, że strumieniowane zapytanie zajmuje jeden z Twoich slotów równoległych, dopóki strumień się nie zakończy, więc strumień, który porzucisz bez zamknięcia, nadal liczy się do limitu.
Aplikacje z ekranem ustawień
Narzędzia desktopowe i edytory zwykle oznaczają pole w jeden z trzech sposobów: „Base URL”, „API Base” lub „endpoint kompatybilny z OpenAI”. Wszystkie wymagają tego samego ciągu. Kilka uwag, które oszczędzą czas:
- Wybierz typ dostawcy OpenAI lub „niestandardowy zgodny z OpenAI”, a nie specyficzny dla dostawcy.
- Wpisz nazwę modelu ręcznie, jeśli aplikacja ma pole tekstowe.
uncensoredto dokładny identyfikator. - Jeśli aplikacja ma przycisk „test połączenia”, zwykle wywołuje listę modeli, którą to API obsługuje.
- Niektóre aplikacje buforują listę modeli z poprzedniego dostawcy. Usuń stary wpis i dodaj nowy, jeśli lista rozwijana wygląda źle.
Przykład krok po kroku w konkretnym edytorze znajdziesz w przewodniku dotyczącym połączenia z Cursor lub na stronie API do kodowania, która przedstawia ogólny obraz. Pełna dokumentacja parametrów znajduje się w dokumentacji API.
Gdy połączenie działa, zapisz dokładne wartości gdzieś, gdzie je znajdziesz ponownie: URL, nazwę modelu i datę utworzenia klucza. Zespoły często tracą godzinę później na kopię konfiguracji, która nadal zawiera starą wartość. Pojedynczy udostępniony plik przykładu w repozytorium z zastępczą wartością zamiast prawdziwego klucza temu zapobiega.
Typowe błędy i ich poprawki
URL kończy się na /v1/v1
Niektórzy klienci automatycznie dodają /v1. Jeśli Twoje zapytania nie działają, a log klienta pokazuje ścieżkę z /v1/v1/chat/completions, usuń /v1 z Base URL, który wpisałeś. Odwrotna sytuacja również ma miejsce: klient, który nie dodaje tej ścieżki, potrzebuje jej w swoich ustawieniach. Log ścieżki zapytania szybko rozstrzyga tę kwestię.
Wpisałeś pełny endpoint w podstawowy URL
Podstawowy URL kończy się na /v1. Nie wpisuj tam /chat/completions. SDK dodaje ścieżkę dla każdego wywołania.
Końcowy slash lub literówka w hoście
Większość SDK toleruje końcowy slash, ale kilka starszych narzędzi buduje ścieżki przez zwykłe konkatenowanie i kończy się podwójnym slashem. Usuń go, jeśli widzisz dziwne odpowiedzi 404.
Błędny klucz lub klucz innej usługi
Klucz OpenAI nie zadziała tutaj, a nasz nie zadziała tam. Błędy uwierzytelniania prawie zawsze oznaczają problem kopiowania i wklejania, np. brakujący znak lub spacja na końcu.
Działa w curl, ale nie w Twojej aplikacji
Jeśli curl się powiedzie, a aplikacja nie z tym samym URL i kluczem, różnica leży w środowisku. Sprawdź, czy aplikacja działa za proxy lub w kontenerze bez dostępu wychodniego, czy odczytuje starszą zmienną środowiskową taką jak przestarzały OPENAI_BASE_URL pozostały z innego projektu, czy plik konfiguracyjny nadpisuje wartość ustawioną w kodzie. Wypisanie końcowego URL, który klient wywoła, tuż przed żądaniem, rozstrzyga większość tych przypadków w minutę.
HTTP 429
Oznacza to przekroczenie limitu. Kod błędu rate_limited dotyczy żądań na minutę, a concurrency to za dużo żądań naraz. Pełny klucz pozwala na 8 równoległych żądań i 300 na minutę; klucz próbny pozwala na 2 i 60. Przy tymczasowym przeciążeniu otrzymujesz również 429 z nagłówkiem Retry-After: 5, więc poczekaj pięć sekund i spróbuj ponownie.
LangChain i przechowywanie URL w jednym miejscu
Szkielety oparte na kliencie OpenAI przyjmują te same wartości. W integracji OpenAI w LangChain argumenty nazywają się tak:
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)
Niezależnie od szkieletu, nie rozrzucaj URL po kodzie. Umieść go w jednej zmiennej środowiskowej lub jednym pliku konfiguracyjnym i odczytuj stamtąd. Dzięki temu zmiana między kluczem testowym a produkcyjnym lub między maszynami oznacza zmianę jednej linii. To również trzyma klucze z dala od repozytorium: przechowuj klucz w zmiennej środowiskowej lub menedżerze sekretów, nigdy w zacommitowanym pliku.
Jeśli szukałeś własnego endpointu OpenAI dla jego produktów Codex, to nie jest on. Ich podstawowy URL i uwierzytelnienie są udokumentowane przez OpenAI, więc postępuj zgodnie z ich aktualną dokumentacją dla tego. Adres na tej stronie należy do niezależnej usługi i akceptuje tylko klucze wydane tutaj.
Co możesz wysyłać po połączeniu
Endpoint obsługuje strumieniowanie, wywoływanie funkcji (tools, tool_choice, z wynikami zwracanymi jako komunikaty role: "tool") oraz tryb JSON poprzez response_format: {"type": "json_object"}. Parametry temperature, top_p, stop, seed oraz kary są przekazywane dalej. Okno kontekstu wynosi 100 000 tokenów dla promptu plus uzupełnienia, a maksymalna wielkość ciała zapytania to 8 MB.
Obsługuje tylko tekst. Nie ma generowania obrazów ani audio, nie ma embeddingów ani fine-tuningu, więc funkcja klienta zależna od tych elementów nie zadziała przy tym podstawowym URL. Użycie jest rozliczane za token w cenie $0,15 za 1 mln tokenów wejściowych i $0,50 za 1 mln tokenów wyjściowych; na stronie z cenami znajdziesz przykłady krok po kroku.
