DeepSeek API SDK: Użyj SDK OpenAI i zamieniaj endpointy
Nie musisz instalować specjalnego klienta do konfiguracji DeepSeek API SDK: API w stylu DeepSeek są zgodne z formatem OpenAI, więc SDK OpenAI działa z innym base URL. Ta sama cecha pozwala na zmianę endpointu poprzez zmianę trzech wartości.

Kluczowe punkty
- SDK Pythona i Node.js OpenAI działają z dowolnym endpointem zgodnym z OpenAI; zmieniasz Base URL, klucz i nazwę modelu.
- Przechowuj te trzy wartości w zmiennych środowiskowych, aby zmiana endpointu nie wymagała edycji kodu.
- Zamiana jest bezpieczna dla prostego czatu, strumieniowania i wywołań narzędzi, ale przetestuj funkcje specyficzne dla modelu przed ich wykorzystaniem.
- Dla tego endpointu użyj https://api.deepseekapi.top/v1 i identyfikatora modelu uncensored.
Dlaczego SDK OpenAI jest SDK DeepSeek API
Gdy użytkownicy szukają SDK DeepSeek API, oczekują pakietu z nazwą dostawcy. W praktyce dokumentacja DeepSeek opisuje wywoływanie API za pomocą SDK OpenAI z innym base URL, ponieważ API jest zgodne z formatem żądań i odpowiedzi OpenAI. Sprawdź ich aktualną dokumentację, aby uzyskać dokładny base URL i nazwy modeli; są oni autorytetem w sprawie swojej usługi.
Konsekwencją jest użyteczność. Każdy kod napisany dla biblioteki klienta OpenAI może komunikować się z dowolnym serwerem implementującym te same endpointy, czyli POST /v1/chat/completions, POST /v1/responses i GET /v1/models. Przejście między dostawcami staje się zmianą konfiguracji, a nie przepisywaniem kodu. W dalszej części artykułu pokazujemy ten wzorzec w Pythonie, Node i curl, a następnie strukturę, która ułatwia zamianę.
Konfiguracja Pythona
Zainstaluj oficjalny pakiet i wskaż go na endpoint:
pip install openai
from openai import OpenAI
client = OpenAI(
base_url="https://api.deepseekapi.top/v1",
api_key="YOUR_KEY",
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a concise technical assistant."},
{"role": "user", "content": "Explain idempotency in two sentences."},
],
)
print(resp.choices[0].message.content)
print(resp.usage)
Pobierz klucz na stronie kluczy API. Nowi użytkownicy mogą jednorazowo odebrać $0,50 kredytu próbnego bez karty. Artykuł DeepSeek API Python omawia ten język głębiej, w tym obsługę błędów.
Konfiguracja Node.js
npm install openai
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.deepseekapi.top/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
stream: true,
messages: [{ role: "user", content: "List four uses of a message queue." }],
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
Wzorzec jest identyczny: podstawowy URL, klucz, model. Strumieniowanie zwraca zdarzenia wysyłane przez serwer (SSE), a biblioteka przekształca je w iterator asynchroniczny. Wywoływanie narzędzi opiera się na tym samym schemacie co w innych API kompatybilnych z OpenAI: przekaż tools, odczytaj strumieniowane tool_calls i zwróć wyniki jako komunikaty role: "tool".
Uczyń endpoint wymiennym
Nie koduj na sztywno trzech wartości. Odczytuj je ze zmiennych środowiskowych i opakuj tworzenie klienta w jedną funkcję. Dzięki temu przejście z jednego endpointu na inny oznacza edycję pliku .env, a nie kodu źródłowego.
import os
from openai import OpenAI
def make_client():
return OpenAI(
base_url=os.environ.get("LLM_BASE_URL", "https://api.deepseekapi.top/v1"),
api_key=os.environ["LLM_API_KEY"],
)
MODEL = os.environ.get("LLM_MODEL", "uncensored")
def ask(prompt: str) -> str:
r = make_client().chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
temperature=0.7,
)
return r.choices[0].message.content
Teraz inny dostawca wymaga tylko trzech zmiennych środowiskowych. Oficjalne SDK odczytują również OPENAI_API_BASE i OPENAI_API_KEY w niektórych wersjach, ale jawne zmienne są bardziej przejrzyste i zapobiegają niespodziankom przy uruchamianiu wielu dostawców jednocześnie.
Jeśli używasz TypeScripta lub innego języka, zasada jest taka sama: jedna funkcja fabryczna, trzy zmienne, bez nazw dostawców rozrzuconych po kodzie. Typowym błędem jest pozwalanie na wyciekanie nazwy dostawcy do nazw funkcji, komunikatów logowania i zmiennych, co utrudnia późniejszą zamianę. Nazwij rzeczy zgodnie z ich przeznaczeniem (ask, summarise), a nie według dostawcy.
Zachowaj mały test wysyłający jeden stały prompt przez ask() i sprawdzający, czy odpowiedź nie jest pusta. Uruchamiaj go po każdej zmianie endpointu; wyłapie błędne URL i klucze w kilka sekund.
Co pozostaje bez zmian, a co się zmienia przy zamianie
| Pozycja | Pozostaje bez zmian | Może się zmienić |
|---|---|---|
| Kształt zapytania | komunikaty, role, temperatura, top_p, stop | Parametry opcjonalne, których dostawca nie obsługuje |
| Strumieniowanie | SSE z porcjami danych | Miejsce, w którym pojawia się zużycie w strumieniu |
| Wywoływanie narzędzi | tools, tool_choice, tool_calls | Dokładność przestrzegania schematu przez model |
| Nazwa modelu | Pole wymagane | Wartość sama w sobie: tutaj jest uncensored |
| Okno kontekstu | Prompt plus uzupełnienie | Rozmiar: 100 000 tokenów tutaj |
| Zachowanie | Format czatu | Styl, mocne strony, zachowanie przy odmowie |
Ostatni wiersz to ten, który często myli użytkowników. Endpoint jest kompatybilny na poziomie protokołu, a nie zachowania. Dwa dostawcy mogą przyjąć identyczne żądania i zwrócić bardzo różne odpowiedzi. Model to pojedynczy model o otwartych wagach od niezależnego dostawcy, dostrojony do odpowiadania bez odmów treści dla użytkowników pełnoletnich, i nie jest to oficjalne API DeepSeek ani żadnej innej firmy. Przetestuj ponownie prompty, które dostosowałeś do innego modelu.
Funkcje, które ten endpoint ma i których nie ma
- Wsparcie: uzupełnienia czatu, format Responses, listowanie modeli, strumieniowanie, wywoływanie funkcji, tryb JSON (
response_formatzjson_object) oraz przekazywanie temperatury, top_p, stop, seed i kar. - Nie oferowane: generowanie obrazów, audio lub wideo, embeddingi, dostrajanie.
- Limity: okno 100 000 tokenów, maksymalne ciało 8 MB, 8 równoległych zapytań i 300 na minutę przy pełnym kluczu (2 i 60 przy kluczu próbnym).
- Błędy: HTTP 429 z kodem
rate_limitedlubconcurrencyoraz nagłówekRetry-After: 5przy tymczasowym przeciążeniu.
Jeśli Twój kod wywołuje endpoint embeddingów, będziesz potrzebował innego dostawcy do tej części i możesz zachować czat tutaj. Podział według zadań jest częstym powodem stosowania powyższego wzorca z zmiennymi środowiskowymi.
Lista kontrolna migracji
Gdy zamieniasz jeden endpoint na inny w istniejącym projekcie, przejdź przez krótką listę, a nie zmieniaj wszystkiego naraz.
- Przetestuj endpoint. Wyślij jedno zapytanie za pomocą curl i upewnij się, że otrzymasz tekst. Wywołaj
GET /v1/modelsi sprawdź, czy identyfikatoruncensoredjest wymieniony. - Zmień trzy wartości. Base URL, klucz, nazwa modelu, nic więcej. Nie dotykaj jeszcze promptów.
- Uruchom istniejące testy. Jeśli masz testy regresji promptów, uruchom je i odnotuj, które zawiodą. Niepowodzenia są zwykle behawioralne, np. inny format wyjściowy, a nie błędy protokołu.
- Sprawdź parametry. Usuń opcje, których endpoint nie wymaga. Zachowaj temperature, top_p, stop i seed, jeśli ich używasz.
- Przetestuj strumieniowanie i narzędzia osobno. Błędy strumieniowania często ukrywają się w kodzie klienta, który zakłada konkretny układ porcji. Wywołania narzędzi wymagają schematu, który model dobrze rozumie, więc przetestuj je na swoich rzeczywistych funkcjach.
- Zmierz koszt i opóźnienie na rzeczywistym ruchu. Porównaj dzień zapytań, a nie jeden prompt.
Zrób to w gałęzi lub z flagą funkcjonalności, która kieruje małą część ruchu na nowy endpoint. Ponieważ kod klienta jest wspólny, wycofanie polega na zmianie zmiennej środowiskowej.
Obsłuż ponowne próby i odczytaj zużycie
SDK automatycznie ponawiają niektóre błędy, ale nadal powinieneś sam obsłużyć 429, ponieważ limity współbieżności w produkcji są realne. Przechwyć wyjątek limitu zapytań, odczekaj liczbę sekund podaną w Retry-After (5 przy przeciążeniu) i ponów próbę. Nieudane zapytania nie są rozliczane, więc ponowienia są bezpieczne dla twojego salda.
Loguj usage.prompt_tokens i usage.completion_tokens przy każdym wywołaniu. Ceny to $0.15 za 1M tokenów wejściowych i $0.50 za 1M tokenów wyjściowych, więc wywołanie z 2000 tokenami wejściowymi i 600 wyjściowymi kosztuje 2000 × $0.15 / 1M + 600 × $0.50 / 1M = $0.0003 + $0.0003 = $0.0006. Nagłówki odpowiedzi zawierają również X-Balance-USD dla pozostałego kredytu. Zobacz stronę cen, aby doładować środki i uzyskać bonusy, oraz dokumentację, aby uzyskać pełną listę parametrów.
Edytory i inne narzędzia
Trzy wartości przenoszą się do dowolnego narzędzia z ustawieniem dostawcy kompatybilnego z OpenAI. Artykuł o używaniu API w stylu DeepSeek w Cursor omawia jeden z takich edytorów. W każdym narzędziu pola są oznaczone nieco inaczej, ale zawsze wpisujesz podstawowy URL kończący się na /v1, klucz i nazwę modelu.
Więcej przewodników
Pytania i odpowiedzi
Czy muszę zainstalować oficjalne SDK DeepSeek?
Nie potrzebujesz pakietu specyficznego dla dostawcy. Dokumentacja DeepSeek opisuje użycie SDK OpenAI z innym podstawowym URL; sprawdź ich dokumentację, aby uzyskać aktualne szczegóły.
Jakie trzy wartości muszę zmienić, aby użyć tego endpointu?
Base URL (https://api.deepseekapi.top/v1), Twój klucz API i identyfikator modelu uncensored.
Czy mój istniejący kod OpenAI zadziała bez zmian?
Czat, strumieniowanie, tryb JSON i wywoływanie narzędzi mają ten sam format, więc w większości przypadków tak. Embeddingi, obrazy i audio nie są oferowane, a odpowiedzi różnią się, ponieważ model jest inny.
Czy SDK poprawnie wysyła klucz?
Tak, automatycznie wysyła nagłówek Authorization: Bearer z Twoim kluczem.
Twój klucz jest o jeden formularz stąd
Utwórz konto, skopiuj klucz, zmień bazowy URL. To cała konfiguracja.