Omówienie
Tokeny to jednostki używane przez modele OpenAI do przetwarzania tekstu. Token może odpowiadać znakowi, części słowa, całemu słowu lub znakowi interpunkcyjnemu. Spacje również wpływają na podział tekstu na tokeny.
Liczba tokenów nie jest tym samym co liczba słów. Ten sam tekst może mieć różną liczbę tokenów w zależności od modelu, jego kodowania i języka.
Jak tekst staje się tokenami
Gdy wysyłasz tekst do modelu:
Tekst jest dzielony na tokeny.
Model przetwarza te tokeny.
Model generuje tokeny wyjściowe. Mogą one obejmować otrzymany tekst, a w przypadku modeli rozumujących również wewnętrzne tokeny rozumowania, które nie są wyświetlane jako tekst odpowiedzi.
Szacowanie tokenów w tekście angielskim
Poniższe wartości pomogą oszacować rozmiar tekstu angielskiego:
1 token to około 4 znaki.
1 token to około trzy czwarte słowa.
100 tokenów to około 75 słów.
Są to wartości szacunkowe, a nie dokładne. Długość zdań i akapitów jest różna, a w innych językach relacje między liczbą znaków, słów i tokenów mogą być inne.
Uwzględnianie spacji i wielkości liter
Słowo może zostać podzielone na różne tokeny zależnie od pisowni, wielkości liter i otaczającego tekstu.
Na przykład red, Red i red nie są identycznymi ciągami tekstowymi: ostatni przykład zawiera spację na początku. Kodowanie może reprezentować je na różne sposoby.
Identyfikatory tokenów również zależą od kodowania. Nie zakładaj, że przykładowy identyfikator tokenu dotyczy każdego modelu.
Rozróżnianie tokenów wejściowych i wyjściowych
| Kategoria | Opis |
| Tokeny wejściowe | Tokeny przekazane modelowi w żądaniu. Są one również nazywane tokenami polecenia. |
| Tokeny wyjściowe | Tokeny wygenerowane przez model. W Chat Completions są one nazywane tokenami uzupełnienia. |
| Buforowane tokeny wejściowe | Tokeny wejściowe używane ponownie dzięki buforowaniu poleceń. Ich cena może być inna niż cena niebuforowanych tokenów wejściowych. |
| Tokeny rozumowania | Tokeny używane wewnętrznie przez model rozumujący przed wygenerowaniem widocznej odpowiedzi. |
Tokeny rozumowania nie są widoczne w tekście odpowiedzi, ale wliczają się do użycia wyjściowego i są rozliczane jako tokeny wyjściowe.
Dlatego krótka widoczna odpowiedź może zużyć więcej tokenów, niż sugeruje jej wyświetlany tekst.
Zliczanie tokenów przed wysłaniem żądania
Zliczanie tokenów w zwykłym tekście
Użyj tokenizatora, aby zobaczyć, jak tekst jest dzielony na tokeny.
Do programowej tokenizacji zwykłego tekstu użyj biblioteki tiktoken. Wybierz kodowanie odpowiednie dla modelu docelowego, na przykład za pomocą tiktoken.encoding_for_model(model).
Liczba tokenów w zwykłym tekście nie musi obejmować wszystkich tokenów w żądaniu API. Na łączną liczbę tokenów wejściowych mogą wpływać struktura wiadomości, narzędzia, schematy, obrazy i pliki.
Zliczanie tokenów w pełnych danych wejściowych Responses
Aby zliczyć tokeny w pełnych danych wejściowych interfejsu Responses API, użyj interfejsu API do zliczania tokenów wejściowych.
Obsługuje on formaty wejściowe Responses, w tym wiadomości, obrazy, pliki, narzędzia i konwersacje. Podawana liczba obejmuje tokeny formatowania używane w strukturze żądania, takie jak role i granice wiadomości.
Liczba tokenów wejściowych nie pozwala przewidzieć, ile tokenów wyjściowych wygeneruje model.
Sprawdzanie faktycznego użycia tokenów
Po wysłaniu żądania sprawdź informacje o jego użyciu. Nazwy pól zależą od punktu końcowego:
Chat Completions podaje wartości prompt_tokens, completion_tokens i total_tokens.
Responses podaje wartości input_tokens, output_tokens i total_tokens.
Aktywność w czasie możesz też sprawdzić w panelu Usage Dashboard. Instrukcje, w tym dotyczące użycia podczas strumieniowania, znajdziesz tutaj: Sprawdzanie użycia i kosztów interfejsu API.
Przestrzeganie limitów modelu
Sprawdź w dokumentacji modelu jego okno kontekstu i maksymalny rozmiar danych wyjściowych. Limity te mogą się różnić w zależności od modelu.
Okno kontekstu ogranicza liczbę tokenów, które model może przetworzyć w jednym żądaniu. Modele mają również limit danych wyjściowych. W przypadku modeli rozumujących uwzględnij miejsce zarówno na tokeny rozumowania, jak i widoczną odpowiedź.
Jeśli dane wejściowe są zbyt duże, możesz:
Skrócić lub przeformułować polecenie.
Usunąć zbędny lub powtarzający się kontekst.
Podzielić obszerne dane wejściowe na mniejsze części.
Przed wysłaniem podsumować lub wstępnie przetworzyć tekst.
Użyj ustawienia liczby tokenów wyjściowych obsługiwanego przez dany punkt końcowy i model. Chat Completions używa parametru max_completion_tokens, a Responses — max_output_tokens.
Te limity rozmiaru żądań są niezależne od limitów częstotliwości API oraz miesięcznych limitów użycia lub wydatków. Zapoznaj się z dokumentacją używanego modelu.
Ceny tokenów
W przypadku rozliczeń API opartych na tokenach stawka zależy od modelu i kategorii tokenu. Tokeny wejściowe, buforowane tokeny wejściowe i tokeny wyjściowe mogą mieć różne ceny. Inne funkcje API mogą korzystać z innych jednostek rozliczeniowych.
Aktualne stawki znajdziesz na stronie z cennikiem API.
Porównując modele, weź pod uwagę łączną liczbę tokenów i koszt wykonania zadania. Niższa cena za milion tokenów nie musi oznaczać niższego łącznego kosztu: modele mogą inaczej tokenizować ten sam tekst oraz generować różne ilości danych wyjściowych lub rozumowania.
Testuj reprezentatywne zadania, zamiast porównywać wyłącznie długość widocznej odpowiedzi.
Uwzględnianie wielu uzupełnień
Jeśli punkt końcowy i model obsługują generowanie wielu uzupełnień, dodatkowe uzupełnienia również zużywają tokeny.
W Chat Completions ustawienie n na wartość większą niż 1 powoduje wygenerowanie wielu wariantów. Opłata obejmuje tokeny wygenerowane we wszystkich tych wariantach.
W starszym interfejsie Completions API parametr best_of może generować warianty, z których nie wszystkie są zwracane. Na przykład best_of = 3 może wygenerować łącznie do 3 × max_tokens tokenów uzupełnienia we wszystkich wariantach.
Obsługa tych parametrów zależy od punktu końcowego. Nie zakładaj, że inny interfejs API lub model obsługuje parametr n albo best_of.
