Powrót do bloga

AI dla początkującychPrzewodnik

Tokeny wejściowe vs wyjściowe: za co rozlicza cię API AI

Dlaczego API AI liczy tokeny wejściowe i wyjściowe osobno, gdzie je odczytać w polu usage i jak obliczyć koszt jednego żądania.

Autor: CheapTokens TeamOpublikowano Zaktualizowano 5 min czytania

Okładka z tytułem „Tokeny wejściowe vs wyjściowe” i wersem „Za co płacisz w żądaniu API” na ciemnym tle siatki
Na tej stronie
  1. Co liczy się jako wejście, a co jako wyjście
  2. Gdzie odczytać liczby: blok usage
  3. Dlaczego obie strony mają różne ceny
  4. Wzór
  5. Przykład obliczeniowy z prawdziwym modelem
  6. Użycie w kodzie
  7. Jak zużywać mniej tokenów
  8. Co zapamiętać

Jeśli właśnie wykonałeś swoje pierwsze wywołanie API do modelu językowego, prawdopodobnie zobaczyłeś w odpowiedzi blok usage i zastanawiałeś się, co dokładnie liczy. Krótka odpowiedź: każde żądanie ma dwa liczniki. Jeden liczy tokeny, które wysyłasz (wejście), drugi liczy tokeny, które model zapisuje z powrotem (wyjście). Każdy licznik ma własną cenę, a koszt żądania to suma obu.

Ten przewodnik pokazuje, gdzie znaleźć liczby, jak przeliczyć je na dolary i co możesz zmienić, aby wydawać mniej. Jeśli słowo „token” jest nadal niejasne, zacznij od Czym jest token w AI?.

Co liczy się jako wejście, a co jako wyjście#

Tokeny wejściowe to wszystko, co model musi przeczytać, aby ci odpowiedzieć:

  • twoja najnowsza wiadomość;
  • prompt systemowy (instrukcje takie jak „odpowiadaj krótko, po polsku”);
  • wcześniejsze wiadomości z rozmowy, jeśli wysyłasz je ponownie;
  • dokumenty, kod lub wyniki wyszukiwania, które wklejasz do żądania.

Tokeny wyjściowe to wszystko, co model generuje w odpowiedzi. W formacie zgodnym z OpenAI jest to tekst w choices[0].message.content. Niektóre modele w trybie myślenia generują także tokeny rozumowania przed ostateczną odpowiedzią; sprawdź stronę z cennikiem modelu, aby zobaczyć, czy są rozliczane jako wyjście.

Ważna kwestia dla początkujących: model nie pamięta twojego czatu między żądaniami. Aplikacja czatu wysyła całą historię za każdym razem, więc wejście długiej rozmowy rośnie z każdą turą, nawet jeśli twoja nowa wiadomość to jedna linijka.

Gdzie odczytać liczby: blok usage#

Każda odpowiedź niebędąca strumieniem z API zgodnego z OpenAI kończy się obiektem usage. To edukacyjny przykład jego kształtu:

json
{
  "choices": [
    { "message": { "role": "assistant", "content": "..." }, "finish_reason": "stop" }
  ],
  "usage": {
    "prompt_tokens": 2000,
    "completion_tokens": 500,
    "total_tokens": 2500
  }
}
Pole Co oznacza Rozliczane jako
prompt_tokens Tokeny we wszystkim, co wysłałeś Wejście
completion_tokens Tokeny wygenerowane przez model Wyjście
total_tokens prompt_tokens + completion_tokens Nie osobna cena: to tylko suma

Częstym błędem początkujących jest mnożenie total_tokens przez jedną cenę. Ponieważ wejście i wyjście mają różne ceny, potrzebujesz tych dwóch liczb osobno.

Niektórzy dostawcy dodają dodatkowe pola. Na przykład własne API DeepSeek dzieli również prompt_tokens na prompt_cache_hit_tokens i prompt_cache_miss_tokens, a w trybie myślenia raportuje reasoning_tokens (źródło: dokumentacja API DeepSeek, sprawdzono 21 października 2026). Trzy pola z tabeli to te, na których możesz polegać w każdej odpowiedzi zgodnej z OpenAI.

Gdy strumieniujesz odpowiedź, usage nie jest znane na początku. We własnym API DeepSeek pojawia się w ostatnim fragmencie treści przed data: [DONE] (dokumentacja API DeepSeek, sprawdzono 21 października 2026); inne API mogą wysyłać je inaczej lub tylko na żądanie, więc sprawdź, co otrzymuje twój klient. Samo strumieniowanie omówiono w Odpowiedzi strumieniowe w Pythonie.

Dlaczego obie strony mają różne ceny#

Czytanie twojego promptu i pisanie odpowiedzi to różne rodzaje pracy. Model przetwarza cały prompt w jednym przebiegu, ale musi produkować odpowiedź token po tokenie, a każdy nowy token zależy od poprzednich. Dlatego dostawcy zwykle wyceniają wyjście wyżej niż wejście i dlatego w każdym cenniku widzisz dwie liczby na model.

Model, którego używamy jako przykładu poniżej, MiniMax-M2.7 (id minimax-m2.7), działa według tego schematu. Aktualne ceny za 1 mln tokenów to $0.05 za wejście i $0.15 za wyjście.

Wzór#

Ceny podaje się za 1 milion tokenów, więc koszt jednego żądania to:

text
cost = input_tokens × input_price ÷ 1,000,000
     + output_tokens × output_price ÷ 1,000,000

Oto to samo ze zmyślonymi okrągłymi cenami, tylko aby pokazać arytmetykę (przykład, podstaw aktualne ceny z tabeli poniżej):

python
# example, substitute current prices from the table
price_in = 0.20    # USD per 1M input tokens
price_out = 0.80   # USD per 1M output tokens

prompt_tokens = 2000
completion_tokens = 500

cost = (prompt_tokens * price_in + completion_tokens * price_out) / 1_000_000
# 2000 × 0.20 ÷ 1,000,000 = 0.0004 (input)
# 500 × 0.80 ÷ 1,000,000 = 0.0004 (output)
# 0.0004 + 0.0004 = 0.0008 USD

Przykład obliczeniowy z prawdziwym modelem#

Weź żądanie z powyższego przykładu usage: 2 000 tokenów wejściowych i 500 tokenów wyjściowych. Na MiniMax-M2.7 przez CheapTokens kosztuje $0.00018. Liczba jest obliczana z aktualnego cennika za każdym razem, gdy strona jest wyświetlana.

Pojedyncze żądanie jest maleńkie, więc warto przeskalować. Mała aplikacja, która wysyła 10 000 żądań tego rozmiaru, zużywa 20 000 000 tokenów wejściowych i 5 000 000 tokenów wyjściowych, co daje $1.75.

To samo żądanie na innych modelach z naszej listy:

Model Koszt OpenRouter
GLM-5.3-Flash $0.00006 $0.00012
DeepSeek-V4-Flash $0.00008 $0.00017
MiniMax-M2.7 $0.00018 $0.0012

2000 tokenów wejściowych i 500 tokenów wyjściowych łącznie. 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.

Zauważ, że wyjście to niewielka część liczby tokenów (500 z 2 500), ale większa część rachunku niż jego udział w tokenach, ponieważ tokeny wyjściowe są wyceniane wyżej (patrz tabela). Dla tego modelu strona wyjściowa jest też miejscem, w którym potwierdza się oszczędność względem ceny referencyjnej OpenRouter, co jest przydatne, jeśli twoja aplikacja pisze długie odpowiedzi.

Użycie w kodzie#

Możesz odczytać usage z oficjalnego pakietu Python openai, wskazując go na bazowy URL CheapTokens:

python
from openai import OpenAI

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

response = client.chat.completions.create(
    model="MiniMaxAI/MiniMax-M2.7",
    messages=[{"role": "user", "content": "Explain input and output tokens in two sentences."}],
)

usage = response.usage
print("input:", usage.prompt_tokens)
print("output:", usage.completion_tokens)
print("total:", usage.total_tokens)

# example, substitute current prices from the table above
price_in, price_out = 0.20, 0.80
cost = (usage.prompt_tokens * price_in + usage.completion_tokens * price_out) / 1_000_000
print(f"approx. cost: ${cost:.6f}")

Jeśli nie wysłałeś jeszcze żądania, najpierw wykonaj Twoje pierwsze żądanie API z CheapTokens.

Jak zużywać mniej tokenów#

  • Skróć prompt. Przytnij prompt systemowy i usuń instrukcje, których model nie potrzebuje. Każdy wysłany token jest rozliczany przy każdym żądaniu.
  • Przytnij historię. W długim czacie zachowaj kilka ostatnich tur lub krótkie podsumowanie zamiast całej rozmowy.
  • Wysyłaj tylko istotną część dokumentu. Strona tekstu jest tańsza niż cały plik.
  • Proś o format, którego potrzebujesz. „Odpowiedz w trzech punktach” generuje mniej tokenów wyjściowych niż otwarty esej.
  • Ustaw max_tokens celowo. Ogranicza tylko wyjście. Zbyt nisko i odpowiedź zostanie ucięta; szczegóły w Dlaczego odpowiedź AI urywa się w połowie zdania? MiniMax-M2.7 na CheapTokens pozwala na maksymalnie 8 192 tokeny wyjściowe na odpowiedź i ma okno kontekstu 180K.

Aby oszacować koszt większego przepływu pracy, zobacz Jak oszacować koszt agenta AI.

Co zapamiętać#

  1. Każde żądanie ma tokeny wejściowe (prompt_tokens) i tokeny wyjściowe (completion_tokens).
  2. Mają osobne ceny, zwykle z wyższym wyjściem.
  3. Koszt = tokeny wejściowe × cena wejścia + tokeny wyjściowe × cena wyjścia, przy cenach za 1 mln tokenów.
  4. Odczytuj liczby z usage w odpowiedzi, zamiast zgadywać.

W CheapTokens jedno przedpłacone saldo obejmuje wszystkie modele, ceny za model są stałe bez cen w godzinach szczytu, a API jest zgodne z OpenAI Chat Completions i Anthropic Messages. Aby wypróbować powyższy przykład, pobierz klucz API i wyślij swoje pierwsze żądanie.

Aktualne ceny dla każdego modelu: Cennik CheapTokens.