Czym LLM nie jest — ani wyszukiwarką, ani bazą wiedzy, ani programem

przez Łukasz | sie 17, 2026

Większość nieporozumień wokół modeli językowych bierze się nie z tego, czego o nich nie wiemy, ale z tego, co błędnie zakładamy. Że gdzieś sprawdzają. Że coś pamiętają. Że wykonują polecenia.

Nie robią żadnej z tych rzeczy. Robią jedną i tylko jedną — i cała reszta serii jest rozwinięciem tego zdania.

Zacznijmy od analogii, którą zaraz trzeba będzie odstawić

Neuron w mózgu dostaje impuls elektryczny. Nie dostaje światła, dźwięku ani zapachu — te docierają do zmysłów w zupełnie różnej fizycznej postaci, ale zaraz potem zamieniają się na jedną wspólną walutę: aktywność komórek nerwowych. Dalej w mózgu nie ma już „światła”. Jest wzorzec pobudzeń.

Model działa podobnie w tym jednym punkcie. Tekst, obraz i dźwięk wchodzą różnymi drogami, ale po kilku krokach każde z nich jest po prostu listą liczb w tej samej przestrzeni. To dlatego jeden model potrafi obsłużyć kilka rodzajów danych naraz — na poziomie, na którym pracuje, różnica między nimi już nie istnieje.

I na tym analogia się kończy. Warto wiedzieć gdzie dokładnie, bo dalej prowadzi prosto w błąd.

Sztuczny neuron nie strzela. Nie ma impulsu, nie ma progu pobudzenia, nie ma czasu. Zwraca po prostu liczbę — i robi to przy każdym przebiegu, wszystkie naraz, równo. Mózg jest asynchroniczny i oszczędny: w danej chwili milczy zdecydowana większość komórek. Model liczy wszystko, zawsze.

Ważniejsza jest jednak druga różnica. Mózg przepina połączenia w trakcie działania — dlatego zapach potrafi związać się ze wspomnieniem. W modelu wagi są zamrożone po treningu i podczas rozmowy nie zmienia się w nim nic. Zupełnie nic. Wszystko, co wygląda na uczenie się w trakcie rozmowy, jest wyłącznie zawartością okna kontekstu — czyli tekstu, który za każdym razem podajesz od nowa.

Podobieństwo jest więc w reprezentacji, nie w działaniu. To wystarczy, żeby zrozumieć, dlaczego model przetwarza obraz i tekst tak samo. Nie wystarczy do niczego więcej.

Czym LLM nie jest

Nie jest wyszukiwarką

Wyszukiwarka ma indeks. Kiedy pytasz, sprawdza w nim, znajduje dokument i pokazuje ci, skąd wzięła odpowiedź. Zawsze można kliknąć źródło.

Model nie ma indeksu i niczego nie sprawdza. Nie istnieje moment, w którym „idzie zobaczyć”. Odpowiedź powstaje w całości z tego, co zapisało się w wagach podczas treningu, plus z tego, co dostał w kontekście. Kiedy model podaje adres strony, nie odczytuje go z żadnej listy — generuje ciąg znaków, który wygląda jak prawdopodobny adres. Czasem trafia, bo widział go wielokrotnie w danych. Czasem produkuje URL, który nigdy nie istniał, i wygląda on dokładnie tak samo wiarygodnie.

Modele podłączone do wyszukiwania to co innego — ale wyszukiwanie dzieje się wtedy poza modelem, a wynik wraca do niego jako zwykły tekst. Wrócimy do tego w artykule dwunastym.

Nie jest bazą wiedzy

Baza danych przechowuje fakty i zwraca je bez zmian. Zapisujesz „Kowalski, ul. Polna 3″, odczytujesz „Kowalski, ul. Polna 3″. Jeśli rekordu nie ma, baza mówi, że nie ma.

Model nie przechowuje faktów w postaci, w której da się je wskazać. Fakty są rozpuszczone w miliardach wag i nie ma tam żadnego miejsca, o którym można powiedzieć „tu siedzi data bitwy pod Grunwaldem”. Odpowiedzi nie są odczytywane, tylko rekonstruowane przy każdym pytaniu od nowa.

Stąd bierze się druga własność, która zaskakuje najbardziej: model nie ma sygnału „nie wiem”. Baza danych zwraca pusty wynik. Model zawsze ma rozkład prawdopodobieństwa — także wtedy, gdy w danych treningowych nie było żadnej odpowiedzi. Zdanie prawdziwe i zdanie zmyślone powstają dokładnie tą samą drogą, więc z jego perspektywy nie różnią się niczym.

To jest mechaniczna przyczyna halucynacji. Nie usterka, którą ktoś kiedyś załata — konsekwencja tego, jak model jest zbudowany.

Nie jest programem

Program wykonuje instrukcje. Napiszesz „usuń plik”, program usuwa plik. Wynik jest deterministyczny i sprawdzalny.

Model nie wykonuje niczego. Nie ma dostępu do internetu, do plików, do twojej bazy ani do żadnego stanu poza tym, co dostał w kontekście. Kiedy mówimy, że „model wywołał narzędzie”, w rzeczywistości model wygenerował tekst wyglądający jak prośba o wywołanie — nazwę funkcji i argumenty. Ten tekst przechwycił zwykły kod poza modelem, faktycznie odpalił funkcję i wkleił wynik z powrotem do kontekstu jako kolejny fragment tekstu.

Model nigdy się nie dowiaduje, czy cokolwiek naprawdę się wykonało. Widzi tylko, że w kontekście pojawiło się coś nowego.

Prompt nie jest więc poleceniem w sensie programistycznym. Jest kontekstem, który wpływa na rozkład prawdopodobieństwa kolejnych tokenów. Dlatego ta sama instrukcja działa różnie w różnych modelach, dlatego bywa zignorowana, i dlatego nie da się „zaprogramować” modelu tak, by czegoś nigdy nie zrobił.

Czym jest

Jedna operacja. Model dostaje ciąg tokenów i zwraca rozkład prawdopodobieństwa nad całym swoim słownikiem — dla każdej pozycji liczbę mówiącą, jak prawdopodobne jest, że to właśnie ona jest następna. Osobna warstwa wybiera z tego rozkładu jeden token, dokleja go do ciągu, całość wraca na wejście i wszystko powtarza się od nowa.

To wszystko. Odpowiedź, którą czytasz, powstała przez wielokrotne powtórzenie tego kroku — token po tokenie, każdy w osobnym przebiegu. Nazywa się to predykcją następnego tokenu i jest jedyną rzeczą, jaką model robi.

Warto od razu ustawić to sformułowanie odporne na resztę serii. Powiedzenie „tekst wchodzi, tekst wychodzi” jest wygodne, ale prawdziwe tylko dla klasycznego modelu językowego. W modelach multimodalnych na brzegach stoją inne enkodery i dekodery — obraz nie jest zamieniany na opis słowny, tylko od razu na liczby, a na wyjściu osobny dekoder zamienia tokeny w piksele albo w falę dźwiękową. Zmienia się to, co reprezentuje ciąg. Nie zmienia się to, co model z nim robi.

Przy okazji: „language” w nazwie to relikt. Pierwsze duże modele obsługiwały wyłącznie tekst i nazwa przyjęła się wtedy. Dziś większość tych, których używasz, przyjmuje też obraz, a coraz częściej dźwięk. Nazwa została, bo nazwy zostają.

Co z tego wynika w praktyce

Trzy rzeczy, które w codziennej pracy wyglądają na kaprysy modelu, a są konsekwencjami mechanizmu.

Model zmyśla przekonująco. Bo brzmienie wiarygodnie i bycie prawdą to dla niego ten sam proces. Żaden prompt tego nie wyłączy — pomaga dopiero dostarczenie faktów w kontekście i sprawdzenie odpowiedzi poza modelem.

Model nie pamięta. Nie dlatego, że ktoś zapomniał zaimplementować pamięć, tylko dlatego, że wagi są zamrożone i nie ma gdzie niczego zapisać. Historia rozmowy działa wyłącznie dlatego, że interfejs wysyła ją w całości przy każdym pytaniu. To jest przyczyna, dla której pamięć agenta buduje się z zewnątrz — a nie chwilowe ograniczenie.

Model nie sprawdzi własnej odpowiedzi. Pytanie „jesteś pewny?” nie daje wiarygodnego wyniku, bo deklaracja pewności powstaje tym samym mechanizmem co treść, którą ma ocenić. Weryfikacja musi przyjść z zewnątrz.

Wszystkie trzy prowadzą w to samo miejsce: rozwiązania nie mieszkają w modelu, tylko w warstwie nad nim. Jeśli czytałeś Anatomię agenta AI, rozpoznasz w tym opis połowy tamtej serii. Ta seria tłumaczy, dlaczego tamte rozwiązania musiały powstać.

Jak to sprawdzić u siebie

Do tego miejsca nie potrzebowałeś kodu i dalej nie potrzebujesz — poniższe kilkanaście linii jest dla tych, którzy chcą zobaczyć rozkład prawdopodobieństwa na własne oczy.

Większość API zgodnych z formatem OpenAI pozwala poprosić o logarytmy prawdopodobieństw wraz z listą najlepszych kandydatów na każdej pozycji. To dokładnie ten rozkład, o którym mowa wyżej.

python
from openai import OpenAI
import math

client = OpenAI()

r = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Stolica Polski to"}],
    max_tokens=1,
    logprobs=True,
    top_logprobs=5,
)

for kandydat in r.choices[0].logprobs.content[0].top_logprobs:
    print(f"{kandydat.token!r:15} {math.exp(kandydat.logprob):.1%}")

Zobaczysz pięć kandydatów na jeden token i ich prawdopodobieństwa. Model nie „wie”, że stolicą jest Warszawa — ma rozkład, w którym ta odpowiedź dominuje. Spróbuj teraz zapytać o coś, czego w danych być nie mogło, na przykład o adres e-mail konkretnej osoby. Rozkład nadal będzie, kandydaci nadal będą wyglądać sensownie i nic w wyniku nie zasygnalizuje, że model zgaduje.

To jest halucynacja oglądana od środka, zanim jeszcze zamieni się w zdanie.

Nazwy parametrów różnią się między dostawcami, a część modeli nie udostępnia logprobs w ogóle — jeśli twój ich nie ma, zadziała każdy model otwarty uruchomiony lokalnie.

Co dalej

Skoro model dostaje ciąg tokenów, warto wiedzieć, czym właściwie jest token i skąd się bierze. Okazuje się, że krok, który zamienia twój tekst w liczby, nie jest częścią sieci neuronowej w ogóle — a mimo to decyduje o tym, ile zapłacisz. I że po polsku płacisz więcej.

O tym jest artykuł drugi: Tokenizacja — jak tekst przestaje być tekstem.

Inference — jak powstaje odpowiedź, token po tokenie

Inference — jak powstaje odpowiedź, token po tokenie

W pierwszym artykule kod z aneksu pokazywał rozkład prawdopodobieństwa: pięciu kandydatów na jeden token, każdy ze swoją liczbą. Zostawiliśmy go tam bez ciągu dalszego. Teraz pytanie, które się wtedy nasuwało: skoro model zwraca rozkład, to kto właściwie wybiera jedno...

Attention — jak model decyduje, na co patrzeć

Attention — jak model decyduje, na co patrzeć

„Zamek był zardzewiały." Przeczytałeś to i już wiesz, że nie chodzi o budowlę. Wiesz dzięki jednemu słowu, które stoi obok. Gdyby zamiast „zardzewiały" było „otoczony fosą", to samo słowo znaczyłoby coś zupełnie innego. W poprzednim artykule zostawiliśmy model...

Embeddingi — czym jest znaczenie dla maszyny

Embeddingi — czym jest znaczenie dla maszyny

Wpisz w dowolną wyszukiwarkę semantyczną „auto", a znajdzie ci dokumenty o samochodach. Nie dlatego, że ktoś ręcznie wpisał synonimy. Te dwa słowa nie mają wspólnego rdzenia, nie mają wspólnej odmiany, a mimo to maszyna traktuje je jako bliskie. To jest jedyne miejsce...