Modele językowe AI nie czytają liter ani słów. Czytają tokeny: małe fragmenty tekstu, często całe słowo, czasem jego część. I mogą przyjąć naraz tylko ograniczoną liczbę tokenów, a ten limit nazywa się oknem kontekstu. Te dwie idee wyjaśniają, dlaczego narzędzia AI mają takie, a nie inne ceny, dlaczego długie czaty zaczynają zapominać wcześniejsze instrukcje i dlaczego model może mieć problem z policzeniem liter w słowie, które przed chwilą poprawnie napisał.
Czym jest token w AI?
Zanim model zobaczy twój prompt, program zwany tokenizerem dzieli tekst na kawałki ze stałego słownika i zamienia każdy kawałek w liczbę. Model pracuje wyłącznie na tych liczbach i tak samo pisze odpowiedź, po jednym tokenie, a aplikacja zamienia je z powrotem w tekst.
Słownik powstaje na podstawie ogromnych ilości tekstu, więc popularne słowa zwykle są jednym tokenem, a rzadsze dzielą się na kilka znanych kawałków. Spacja często jest doklejona na początku kolejnego słowa. Angielskie zdanie mogłoby zostać podzielone mniej więcej tak:
Token ization isn 't magic .
Ten podział jest poglądowy. Każda rodzina modeli ma własny tokenizer i to samo zdanie może dać w każdym inną liczbę kawałków. Wielu dostawców udostępnia narzędzie do tokenizacji albo API do liczenia tokenów, więc możesz sprawdzić rzeczywiste liczby.
Obrazy, dźwięk i pliki też są zamieniane na tokeny, jeśli model je przyjmuje, dlatego załączony zrzut ekranu zużywa część tego samego budżetu co twój tekst.
Ile tokenów ma słowo?
Dla tekstu angielskiego często stosowana reguła mówi o mniej więcej czterech znakach na token, czyli około trzech czwartych słowa. Według tego szacunku 1000 tokenów to około 750 angielskich słów, a artykuł na 3000 słów to około 4000 tokenów.
Ta proporcja zmienia się zależnie od treści:
- Inne języki często potrzebują więcej tokenów na to samo znaczenie. Tokenizery są trenowane na danych, w których angielski jest mocno nadreprezentowany, więc angielskie słowa dostają zwarte tokeny, a tekst po polsku, japońsku, koreańsku, arabsku, w hindi i w wielu innych językach dzieli się na więcej kawałków. Różnica zależy od tokenizera i w nowszych się zmniejszyła, ale nie zniknęła.
- Kod zużywa tokeny na wcięcia, nawiasy, operatory i długie identyfikatory, więc plik często kosztuje więcej tokenów, niż sugeruje liczba słów.
- Liczby, adresy URL i nietypowe ciągi znaków, takie jak identyfikatory i hashe, zwykle dzielą się na wiele małych tokenów.
Dlaczego tokeny mają znaczenie
Koszt. API naliczają opłaty za tokeny, z osobnymi cenami za tokeny wysyłane i tokeny pisane przez model. W czacie cała rozmowa jest wysyłana ponownie z każdą nową wiadomością, więc długa rozmowa kosztuje więcej za wiadomość niż krótka.
Limity. Model ma okno kontekstu na wszystko, co czyta i pisze w jednym żądaniu, a często też osobny limit długości pojedynczej odpowiedzi. W API możesz ten limit ustawić samodzielnie, a w API Anthropic musisz: max_tokens to wymagany parametr.
Szybkość. Odpowiedź powstaje token po tokenie, więc dłuższa odpowiedź proporcjonalnie dłużej się kończy.
Zadania z pisownią. Model widzi słowo takie jak magic jako jedną albo dwie jednostki, a nie pięć liter, więc zadania zależne od pojedynczych znaków, na przykład liczenie liter, odwracanie słowa czy szukanie słów o dokładnej długości, są dla niego trudniejsze, niż się wydaje. Nowsze modele radzą sobie z wieloma z nich lepiej, ale gdy liczą się znaki, sprawdź odpowiedź albo poproś model, żeby najpierw rozpisał słowo litera po literze.
Czym jest okno kontekstu?
Okno kontekstu to maksymalna liczba tokenów, jaką model może wziąć pod uwagę w jednym żądaniu. Można o nim myśleć jak o pamięci roboczej modelu: wszystko, z czego model może skorzystać przy pisaniu odpowiedzi, musi się w nim zmieścić naraz, w tym:
- prompt systemowy, czyli instrukcje samej aplikacji i twoje
- dotychczasowa rozmowa, każda wiadomość użytkownika i każda odpowiedź
- załączone pliki, wklejone dokumenty oraz wyniki wyszukiwania albo narzędzi
- pisana właśnie odpowiedź
Wszystko poza oknem dla modelu nie istnieje. Nie ma żadnej pamięci w tle, w której mógłby coś sprawdzić. Rozmiary okna kontekstu bardzo się różnią między modelami i ciągle rosną, więc sprawdź w dokumentacji dostawcy rozmiar dla modelu, którego używasz, zamiast polegać na liczbie z jakiegoś artykułu.
Model nie przechowuje też niczego między żądaniami. To, co w czacie wygląda na pamięć, to aplikacja wysyłająca za każdym razem całą rozmowę od nowa. Funkcje pamięci w aplikacjach czatowych działają tak samo: aplikacja zapisuje notatki o tobie albo przeszukuje twoje wcześniejsze czaty i wstawia to, co znajdzie, do kontekstu nowych czatów.
Co się dzieje, gdy czat robi się długi
Gdy rozmowa przerasta okno kontekstu, coś musi ustąpić. Zależnie od aplikacji najstarsze wiadomości są usuwane, starsze fragmenty zastępuje streszczenie albo pojawia się informacja, że czat osiągnął limit i trzeba zacząć nowy. W każdym przypadku szczegóły z początku, w tym instrukcje z pierwszej wiadomości, mogą przestać wpływać na odpowiedzi.
Pełne okno to nie jedyny problem. Im więcej materiału model ma przed sobą, tym więcej może przeoczyć, a w długim czacie wczesne decyzje konkurują ze wszystkim, co padło później. Objawy to odpowiedzi ignorujące wcześniej ustalone ograniczenie, kod wracający do wersji, która została już poprawiona, albo model powtarzający odrzucony wcześniej pomysł.
Praca w granicach okna kontekstu
Zaczynaj nowy czat dla każdego zadania. Świeży czat z jasną pierwszą wiadomością zwykle wygrywa z długim czatem, który przewędrował przez kilka tematów.
Przenieś streszczenie dalej. Gdy w czacie nazbierało się przydatnych decyzji, poproś o streszczenie napisane tak, żeby dało się je wkleić do nowego czatu, i kontynuuj tam. Wypełnij poniższe pola pod swoją pracę.
Cel: baza danych dla małej aplikacji bibliotecznej, przechowywana w SQLite.
Decyzje:
- Wypożyczenia mają osobną tabelę, dzięki czemu zachowuje się cała historia wypożyczeń.
- Książka jest dostępna, gdy nie ma żadnego wypożyczenia z pustym
returned_at.
Aktualny schemat:
CREATE TABLE books (id INTEGER PRIMARY KEY, title TEXT NOT NULL, author TEXT NOT NULL);
CREATE TABLE members (id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE);
CREATE TABLE loans (
id INTEGER PRIMARY KEY,
book_id INTEGER NOT NULL REFERENCES books(id),
member_id INTEGER NOT NULL REFERENCES members(id),
loaned_at TEXT NOT NULL,
returned_at TEXT
);
Otwarte pytania:
- Czy potrzebujemy opłat za przetrzymanie?
- Czy biblioteka powinna śledzić kilka egzemplarzy tej samej książki?
Wklejaj tylko to, czego potrzebuje zadanie. Funkcję z błędem i kod, który ją wywołuje, a nie całe repozytorium. Omawiany fragment umowy, a nie wszystkie czterdzieści stron. Mniej materiału to mniej do przeoczenia.
Zadaj pytanie po długim materiale i powtórz to, co ważne. Gdy wklejasz długi dokument, zadaj pytanie na końcu, po nim, i powtórz tam kluczowe ograniczenia. Instrukcja znajdzie się wtedy tuż przy miejscu, w którym model zaczyna pisać.
Podziel dokument, który jest za długi na jedną wiadomość. Niektóre aplikacje ograniczają, ile można wkleić w jednej wiadomości, nawet gdy okno modelu zmieściłoby więcej. Wysłanie dokumentu w częściach omija limit wiadomości, ale nie okno kontekstu: każda część nadal się do niego wlicza. Od razu powiedz modelowi, żeby nie odpowiadał, dopóki nie wyślesz wszystkiego.
Otrzymano część 1 z 3
Licz tokeny, gdy to ważne. Jeśli budujesz coś na API, licz przed wysłaniem. Otwartoźródłowa biblioteka tiktoken od OpenAI tokenizuje tekst tokenizerami OpenAI, a API Anthropic ma endpoint do liczenia tokenów. Liczby z tokenizera jednego dostawcy są dla innego tylko szacunkiem.
import tiktoken
enc = tiktoken.get_encoding("o200k_base") # one of OpenAI's tokenizers
tokens = enc.encode("Tokenization isn't magic.")
print(len(tokens))
print([enc.decode([t]) for t in tokens])
Gdy budujesz aplikację wokół modelu, decyzja, co trafia do okna i w jakiej kolejności, staje się osobnym problemem projektowym. Zajmuje się tym context engineering, a prompt chaining pokazuje, jak podzielić dużą pracę na kroki, z których każdy swobodnie się mieści. Jak pojedyncza wiadomość wpisuje się w całe dane wejściowe, opisuje strona czym jest prompt.
Najczęściej zadawane pytania
Czym jest token w AI?
Token to jednostka tekstu, którą model językowy czyta i pisze. Może to być całe popularne słowo, część dłuższego słowa, znak interpunkcyjny albo fragment białych znaków. Zanim model zobaczy twój prompt, tokenizer dzieli go na tokeny i zamienia każdy w liczbę, a model generuje odpowiedź po jednym tokenie.
Ile słów to 1000 tokenów?
Dla angielskiego popularna reguła mówi o mniej więcej czterech znakach na token, co daje około 750 słów na 1000 tokenów. Rzeczywista liczba zależy od tokenizera modelu i od tekstu. Kod, liczby i wiele języków innych niż angielski, w tym polski, zużywają więcej tokenów na tę samą ilość treści.
Czym jest okno kontekstu?
Okno kontekstu to maksymalna liczba tokenów, jaką model może wziąć pod uwagę w jednym żądaniu. Musi się w nim zmieścić prompt systemowy, dotychczasowa rozmowa, załączone pliki albo wyniki narzędzi i odpowiedź, którą model właśnie pisze. Wszystko poza nim dla modelu nie istnieje.
Co się dzieje, gdy czat przekroczy okno kontekstu?
Aplikacja musi zrobić miejsce. Zależnie od aplikacji usuwa najstarsze wiadomości, zastępuje je streszczeniem albo informuje, że rozmowa osiągnęła limit. Tak czy inaczej instrukcje i szczegóły z początku czatu mogą przestać wpływać na odpowiedzi i dlatego długie czaty czasem sprawiają wrażenie, jakby o czymś zapominały.
Czy ChatGPT albo Claude pamiętają moje poprzednie czaty?
Sam model nie. Każda odpowiedź powstaje na podstawie tego, co jest w oknie kontekstu przy danym żądaniu. Niektóre aplikacje mają funkcje pamięci, które zapisują notatki o tobie albo przeszukują twoje wcześniejsze czaty i dodają to, co znajdą, do nowych czatów, a projekty mogą zawierać wspólne pliki i instrukcje, ale to aplikacja wkłada tekst do kontekstu, a nie model coś pamięta.