Grundlagen großer Sprachmodelle (LLM)
Was ist ein LLM?
Large Language Model (LLM) — ist ein neuronales Netzwerk, das auf großen Textmengen trainiert wurde und in der Lage ist, Text zu generieren, Sprachen zu verstehen und verschiedene Aufgaben im Bereich der natürlichen Sprachverarbeitung (NLP) zu lösen.
Tokenisierung
Tokenisierung — ist der Prozess der Aufteilung von Text in kleinere Einheiten (Tokens).
# Beispiel
Text: "Hello, world!"
Tokens: ["Hello", ",", " world", "!"]Wichtig:
- LLM arbeitet nicht mit Text, sondern mit Token-IDs
- Jedes Token hat eine eindeutige numerische ID
- Kosten werden in Tokens berechnet, nicht in Zeichen
Kosten-Beispiel:
Anfrage: 1000 Tokens
Antwort: 500 Tokens
Gesamtkosten = (1000 × Input-Preis) + (500 × Output-Preis)
Attention Mechanism (Aufmerksamkeitsmechanismus)
Attention erlaubt es dem Modell, sich auf wichtige Teile des Eingabetexts zu konzentrieren.
Beispiel:
Text: "Der Hund hat den Knochen vergraben, weil er hungrig war"
Frage: "Warum hat der Hund den Knochen vergraben?"
Attention → fokussiert auf "hungrig war"
Transformer-Architektur
Transformer — ist die Basis-Architektur moderner LLMs.
Hauptkomponenten:
- Self-Attention — erlaubt es dem Modell, Beziehungen zwischen Wörtern zu verstehen
- Multi-Head Attention — mehrere Attention-Mechanismen parallel
- Feed-Forward Networks — Verarbeitung jedes Tokens
- Positional Encoding — Informationen über die Token-Position
Context Window (Kontextfenster)
Context Window — maximale Anzahl von Tokens, die das Modell gleichzeitig verarbeiten kann.
Beispiele:
- GPT-3.5: 4K Tokens (~3000 Wörter)
- GPT-4: 8K / 32K / 128K Tokens
- Claude 3: 200K Tokens
- Gemini 1.5: bis zu 1M Tokens
Problem der langen Kontexte:
Kosten = O(n²) wo n = Anzahl der Tokens
Bei 100K Tokens sind die Kosten ~10.000× höher als bei 1K Tokens.
Training vs. Inference
Training:
- Einmaliger Prozess
- Erfordert massive Rechenressourcen (Tausende GPUs)
- Dauert Wochen/Monate
- Sehr teuer ($Millionen)
Inference:
- Jeder API-Aufruf
- Relativ günstig
- Schnell (Sekunden)
- Skalierbar
Modelltypen
1. LLM (Basis-Modelle)
- Generieren Text basierend auf Eingabe
- Beispiele: GPT-4, Claude, Gemini
2. Reasoning Models (Denkmodelle)
- “Denken” vor der Antwort
- Zeigen Gedankengang
- Beispiele: o1, o3
Unterschied:
LLM: Frage → Sofortige Antwort
Reasoning: Frage → Analyse → Gedankengang → Antwort
3. Agents (Agenten)
- Können Tools verwenden
- Treffen Entscheidungen
- Führen Aktionen aus
Beispiel:
Benutzer: "Buche einen Flug nach Berlin"
Agent:
1. Sucht Flüge (Tool: FlightSearch)
2. Vergleicht Preise
3. Bucht Ticket (Tool: BookFlight)
4. Sendet Bestätigung
Prompt Engineering vs. Contextual Engineering
Prompt Engineering
Optimierung der Anfrage an das Modell
# Schlecht
"Schreibe Code"
# Gut
"Schreibe Python-Code für eine Funktion, die
die Fibonacci-Folge bis zur N-ten Zahl berechnet.
Verwende Memoization für Optimierung.
Füge Docstrings und Type Hints hinzu."
Contextual Engineering
Bereitstellung von relevantem Kontext im Fenster
context = """
Projektregeln:
- Verwende TypeScript
- Folge Clean Code-Prinzipien
- Schreibe Unit-Tests
"""
prompt = f"{context}\n\nAufgabe: {user_task}"Memory Management (Speicherverwaltung)
Kurzfristiges Gedächtnis
- Aktueller Kontext innerhalb des Fensters
- Begrenzt durch Context Window
Langfristiges Gedächtnis
- Gespeichert in externer DB
- Wird bei Bedarf abgerufen
- Unbegrenzt, aber erfordert RAG
Implementierung:
# Kurzfristig
conversation_history = [
{"role": "user", "content": "Hallo"},
{"role": "assistant", "content": "Hallo! Wie kann ich helfen?"}
]
# Langfristig
vector_db.store(embedding(text), metadata)
relevant_context = vector_db.search(query)Kosten-Optimierung
Strategien:
- Prompt-Caching — wiederhole nicht denselben Kontext
- Token-Reduktion — entferne unnötige Wörter
- Modellauswahl — verwende kleinere Modelle für einfache Aufgaben
- Batching — kombiniere mehrere Anfragen
Beispiel:
Statt:
Request 1: Context (1000 tokens) + Question 1 (50 tokens)
Request 2: Context (1000 tokens) + Question 2 (50 tokens)
Besser:
Request: Context (1000 tokens) + Question 1 + Question 2 (100 tokens)
Temperatur und Top-P
Temperature (0.0 - 2.0)
- 0.0 — deterministisch, immer dieselbe Antwort
- 1.0 — ausgewogen
- 2.0 — kreativ, zufällig
Top-P (0.0 - 1.0)
- 0.1 — nur die wahrscheinlichsten Tokens
- 0.9 — breitere Auswahl
- 1.0 — alle Tokens berücksichtigt
Verwendung:
# Für Code-Generierung
temperature = 0.2 # Präzision
top_p = 0.9
# Für kreatives Schreiben
temperature = 0.8 # Kreativität
top_p = 0.95Häufige Probleme
1. Halluzinationen
Modell erfindet Fakten.
Lösung:
- Gib klare Anweisungen
- Verwende RAG für faktische Daten
- Validiere wichtige Antworten
2. Token-Limit überschritten
Lösung:
- Kürze den Kontext
- Verwende Zusammenfassungen
- Teile in kleinere Anfragen auf
3. Inkonsistente Ausgabe
Lösung:
- Senke Temperature
- Verwende structured output (JSON mode)
- Füge Beispiele hinzu (few-shot)
Production-Überlegungen
Monitoring:
- Token-Verwendung verfolgen
- Latenz messen
- Fehlerquote überwachen
Sicherheit:
- Input-Validierung
- Output-Filterung
- Rate Limiting
- API-Key-Schutz
Skalierung:
- Load Balancing
- Caching-Schichten
- Asynchrone Verarbeitung
- Fallback-Modelle
Best Practices
-
Klare Instruktionen
"Agiere als Senior Python Developer. Schreibe produktionsbereiten Code mit Fehlerbehandlung und Logging." -
Few-Shot Learning
Beispiel 1: Input → Output Beispiel 2: Input → Output Jetzt deine Aufgabe: Input → ? -
Chain-of-Thought
"Erkläre Schritt für Schritt: 1. Analysiere das Problem 2. Identifiziere mögliche Lösungen 3. Wähle die beste Option 4. Implementiere" -
Validierung
response = llm.generate(prompt) if not validate(response): response = llm.generate(improved_prompt)
Fazit
LLMs sind mächtige Werkzeuge, aber:
- Verstehe ihre Einschränkungen
- Optimiere Kosten
- Validiere Ausgaben
- Plane für Production
- Bleibe auf dem neuesten Stand der Entwicklungen
Für Production-Systeme ist es entscheidend, LLM-Interna zu verstehen, nicht nur die API zu verwenden.