Werkzeuge · Grundlagen
Wie LLMs funktionieren:
fünf Stufen zum Nachbauen.
EN Read in English
Das Projekt how-llms-work von w3cj zerlegt die Sprachmodell-Pipeline in fünf Stufen, die alle im Browser laufen: von einem regelbasierten Chatbot bis zu einem Transformer, der ohne ML-Bibliothek trainiert wird. Ich habe den Aufbau durchgesehen und ordne ein, welche Stufen im Alltag mit LLMs weiterhelfen.
Worum es geht
Viele Erklärungen zu Sprachmodellen arbeiten mit Wortwolken, Aufmerksamkeitspfeilen oder einem Bild vom Vektorraum. how-llms-work ergänzt diese Bilder um ausführbaren Code. Jeder der fünf Abschnitte hat eine eigene Server-Route, einen Client-Hook und eine Visualisierung. Während der Berechnung überträgt der Server den Fortschritt per Server-Sent Events.
Der Stack ist schmal gehalten: Hono für Server, JSX und Client-Komponenten, Vite für Entwicklung und Bundling. Keine ML-Bibliothek. Was gerechnet wird, steht als TypeScript im Repository, inklusive Rückwärtspass und Optimierer. Das Projekt auf GitHub.
pnpm install
pnpm dev
Vorausgesetzt sind pnpm und Node 20 oder neuer. Wenn pnpm die Build-Skripte blockiert, mit
pnpm approve-builds das Paket esbuild freigeben und danach erneut
installieren.
Stufe 1: Ein Chatbot ohne Intelligenz
Simple Chat
ELIZA-Logik mit modernem Streaming
Grundlage: Weizenbaum (1966), ELIZA
Die erste Stufe ist ein Chatbot aus Bedingungen und Textmustern, wie ihn Joseph Weizenbaum 1966 gebaut hat. Er kennt keine Wahrscheinlichkeiten und lernt nichts. Er prüft, ob ein Muster passt, und antwortet mit dem hinterlegten Satz. Die Antwort kommt Wort für Wort über Server-Sent Events. Dadurch ähnelt die Ausgabe dem Streaming moderner Chatoberflächen.
Der Trick dieser Stufe liegt im Kontrast. Die Oberfläche fühlt sich an wie ein Sprachmodell, weil Streaming, Tippanimation und Chatverlauf identisch sind. Dahinter steckt eine Wenn-dann-Kette. Wer schon einmal einen Prototyp gesehen hat, der vor allem deshalb überzeugte, weil die Oberfläche stimmte, erkennt das Muster wieder.
Für die Praxis heißt das: Auch die Oberfläche prägt den Eindruck einer KI-Anwendung. Dazu gehören die Zeit bis zum ersten Token, die Streaminggeschwindigkeit und die Darstellung des Verlaufs. Eine flüssige Oberfläche kann Modellschwächen anfangs verdecken.
Stufe 2: XOR und die Grenze einer Schicht
Neural Net
Warum ein Perzeptron an vier Datenpunkten scheitert
Grundlage: Rumelhart, Hinton & Williams (1986), Learning Representations by Back-Propagating Errors
Hier trainiert ein Netz live im Browser auf die XOR-Funktion, also auf vier Eingabepaare mit vier bekannten Antworten. Ein einschichtiges Perzeptron schafft das nicht, weil sich die Lösung nicht durch eine Gerade trennen lässt. Minsky und Papert beschrieben solche Grenzen einschichtiger Perzeptrons 1969. Die späteren Rückgänge bei Forschungsgeldern und öffentlichem Interesse hatten allerdings mehrere technische und politische Ursachen.
Mit einer verdeckten Schicht und Backpropagation fällt der Fehler dann doch. An einem Problem, das auf ein Blatt Papier passt, sieht man die Gewichte wandern und die Verlustkurve sinken.
An vier Datenpunkten wird sichtbar, was ein Diagramm über Gradientenabstieg leicht verdeckt: Der Rückwärtspass berechnet, wie stark jeder Parameter zum Fehler beigetragen hat. Ein Optimierer nutzt diese Gradienten anschließend für die Gewichtsänderungen. Auch beim Training eines GPT-Modells bilden diese beiden Schritte die Grundlage, ergänzt um viele weitere Verfahren und erheblich mehr Rechenaufwand.
Stufe 3: Der Tokenizer, der die Rechnung schreibt
BPE
Byte Pair Encoding, trainiert auf eigenem Text
Grundlage: Sennrich, Haddow & Birch (2016), Neural Machine Translation of Rare Words with Subword Units
Der Nutzer gibt Text ein, der Algorithmus beginnt bei einzelnen Zeichen und verschmilzt in jedem Durchgang das häufigste Paar zu einer neuen Einheit. Die Visualisierung zeigt jeden Verschmelzungsschritt, bis aus Buchstaben Silben und aus Silben ganze Wörter geworden sind.
Von allen fünf Stufen hat diese für meinen Arbeitsalltag den größten direkten Nutzen, weil der Tokenizer bestimmt, was ein Aufruf kostet und wie viel in das Kontextfenster passt. Wer eigenen Text durch die Demo schickt, sieht, dass die Sprache und das Trainingsmaterial des Tokenizers die Zerlegung beeinflussen. Deutsche Komposita, Umlaute und Flexionsendungen können dabei in mehr Einheiten zerfallen als englische Formulierungen. In meinen RAG-Projekten lag der Aufschlag bei deutschen Fachtexten meist zwischen einem Drittel und der Hälfte gegenüber einer englischen Übersetzung desselben Inhalts. Das ist ein Erfahrungswert aus diesen Projekten, kein allgemeiner Faktor.
Die Tokenisierung trägt auch dazu bei, dass Modelle Buchstaben in einem Wort schlecht zählen, lange Zahlen ungenau verarbeiten oder für tief verschachteltes JSON viel Kontext verbrauchen. Das Modell verarbeitet Token-IDs und deren Einbettungen. Einzelne Zeichen sind je nach Tokenisierung nur indirekt darin enthalten.
Stufe 4: Embeddings, und warum das Modell für RAG entscheidet
Word2Vec
Skip-Gram mit Negative Sampling
Grundlage: Mikolov et al. (2013), Efficient Estimation of Word Representations und Distributed Representations of Words and Phrases
Das Modell lernt zu jedem Wort einen Vektor, indem es vorhersagt, welche Wörter in dessen Umgebung stehen. Negative Sampling zieht dazu einige zufällige Nichtnachbarn, statt über das gesamte Vokabular zu normieren, was das Training überhaupt erst bezahlbar macht. Die Demo zeigt, wie sich Wörter mit ähnlichem Gebrauch im Laufe des Trainings zusammenschieben.
Word2Vec ist von 2013; heutige Suchsysteme verwenden meist kontextabhängige Transformer-Embeddings. Beide Ansätze lernen aus sprachlichen Kontexten, unterscheiden sich aber deutlich in Architektur und Trainingsziel. Nähe im Vektorraum bildet deshalb keine verlässliche Gleichheit der Bedeutung ab. Semantische Suche scheitert etwa bei Gegensatzpaaren. „Vertrag gekündigt“ und „Vertrag verlängert“ stehen in fast identischen Umgebungen und landen entsprechend dicht beieinander.
Bei einer Wissensdatenbank wirkt sich das Embedding-Modell direkt auf die Vorauswahl der Textstellen aus. Das nachgeschaltete Sprachmodell kann fehlende Treffer nicht zuverlässig zurückholen. Bei deutschsprachigen Beständen lagen mehrsprachig trainierte Modelle in meinen Vergleichen vor englischlastigen Standardmodellen. Bei kurzen Chunks war der Abstand größer als bei langen. Auch das ist eine Beobachtung aus meinen Projekten und kein allgemeines Ranking.
Stufe 5: Ein Transformer ohne Bibliothek
GPT from scratch
Decoder-only, alles von Hand
Grundlage: Vaswani et al. (2017), Attention Is All You Need · Radford et al. (2018), GPT-1
Die letzte Stufe baut einen Decoder-only-Transformer und trainiert ihn im Browser. Multi-Head
Causal Self-Attention, Layer Normalization, Feed-Forward-Blöcke, Rückwärtspass und
Adam-Optimierer sind ausgeschrieben. Für die Geschwindigkeit läuft das Training über mehrere
Threads mit SharedArrayBuffer.
Die Bauteile stammen aus einer Reihe von Arbeiten, die das Projekt einzeln verlinkt und die im Code als benannte Funktionen wieder auftauchen:
| Bauteil | Herkunft | Aufgabe |
|---|---|---|
| Xavier-Initialisierung | Glorot & Bengio, 2010 | Startgewichte so skalieren, dass Signale in tiefen Netzen weder verpuffen noch explodieren |
| Layer Normalization | Ba, Kiros & Hinton, 2016 | Aktivierungen vor Attention und Feed-Forward normieren, damit das Training stabil bleibt |
| Adam | Kingma & Ba, 2014 | Lernrate je Parameter anpassen statt global |
| Causal Self-Attention | Vaswani et al., 2017 | Jedes Token gewichtet die vorangehenden Token, künftige bleiben verdeckt |
| Nucleus Sampling | Holtzman et al., 2019 | Bei der Ausgabe nur aus der Wahrscheinlichkeitsmasse ziehen, die den Anteil p abdeckt |
Für Anwendungen wird diese Stufe beim Sampling konkret.
Holtzman et al.
untersuchten 2019, warum die jeweils wahrscheinlichste Fortsetzung häufig zu wiederholtem Text
führt und unbeschränktes Sampling aus der vollen Verteilung instabil werden kann. Top-p schneidet
den Schwanz der Verteilung ab und zieht aus dem Rest. Wer in einer Anwendung an
temperature und top_p dreht, verschiebt genau diese Grenze, und in der
Demo lässt sich der Effekt an einem winzigen Modell direkt beobachten.
Wie das Projekt aufgebaut ist
Alle fünf Abschnitte folgen demselben Dreischritt, was das Lesen erleichtert, sobald man einen davon verstanden hat:
- Server-Route unter
src/routes/: ein Hono-POST-Endpunkt, der die Eingabe annimmt und den Rechenfortschritt als SSE-Ereignisse zurückschickt. - Client-Hook unter
src/client/hooks/: hält den UI-Zustand und verbindet den Ereignisstrom überuseSSEChatmit der Darstellung. - Result-Komponente unter
src/client/components/: zeichnet die eintreffenden Daten als Visualisierung.
Geteilt werden der BPE-Tokenizer in src/server/lib/bpe.ts, den die Stufen 3 bis 5
gemeinsam nutzen, sowie die SSE-Hilfsfunktionen auf beiden Seiten. Wer nur ein Detail nachlesen
will, kommt über diese Dateien schnell hin.
Welche Stufen im Projektalltag helfen
Für Teams, die LLM-Anwendungen betreiben, sind vor allem die Stufen 3 und 4 relevant. Tokenizer und Embeddings sind die beiden Stellen, an denen eigene Entscheidungen anstehen und an denen Fehler direkt aufs Budget und auf die Trefferqualität durchschlagen. Die Stufen 2 und 5 erklären, warum Modelle sich verhalten, wie sie sich verhalten, ändern an der eigenen Architektur aber wenig.
Ein Transformer, der im Browser auf einem kleinen Korpus trainiert, zeigt einzelne Mechanismen. Das Verhalten großer Modelle lässt sich daraus nicht ableiten. Mit der Parameterzahl ändern sich die Rechenkosten, die Datenmischung, die Trainingsverfahren und die Auswertung.
Der Aufwand hält sich in Grenzen. Repository klonen, pnpm install,
pnpm dev, danach lassen sich alle fünf Abschnitte mit eigenem Text füttern.
LLM-Anwendung im Aufbau?
Ich baue RAG- und LLM-Anwendungen für den Produktivbetrieb, von der Wahl des Embedding-Modells über Chunking und Auswertung bis zum Monitoring im laufenden Betrieb. 30 Minuten Erstgespräch, kostenlos.