Funktionsweise von LLMs
Die meisten, die ChatGPT zum ersten Mal benutzen, sind beeindruckt. Da sitzt scheinbar jemand am anderen Ende, der mühelos auf fast jede Frage antwortet - in fließendem Deutsch, Englisch oder Klingonisch, mal als Shakespeare, mal als SQL-Profi. Doch hinter dem freundlichen Chatfenster steckt kein kleiner Mensch, sondern viel Mathematik, noch mehr Daten und ein bisschen Magie (die wir gleich entzaubern).
Bevor wir jedoch lernen, wie man diese Werkzeuge mit guten Prompts zur Höchstform bringt, sollten wir verstehen, wie sie funktionieren.
Grundlage dieses Kapitels
Dieses Kapitel orientiert sich inhaltlich an Kapitel 3 des Buchs:
Zuckarelli, J. (2025): Programmieren mit ChatGPT. Kapitel 3 - „Funktionsweise des (Chat)GPT-Modells und anderer Large Language Models (LLMs)". Springer Nature. https://doi.org/10.1007/978-3-662-69433-6_3
Wir betrachten die Technik aus der Vogelperspektive - ohne Vorkenntnisse in linearer Algebra. Wer tiefer einsteigen will, findet die mathematischen Details in der Originalquelle.
Drei Fähigkeiten, die beeindrucken
Wenn man ChatGPT & Co. genauer betrachtet, machen vor allem drei Fähigkeiten den beeindruckenden Eindruck aus1:
- natürliche Sprache zu produzieren - und das in vielen verschiedenen Sprachen,
- den Input des Nutzers sprachlich und inhaltlich zu verstehen,
- scheinbar kreativ tätig zu werden und Dinge zu erschaffen, die es so vorher nicht gab.
Während Maschinen Sprache schon länger übersetzen können (Google Translate, DeepL), ist besonders das Verstehen und das kreative Erzeugen neu. Schauen wir uns an, wie das gelingt.
Das Zauberwort: Transformer
Das Herzstück moderner Sprachmodelle heißt Transformer. Und nein - damit ist nicht das Auto gemeint, das sich in einen Roboter verwandelt. Gemeint ist eine Architektur, die einen Input (Text, mittlerweile auch Bilder oder Audio) in einen Output transformiert.
Populär wurde der Transformer durch eine Veröffentlichung mit dem wohl coolsten Titel der KI-Geschichte: „Attention Is All You Need"2. Acht Google-Forscher legten damit den Grundstein für so ziemlich jeden Chatbot, den du heute kennst.
Grob besteht ein Transformer aus zwei Teilen:
flowchart LR
A[Input<br/>z. B. dein Prompt]:::peach --> B(Encoder<br/> versteht den Input):::teal
B --> C(Decoder<br/>erzeugt den Output):::teal
C --> D[Output<br/>z. B. die Antwort]:::peach
classDef peach fill:#FFB482aa,stroke:#333,stroke-width:1px;
classDef teal fill:#009485aa,stroke:#333,stroke-width:1px;
- Der Encoder analysiert den Input und versteht ihn im Kontext.
- Der Decoder erzeugt daraus Wort für Wort den Output.
Wie kommt das Modell aber von „deinem Prompt" zu „dem Verständnis"? Dafür durchläuft der Text mehrere Stationen. Gehen wir sie der Reihe nach durch.
1) Tokenization
Ein Computer kann mit Buchstaben nichts anfangen. Deshalb wird dein Text zuerst in kleine Bausteine zerlegt, sogenannte Tokens. Ein Token kann ein ganzes Wort sein - oft aber auch nur ein Wortteil.
Token & Vocabulary
Ein Token ist die kleinste Verarbeitungseinheit eines LLM. Jedes Token besitzt eine eindeutige ID im Vocabulary (dem „Wortschatz" des Modells).
Faustregel: Im Englischen entspricht 1 Token ≈ 4 Zeichen ≈ ¾ Wort. „Tokens" und „Wörter" sind also nicht dasselbe - auch wenn wir der Einfachheit halber manchmal von „Wörtern" sprechen.
Ein Beispiel mit dem Tokenizer, den OpenAI nutzt (Python-Bibliothek tiktoken):
import tiktoken as tt
# "cl100k_base" ist das Tokenizer-Modell, das ChatGPT-4 verwendet
enc = tt.get_encoding("cl100k_base")
encoded = enc.encode('He said: "Let me explain tokenization to you. It is comparably easy."')
print(encoded)
[1548, 1071, 25, 330, 10267, 757, 10552, 4037, 2065, 311, 499, 13, 1102, 374, 7809, 2915, 4228, 1210]
Der Satz oben hat 69 Zeichen, wird aber zu 18 Tokens zerlegt. Wörter wie tokenization zerfallen dabei in mehrere Häppchen (token + ization).
Warum das für Prompt Engineering wichtig ist
LLMs rechnen pro Token ab und haben ein Token-Limit (das Kontextfenster). Wer das versteht, formuliert effizienter:
- Lange, umständliche Prompts kosten mehr Tokens - und damit Geld und Platz im Kontextfenster.
- Seltene Begriffe, Tippfehler und Sonderzeichen erzeugen oft überraschend viele Tokens.
Du kannst auf platform.openai.com/tokenizer live ausprobieren, wie dein Text zerlegt wird.
2) Word Embeddings
Tokens sind erstmal nur IDs - nackte Zahlen ohne Bedeutung. Damit das Modell mit Bedeutung arbeiten kann, wird jedes Token in einen Vektor aus vielen Zahlen übersetzt: das Embedding.
Man kann sich jedes Element des Vektors als einen Aspekt des Wortes vorstellen. Je höher der Wert, desto stärker ist dieser Aspekt ausgeprägt:
„Programmierer" und „Entwickler" haben ähnliche Vektoren - kein Wunder, sie bedeuten fast dasselbe. „Wald" zeigt in eine ganz andere Richtung.
Das Faszinierende: Mit Embeddings kann man sogar rechnen. Das berühmteste Beispiel:
Embedding-Mathematik zum Schmunzeln
Wenn du dem Modell „König" gibst, die „Männlichkeit" abziehst und „Weiblichkeit" addierst, landest du ungefähr bei „Königin". Sprache wird hier buchstäblich zur Vektor-Geometrie. 🤯
Solche „Bedeutungsvektoren" wurden u. a. durch das Modell Word2Vec3 bekannt.
import gensim.downloader as api
# Wir laden fertige Wortvektoren - **GloVe**, trainiert auf englischen Wikipedia-Texten
modell = api.load("glove-wiki-gigaword-50")
# König - Mann + Frau = ?
ergebnis = modell.most_similar(positive=["king", "woman"], negative=["man"], topn=3)
for wort, aehnlichkeit in ergebnis:
print(f"{wort:<12} {aehnlichkeit:.3f}")
queen 0.852
throne 0.766
prince 0.759
queen steht an erster Stelle - herausgerechnet aus purer Vektor-Arithmetik, ohne dass dem Modell jemals jemand erklärt hätte, was ein König ist.
Das geladene Modell wurde auf englischen Wikipedia-Texten trainiert und kennt nur englische Wörter. Für deutsche Wörter bräuchtest du ein deutsches Modell - die sind allerdings deutlich größer (mehrere GB).
3) Positional Encoding
Bedeutung allein reicht nicht. Vergleiche:
„Hans fütterte das Eichhörnchen." 🧑➡️🐿️
„Das Eichhörnchen fütterte Hans." 🐿️➡️🧑
Gleiche Wörter, völlig andere Bedeutung - nur die Reihenfolge ist anders (und in einem Fall ist Hans in Schwierigkeiten). Anders als ältere Ansätze (RNNs) verarbeitet der Transformer alle Wörter gleichzeitig. Das ist schnell, hat aber einen Haken: Ohne Zusatzinfo wüsste das Modell gar nicht mehr, welches Wort wo stand.
Die Lösung heißt Positional Encoding: Die Position eines Wortes wird über (Sinus-/Kosinus-)Werte direkt in seinen Embedding-Vektor hineingerechnet. So tragen die Vektoren ab jetzt zwei Informationen: Was bedeutet das Wort und wo steht es im Satz.
flowchart LR
E[Embedding<br/>Bedeutung]:::teal --> P((+)):::peach
POS[Positional Encoding<br/>Position im Satz]:::teal --> P
P --> R[Vektor mit<br/>Bedeutung + Position]:::peach
classDef peach fill:#FFB482aa,stroke:#333,stroke-width:1px;
classDef teal fill:#009485aa,stroke:#333,stroke-width:1px;
Für alle NERDS
Für alle, die es gerne etwas genauer wissen wollen gibt es hier eine kleine Demonstration. Anders als die Wortvektoren muss hier nichts heruntergeladen werden - Positional Encoding ist eine reine Formel. Diese hier, aus dem „Attention Is All You Need"-Paper2:
Die drei Symbole in der Formel
| Symbol | Bedeutung |
|---|---|
| \(pos\) | Position des Wortes im Satz: 0, 1, 2, 3 … |
| \(d\) | Länge des Vektors - wie viele Zahlen ein Token beschreiben. Im Paper heißt sie d_model, im Code unten genauso. |
| \(i\) | Stelle innerhalb des Vektors: 0, 1, 2 … bis \(d\) |
Warum \(d\) entscheidend ist: Der Positionsvektor wird auf das Wort-Embedding addiert (siehe Diagramm oben). Beide müssen deshalb exakt gleich lang sein. Ein 8-stelliger Positionsvektor passt nur zu einem 8-stelligen Wortvektor.
Typische Werte für \(d\):
- 8 und 64 in unseren Beispielen unten - klein genug zum Anschauen
- 50 beim GloVe-Modell aus dem vorigen Abschnitt (
glove-wiki-gigaword-50) - 512 im ursprünglichen Transformer-Paper2 (Basismodell; die größere Variante nutzt 1.024)
- 12.288 bei GPT-34
Und wozu \(i\)? Es steuert, wie schnell die Sinuskurve schwingt: vorne im Vektor schnell, nach hinten immer langsamer. Genau deshalb stehen in der Ausgabe gleich unten hinten fast überall 0. und 1. - dort hat sich die Kurve bei so kleinen Positionen noch kaum bewegt.
In Python sind das fünf Zeilen:
import numpy as np
def positional_encoding(position, d_model):
"""Sinus-/Kosinus-Positionscodierung nach Vaswani et al. (2017)."""
i = np.arange(d_model) // 2 * 2 # 0,0,2,2,4,4,...
winkel = position / np.power(10000, i / d_model)
return np.where(np.arange(d_model) % 2 == 0, np.sin(winkel), np.cos(winkel))
np.set_printoptions(precision=2, suppress=True)
for pos in range(4):
print(f"Position {pos}: {positional_encoding(pos, d_model=8)}")
Position 0: [0. 1. 0. 1. 0. 1. 0. 1.]
Position 1: [0.84 0.54 0.1 1. 0.01 1. 0. 1. ]
Position 2: [ 0.91 -0.42 0.2 0.98 0.02 1. 0. 1. ]
Position 3: [ 0.14 -0.99 0.3 0.96 0.03 1. 0. 1. ]
Jede Position bekommt einen eigenen Zahlen-Fingerabdruck. Position 0 ist dabei besonders einfach zu lesen: sin(0) = 0 und cos(0) = 1, daher das Muster 0, 1, 0, 1, …
Der eigentliche Punkt: dasselbe Wort, zwei Positionen
Jetzt der Hans-Test. Wir nehmen einen Wortvektor und addieren einmal die Position 0 und einmal die Position 3 dazu:
hans = np.array([0.9, 0.1, 0.5, 0.2, 0.7, 0.3, 0.4, 0.6])
print(f"'Hans' roh : {hans}")
print(f"'Hans' an Position 0: {np.round(hans + positional_encoding(0, 8), 2)}")
print(f"'Hans' an Position 3: {np.round(hans + positional_encoding(3, 8), 2)}")
'Hans' roh : [0.9 0.1 0.5 0.2 0.7 0.3 0.4 0.6]
'Hans' an Position 0: [0.9 1.1 0.5 1.2 0.7 1.3 0.4 1.6]
'Hans' an Position 3: [ 1.04 -0.89 0.8 1.16 0.73 1.3 0.4 1.6 ]
Zwei verschiedene Vektoren für dasselbe Wort. Genau daran erkennt das Modell, ob Hans am Satzanfang steht (und füttert) oder am Ende (und gefüttert wird).
4) Attention
Jetzt kommt der Teil, der dem Paper seinen Namen gab. Bisher hat jedes Wort einen Vektor, der seine Bedeutung und Position kennt. Aber die wahre Stärke von LLMs liegt darin, Wörter im Kontext der anderen Wörter zu verstehen.
Das Lieblingsbeispiel dafür ist das Wort „Bank":
-
„Ich gehe zur Bank und hebe Geld ab."
Kontext: Geld, abheben → gemeint ist das Finanzinstitut 🏦
-
„Ich setze mich auf die Bank im Park."
Kontext: Park, sitzen → gemeint ist das Sitzmöbel 🪑
Aus dem Wort „Bank" allein lässt sich das nicht erkennen - nur aus dem Kontext. Genau das leistet die (Self-)Attention: Sie passt den Embedding-Vektor jedes Wortes ein wenig an, indem sie ihn in Richtung der relevanten Nachbarwörter verschiebt.
Self-Attention (vereinfacht)
Jedes Wort „schaut" auf alle anderen Wörter im Satz und fragt: Wie wichtig bist du für meine Bedeutung? Anschließend wird die eigene Bedeutung als gewichteter Mittelwert der anderen Wörter angepasst.
Technisch geschieht das über drei Matrizen - Query (Q), Key (K) und Value (V) - und eine Softmax-Funktion, die die Gewichte normiert (sodass sie sich zu 1 addieren). In der Praxis passiert das mehrfach parallel und wird zur Multihead Attention zusammengesetzt.
Du musst die Matrizenrechnung nicht auswendig können. Wichtig ist die Intuition:
Merksatz
Ein Wort bekommt seine endgültige Bedeutung erst durch seine Nachbarn. Genau deshalb ist Kontext im Prompt so mächtig - mehr dazu im Kapitel Anatomie eines guten Prompts.
5) Das nächste Token
Jetzt versteht das Modell deinen Input. Aber wie entsteht die Antwort? Überraschend simpel: Das Modell sagt immer nur das nächste Token voraus - und zwar das mit der höchsten Wahrscheinlichkeit.
Dann hängt es dieses Token an den bisherigen Text an, schaut erneut, sagt das nächste Token voraus - und so weiter. Wie eine sehr, sehr gute Autovervollständigung. 📱
flowchart LR
A["Die Katze sitzt auf der ___"]:::peach --> B(LLM berechnet<br/>Wahrscheinlichkeiten):::teal
B --> C["Matte (72%)<br/>Couch (15%)<br/>Banane (0.1%)"]:::peach
C --> D["wählt: Matte"]:::teal
D -->|hängt an & wiederholt| A
classDef peach fill:#FFB482aa,stroke:#333,stroke-width:1px;
classDef teal fill:#009485aa,stroke:#333,stroke-width:1px;
Das Spiel läuft so lange, bis ein spezielles Stop-Token erzeugt wird - das Signal: „Antwort fertig."
Quiz: Halluzinationen vorhergesagt 🔮
Wenn ein LLM einfach nur das wahrscheinlichste nächste Token wählt - warum „erfindet" es dann manchmal selbstbewusst falsche Fakten (sogenannte Halluzinationen)?
Antwort anzeigen
Weil das Modell auf sprachliche Wahrscheinlichkeit optimiert ist, nicht auf Wahrheit. Es erzeugt das, was plausibel klingt - nicht das, was nachweislich stimmt. Eine flüssig formulierte Falschaussage ist für das Modell „wahrscheinlich", auch wenn sie sachlich Unsinn ist.
Genau deshalb musst du jede faktische Aussage selbst verifizieren - mit unabhängigen Quellen, nicht mit derselben KI. Mehr dazu im Kapitel Halluzinationen und Kontextfenster.
Wie wird ein LLM eigentlich klug?
Die beeindruckenden Fähigkeiten stecken in Milliarden von Parametern (GPT-3.5 z. B. ~175 Milliarden). Diese Werte entstehen in drei Trainingsphasen1:
flowchart TB
A["`**1 · Unsupervised Pre-Training**
────────────────────────────────
liest riesige Textmengen aus dem Internet`"]:::teal
B["`**2 · Supervised Fine-Tuning (SFT)**
────────────────────────────────
lernt aus Beispiel-Antworten menschlicher Trainer`"]:::peach
C["`**3 · RLHF**
────────────────────────────────
lernt aus Bewertungen, welche Antworten gut sind`"]:::teal
A --> B --> C
classDef peach fill:#FFB482aa,stroke:#333,stroke-width:1px;
classDef teal fill:#009485aa,stroke:#333,stroke-width:1px;
Das Modell liest enorme Mengen an Text aus dem Internet (z. B. Wikipedia und den gefilterten Common Crawl Corpus) und lernt nur eine Aufgabe: „Was ist das nächste Wort?"
Dabei „lernt" es sein Wissen - nicht explizit abgespeichert wie in einer Datenbank, sondern implizit in den Parametern. Genau diese Phase steckt im „P" von GPT (siehe Kasten unten). Sie dauert Monate und verschlingt gigantische Mengen an Rechenleistung und Energie.
Ein roh trainiertes Modell folgt Anweisungen oft schlecht (es antwortet auf „Was ist die Hauptstadt von Portugal?" gern mit einer Gegenfrage, weil so etwas in Quizzen häufig vorkommt 🙃).
Deshalb wird es mit tausenden Prompt-Antwort-Paaren nachtrainiert, die menschliche Trainer erstellt haben. So entstand z. B. InstructGPT - ein Modell, das wirklich tut, was man sagt.
In der letzten Phase erzeugt das Modell mehrere Antworten, und Menschen bewerten sie. Aus diesen Bewertungen wird ein Reward Model trainiert, das dem LLM beibringt, welche Antworten gut ankommen.
Reinforced Learning with Human Feedback (RLHF) macht Antworten nicht nur hilfreicher, sondern reduziert auch faktisch falsche Aussagen (Halluzinationen).5
Wofür „GPT" eigentlich steht
Der bekannteste Modellname der Welt ist eine schlichte Beschreibung der Technik - jeder Buchstabe steht für etwas, das du in diesem Kapitel bereits kennengelernt hast:
| Buchstabe | Steht für | Bedeutet |
|---|---|---|
| G | Generative | Es erzeugt neuen Text, statt nur vorhandenen zu suchen oder zu sortieren - Token für Token, wie in Station 5 beschrieben. |
| P | Pre-trained | Es wurde vorab trainiert (Phase 1 oben) und bringt sein Wissen schon mit. Du musst es nicht selbst anlernen. |
| T | Transformer | Die Architektur aus diesem Kapitel - mit Tokenization, Embeddings, Positional Encoding und Attention. |
Zusammengesetzt: ein vortrainierter Transformer, der Text erzeugt. Kein Zauberwort, sondern eine Inhaltsangabe. 🪄
Zusammenfassung 📌
flowchart LR
A[Dein Prompt]:::peach --> B[Tokenization]:::teal
B --> C[Embeddings<br/>+ Position]:::teal
C --> D[Attention<br/>Kontext]:::teal
D --> E[nächstes Token<br/>vorhersagen]:::teal
E --> F[Antwort]:::peach
E -.wiederholen.-> E
classDef peach fill:#FFB482aa,stroke:#333,stroke-width:1px;
classDef teal fill:#009485aa,stroke:#333,stroke-width:1px;
Selbsttest: Hast du den Aufbau verstanden?
- Was ist der Unterschied zwischen einem Token und einem Wort?
- Warum brauchen Transformer ein Positional Encoding?
- Erkläre in einem Satz, was Attention am Beispiel „Bank" leistet.
- Warum ist ein LLM auf Plausibilität und nicht auf Wahrheit optimiert?
Lösungsskizze
- Ein Token ist die kleinste Verarbeitungseinheit - oft nur ein Wortteil. Ein Wort kann aus mehreren Tokens bestehen.
- Weil der Transformer alle Wörter gleichzeitig verarbeitet und sonst die Reihenfolge verlieren würde.
- Attention passt die Bedeutung von „Bank" an die Nachbarwörter an - Geld → Finanzinstitut, Park → Sitzmöbel.
- Weil es darauf trainiert wurde, das wahrscheinlichste nächste Token zu erzeugen - sprachlich plausibel ≠ inhaltlich korrekt.
Quellen
Zur Ausarbeitung wurden generative Tools unterstützend eingesetzt.
-
J. L. Zuckarelli, Programmieren mit ChatGPT: Eine kompakte Einführung. Springer, 2025, doi: 10.1007/978-3-662-69433-6. ↩↩
-
A. Vaswani, N. Shazeer, N. Parmar, et al., "Attention is all you need," arXiv:1706.03762, 2017. ↩↩↩
-
T. Mikolov, K. Chen, G. Corrado, and J. Dean, "Efficient estimation of word representations in vector space," arXiv:1301.3781, 2013. ↩
-
T. B. Brown, B. Mann, N. Ryder, et al., "Language models are few-shot learners," arXiv:2005.14165, 2020. ↩
-
L. Ouyang, J. Wu, X. Jiang, et al., "Training language models to follow instructions with human feedback," arXiv:2203.02155, 2022. ↩