Powrót do bloga

Pierwsze krokiPrzewodnik

Przejście z OpenRoutera na CheapTokens: base_url, klucz, id modelu

Zmień base_url, klucz API i id modelu w OpenAI SDK (Python i JavaScript), wyślij pierwsze żądanie i sprawdź, czy zadziałało.

Autor: CheapTokens TeamOpublikowano 4 min czytania

Okładka: przełączanie aplikacji na OpenAI SDK z OpenRoutera na CheapTokens przez zmianę base_url, klucza i id modelu
Na tej stronie
  1. Co faktycznie się zmienia
  2. Kod po przełączeniu
  3. Sprawdź, czy zadziałało
  4. Który model co zastępuje
  5. Ile kosztuje ten sam ruch
  6. Jeśli nie działa
  7. Przed wdrożeniem

Twoja aplikacja już wywołuje OpenRouter przez OpenAI SDK, a chcesz, żeby wywoływała CheapTokens. Zmieniasz trzy wartości — base_url, klucz API i id model — i usuwasz dwa opcjonalne nagłówki. Reszta kodu zostaje bez zmian.

Poniżej znajdziesz dokładne linie dla Pythona, JavaScriptu i curl, szybki sposób potwierdzenia, że przełączenie zadziałało, oraz tabelę, który model pasuje do jakiego zadania. Jeśli nigdy nie wysyłałeś żądania do CheapTokens, przewodnik po pierwszym żądaniu API omawia konto i klucz; dokumentacja zawiera pełne odniesienie.

Co faktycznie się zmienia#

Quickstart OpenRoutera (sprawdzony 27 października 2026) konfiguruje klienta OpenAI z bazowym URL https://openrouter.ai/api/v1 i nazywa modele jako provider/model-name. CheapTokens mówi tym samym formatem OpenAI Chat Completions pod https://api.cheaptokens.dev/v1. Więc klasa klienta, chat.completions.create i sposób odczytu odpowiedzi się nie zmieniają.

Przed i po: trzy wartości, które zmieniają się przy przejściu z OpenRoutera na CheapTokens
Trzy wartości do podmiany. Klucz pokazany jako zmienna środowiskowa, nigdy w kodzie.

To jedna podmiana na linię:

  • bazowy URL — https://api.cheaptokens.dev/v1 zamiast adresu OpenRoutera;
  • klucz API — klucz z Twojego konta CheapTokens, odczytywany ze zmiennej środowiskowej;
  • id modelu — pełne id CheapTokens, na przykład deepseek-ai/DeepSeek-V4-Flash-0731. Bierz id z dokumentacji CheapTokens: różni dostawcy nazywają ten sam model inaczej, a krótkie id z etykiet cenowych nie są akceptowane.

I jedno usunięcie. Nagłówki HTTP-Referer i X-OpenRouter-Title OpenRoutera są opcjonalne i zasilają tylko rankingi OpenRoutera. Usuń je z default_headers / defaultHeaders; tutaj nie są potrzebne.

Kod po przełączeniu#

To samo żądanie, trzy środowiska uruchomieniowe. Wybierz to, którego używa Twoja aplikacja.

Twój kod po przełączeniu

Python

python
import os
from openai import OpenAI

client = OpenAI(
    base_url='https://api.cheaptokens.dev/v1',
    api_key=os.environ['CHEAPTOKENS_API_KEY'],
)

resp = client.chat.completions.create(
    model='deepseek-ai/DeepSeek-V4-Flash-0731',
    messages=[{'role': 'user', 'content': 'Reply with one word: ready'}],
    max_tokens=20,
)
print(resp.choices[0].message.content)

JavaScript

javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://api.cheaptokens.dev/v1',
  apiKey: process.env.CHEAPTOKENS_API_KEY,
});

const resp = await client.chat.completions.create({
  model: 'deepseek-ai/DeepSeek-V4-Flash-0731',
  messages: [{ role: 'user', content: 'Reply with one word: ready' }],
  max_tokens: 20,
});
console.log(resp.choices[0].message.content);

curl

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "deepseek-ai/DeepSeek-V4-Flash-0731", "messages": [{"role": "user", "content": "Reply with one word: ready"}], "max_tokens": 20}'

Jeszcze jedno przed uruchomieniem. Jeśli Twoje żądanie zawiera pola specyficzne dla OpenRoutera — listy routingu lub fallbacku, preferencje dostawcy, id modeli ~alias — należą one do OpenRoutera. Ogranicz żądanie do standardowych pól Chat Completions: model, messages, temperature, max_tokens, stream.

Sprawdź, czy zadziałało#

Odpowiedź to za mało. Wydrukuj obok niej trzy rzeczy: który model odpowiedział, dlaczego się zatrzymał i ile naliczono tokenów.

python
print(resp.model)
print(resp.choices[0].finish_reason)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)
Środowisko i skrypt sprawdzający uruchomione w terminalu
Ustaw klucz raz, uruchom sprawdzenie, odczytaj model, finish_reason i usage.

finish_reason równe stop oznacza, że model zakończył samodzielnie. length oznacza, że max_tokens przerwał odpowiedź. usage pokazuje tokeny wejściowe i wyjściowe osobno, a to są dwie liczby, z których składa się Twój rachunek — te same dwie, które śledziłeś na OpenRouterze.

Spróbuj samSpróbuj: co mówi finish_reason, jeśli ustawisz max_tokens na 1?Pokaż odpowiedź

Mówi length — odpowiedź została przerwana przez max_tokens. Dobry test, czy Twój kod obsługuje uciętą odpowiedź.

Który model co zastępuje#

Wybierz model według zadania, a nie według nazwy, której używałeś na OpenRouterze. Poniższe fakty pochodzą z cennika CheapTokens sprawdzonego 27 października 2026; jedno saldo obejmuje wszystkie trzy modele, a cena nie zmienia się z porą dnia.

Model id model Kontekst Maks. odpowiedź
DeepSeek-V4-Flash deepseek-ai/DeepSeek-V4-Flash-0731 380K 32 768 tokenów
GLM-5.3-Flash zai-org/GLM-5.3-Flash 390K 8 192 tokeny
MiniMax-M2.7 MiniMaxAI/MiniMax-M2.7 180K 8 192 tokeny

Nie wiesz, który wiersz jest Twój? Zacznij od tego, co robi aplikacja:

Wybierz swój przypadek

Co Twoja aplikacja robi najczęściej?

Krótkie, częste żądania — klasyfikacja, ekstrakcja, odpowiedzi wsparcia

Wypróbuj zai-org/GLM-5.3-Flash: kontekst 390K, odpowiedzi do 8 192 tokenów, a w sumie jest tańszy niż OpenRouter, licząc wejście i wyjście razem.

Długie odpowiedzi, kod, pętle agentów

Wypróbuj deepseek-ai/DeepSeek-V4-Flash-0731: odpowiedzi do 32 768 tokenów, kontekst 380K, jedna cena o każdej porze dnia.

Stałe obciążenie, za które obecnie płacisz wysoką stawkę OpenRoutera

Wypróbuj MiniMaxAI/MiniMax-M2.7: kontekst 180K, odpowiedzi do 8 192 tokenów, a w sumie wychodzi taniej niż OpenRouter.

Ile kosztuje ten sam ruch#

Załóżmy, że Twój bot wysyła 1000 żądań, każde z około 500 tokenami wejściowymi i 300 wyjściowymi. To założenie — podmień własne liczby z usage. Poniższa tabela jest aktualna: nasze ceny i kolumna OpenRoutera pochodzą z bieżącego cennika, licząc wejście i wyjście razem.

Model Za żądanie 1000 żądań OpenRouter, 1000 żądań
GLM-5.3-Flash $0.000022 $0.022 $0.0434
DeepSeek-V4-Flash $0.000038 $0.0375 $0.0708
MiniMax-M2.7 $0.00007 $0.07 $0.51

500 tokenów wejściowych i 300 tokenów wyjściowych na żądanie. Ceny za 1 mln tokenów są aktualne i zmieniają się wraz z naszymi taryfami; kolumna OpenRouter pokazuje ceny referencyjne dla tego samego obciążenia.

Na DeepSeek-V4-Flash te 1000 żądań to $0.0375. Pełne ceny są na stronie cennika; idea, za co płacisz, jest w tokeny wejściowe vs wyjściowe.

Jeśli nie działa#

Po przełączeniu trzy błędy pokrywają większość problemów. Dopasuj komunikat do przyczyny:

Dopasuj pary

Dopasuj każdy objaw do przyczyny

  • 401 UnauthorizedBrakuje klucza, jest błędnie wpisany lub nadal jest to klucz OpenRoutera
  • 404 Not FoundŚcieżka bazowego URL jest błędna lub id modelu nie jest pełnym id CheapTokens
  • Odpowiedź ucięta w połowie zdaniamax_tokens jest niższe niż potrzebuje odpowiedź; finish_reason mówi length

Artykuł o rozwiązywaniu problemów z 401 i 404 przechodzi przez każdy z nich z dokładnymi komunikatami, a czym jest base_url wyjaśnia, dlaczego jeden zły ukośnik psuje ścieżkę.

Przed wdrożeniem#

Lista kontrolna

Lista kontrolna przełączenia