Prompt Engineering
Strategien für effektive Prompts in KI-Agenten-Systemen
Inhaltsverzeichnis
- Überblick
- Grundlegende Prompt-Strukturen
- System-Prompts für Agenten
- Tool-Beschreibungen optimieren
- Ausgabeformatierung
- Fortgeschrittene Strategien
- Best Practices
- Häufige Fehler und Lösungen
- Zusammenfassung
- Abgrenzung zu verwandten Dokumenten
Überblick
Ein Prompt ist die Schnittstelle zwischen Mensch und Sprachmodell. Die Qualität der Antwort hängt maßgeblich davon ab, wie eine Aufgabe formuliert wird – nicht nur was gefragt wird.
Für KI-Agenten ist Prompt Engineering besonders relevant:
| Kontext | Bedeutung |
|---|---|
| System-Prompts | Definieren Rolle, Fähigkeiten und Grenzen des Agenten |
| Tool-Beschreibungen | Bestimmen, wann und wie ein Agent Werkzeuge einsetzt |
| Reasoning-Prompts | Steuern den Denkprozess bei komplexen Aufgaben |
| Output-Formatierung | Garantieren strukturierte, verarbeitbare Antworten |
Kernprinzip: Ein gut formulierter Prompt reduziert Fehler, verbessert die Konsistenz und macht das Verhalten eines Agenten vorhersagbar.
Grundlegende Prompt-Strukturen
Effektive Prompts folgen einer klaren Struktur. Drei Grundmuster haben sich etabliert.
Zero-Shot Prompting
Das Modell erhält eine Aufgabe ohne Beispiele und löst sie basierend auf seinem Vorwissen.
from langchain_core.prompts import ChatPromptTemplate
# Zero-Shot: Keine Beispiele, direkte Aufgabe
prompt = ChatPromptTemplate.from_messages([
("system", "Du bist ein hilfreicher Assistent."),
("human", "Klassifiziere die folgende E-Mail als 'dringend' oder 'normal': {email}")
])
Geeignet für:
- Einfache, eindeutige Aufgaben
- Allgemeinwissen-Fragen
- Standardformatierungen
Few-Shot Prompting
Das Modell erhält Beispiele, die das gewünschte Verhalten demonstrieren.
few_shot_prompt = ChatPromptTemplate.from_messages([
("system", "Klassifiziere E-Mails nach Dringlichkeit."),
("human", "Betreff: Server ausgefallen"),
("assistant", "dringend"),
("human", "Betreff: Quartalsbericht verfügbar"),
("assistant", "normal"),
("human", "Betreff: {email_subject}")
])
Geeignet für:
- Spezifische Formatvorgaben
- Domänenspezifische Klassifikationen
- Konsistente Ausgabestrukturen
Chain-of-Thought (CoT)
Das Modell wird angewiesen, seinen Denkprozess schrittweise darzulegen.
cot_prompt = ChatPromptTemplate.from_template(
"""Löse die folgende Aufgabe Schritt für Schritt.
Aufgabe: {aufgabe}
Denke laut nach:
1. Was ist gegeben?
2. Was wird gesucht?
3. Welche Schritte sind nötig?
4. Führe jeden Schritt aus.
5. Formuliere die Antwort.
Lösung:"""
)
Geeignet für:
- Mathematische Probleme
- Logische Schlussfolgerungen
- Mehrstufige Analysen
System-Prompts für Agenten
Der System-Prompt definiert die Identität und das Verhalten eines Agenten. Er ist der wichtigste Hebel für konsistentes Agentenverhalten.
Struktur eines effektiven System-Prompts
Ein guter System-Prompt beantwortet vier Fragen:
| Frage | Inhalt |
|---|---|
| Wer? | Rolle und Expertise des Agenten |
| Was? | Aufgabenbereich und Fähigkeiten |
| Wie? | Verhaltensregeln und Tonalität |
| Was nicht? | Explizite Einschränkungen |
Beispiel: Vollständiger Agent-System-Prompt
system_prompt = """Du bist ein technischer Support-Agent für ein Software-Unternehmen.
ROLLE:
- Experte für die Produkte X, Y und Z
- Erste Anlaufstelle für technische Fragen
- Eskalation an Menschen bei komplexen Fällen
FÄHIGKEITEN:
- Zugriff auf die Wissensdatenbank (Tool: search_knowledge)
- Ticket-Erstellung im Helpdesk (Tool: create_ticket)
- Prüfung des Kundenstatus (Tool: check_customer)
VERHALTENSREGELN:
- Antworte präzise und lösungsorientiert
- Frage nach, wenn Informationen fehlen
- Bestätige Verständnis bei komplexen Problemen
- Verwende technische Begriffe nur mit Erklärung
EINSCHRÄNKUNGEN:
- Keine Preisauskünfte oder Vertragsänderungen
- Keine Zusagen ohne Rücksprache mit dem Vertrieb
- Bei Sicherheitsfragen immer an Security-Team eskalieren
"""
Typische Fehler bei System-Prompts
[!WARNING] System-Prompt Anti-Patterns
Diese Fehler führen zu inkonsistentem, unvorhersagbarem Agentenverhalten — oft erst in der Produktion erkennbar.
| Fehler | Problem | Lösung |
|---|---|---|
| Zu vage | Agent verhält sich inkonsistent | Konkrete Beispiele und Regeln |
| Zu lang | Wichtige Anweisungen gehen unter | Priorisieren, strukturieren |
| Widersprüchlich | Agent “halluziniert” Kompromisse | Eindeutige Hierarchie |
| Keine Grenzen | Agent überschreitet Kompetenz | Explizite Einschränkungen |
Tool-Beschreibungen optimieren
Die Beschreibung eines Tools bestimmt, ob und wann ein Agent es korrekt einsetzt. Eine präzise Beschreibung ist entscheidender als der Code dahinter.
Anatomie einer guten Tool-Beschreibung
from langchain_core.tools import tool
@tool
def search_knowledge(query: str, max_results: int = 5) -> str:
"""Durchsucht die interne Wissensdatenbank nach relevanten Artikeln.
WANN VERWENDEN:
- Bei Fragen zu Produktfunktionen
- Bei Fehlermeldungen und deren Lösungen
- Bei How-To-Anfragen
WANN NICHT VERWENDEN:
- Bei Fragen zu Preisen oder Verträgen
- Bei persönlichen Kundendaten
- Wenn die Antwort bereits bekannt ist
Args:
query: Suchbegriff oder Frage in natürlicher Sprache
max_results: Maximale Anzahl zurückgegebener Artikel (1-10)
Returns:
Formatierte Liste relevanter Wissensartikel mit Titel und Zusammenfassung
"""
# Implementation...
Checkliste für Tool-Beschreibungen
- Zweck klar benannt – Was macht das Tool?
- Anwendungsfälle – Wann soll es verwendet werden?
- Gegenanzeigen – Wann soll es NICHT verwendet werden?
- Parameter erklärt – Was bedeuten die Eingaben?
- Rückgabewert beschrieben – Was kommt zurück?
Ausgabeformatierung
Strukturierte Ausgaben machen Agentenantworten verarbeitbar und konsistent.
Explizite Formatvorgaben
format_prompt = ChatPromptTemplate.from_template(
"""Analysiere den folgenden Text und extrahiere die Kernaussagen.
Text: {text}
Antworte EXAKT in diesem Format:
HAUPTTHEMA: [Ein Satz]
KERNAUSSAGEN:
- [Punkt 1]
- [Punkt 2]
- [Punkt 3]
STIMMUNG: [positiv/neutral/negativ]
KONFIDENZ: [hoch/mittel/niedrig]
"""
)
Strukturierte Ausgaben mit Pydantic
Für maschinelle Weiterverarbeitung bietet LangChain typsichere Ausgaben:
from pydantic import BaseModel, Field
class Analyse(BaseModel):
hauptthema: str = Field(description="Zentrales Thema in einem Satz")
kernaussagen: list[str] = Field(description="Liste der wichtigsten Punkte")
stimmung: str = Field(description="positiv, neutral oder negativ")
konfidenz: float = Field(description="Sicherheit der Analyse (0.0-1.0)")
# LLM mit strukturierter Ausgabe
structured_llm = llm.with_structured_output(Analyse)
result = structured_llm.invoke("Analysiere: " + text)
# result ist ein typisiertes Analyse-Objekt
print(result.hauptthema)
print(result.konfidenz)
Fortgeschrittene Strategien
Role-Prompting
Die Zuweisung einer spezifischen Rolle verbessert domänenspezifische Antworten.
role_prompts = {
"jurist": "Du bist ein erfahrener Rechtsanwalt mit Spezialisierung auf IT-Recht.",
"mediziner": "Du bist ein Facharzt für Innere Medizin mit 20 Jahren Berufserfahrung.",
"entwickler": "Du bist ein Senior Software Engineer mit Expertise in Python und Cloud-Architekturen."
}
prompt = ChatPromptTemplate.from_messages([
("system", role_prompts["entwickler"]),
("human", "{frage}")
])
Self-Consistency
Mehrere Antworten generieren und die häufigste oder konsistenteste wählen.
def self_consistent_answer(question: str, n: int = 3) -> str:
"""Generiert mehrere Antworten und wählt die konsistenteste."""
responses = []
for _ in range(n):
response = llm.invoke(question)
responses.append(response.content)
# Häufigste Antwort oder Zusammenfassung
return aggregate_responses(responses)
Retrieval-Augmented Prompting
Kontext aus externen Quellen in den Prompt integrieren:
rag_prompt = ChatPromptTemplate.from_template(
"""Beantworte die Frage basierend auf dem bereitgestellten Kontext.
Wenn die Antwort nicht im Kontext steht, sage das ehrlich.
KONTEXT:
{context}
FRAGE: {question}
ANTWORT:"""
)
Best Practices
Die CLEAR-Methode
| Buchstabe | Prinzip | Umsetzung |
|---|---|---|
| C | Concise | Präzise formulieren, Füllwörter vermeiden |
| L | Logical | Logische Struktur, klare Reihenfolge |
| E | Explicit | Erwartungen explizit benennen |
| A | Adaptive | An Aufgabe und Modell anpassen |
| R | Reproducible | Konsistente Ergebnisse ermöglichen |
Iteratives Prompt-Design
flowchart LR
A[Erster Entwurf] --> B[Testen]
B --> C{Ergebnis OK?}
C -->|Nein| D[Analysieren]
D --> E[Anpassen]
E --> B
C -->|Ja| F[Dokumentieren]
Empfohlener Workflow:
- Baseline erstellen – Einfachster funktionierender Prompt
- Schwachstellen identifizieren – Wo versagt der Prompt?
- Gezielt verbessern – Eine Änderung pro Iteration
- Testen mit Varianten – Verschiedene Eingaben prüfen
- Dokumentieren – Warum funktioniert diese Version?
Prompt-Versionierung
PROMPTS = {
"classify_email_v1": "Klassifiziere als dringend/normal: {email}",
"classify_email_v2": """Klassifiziere die E-Mail:
- dringend: Systemausfälle, Sicherheitsprobleme, Deadlines < 24h
- normal: Alle anderen Anfragen
E-Mail: {email}
Klassifikation:""",
}
# In Produktion: Version tracken
current_version = "classify_email_v2"
Häufige Fehler und Lösungen
Fehler: Ambige Anweisungen
Problem:
# Vage und mehrdeutig
prompt = "Fasse das zusammen: {text}"
Lösung:
# Präzise und eindeutig
prompt = """Erstelle eine Zusammenfassung in 3 Stichpunkten.
Jeder Punkt maximal 15 Wörter.
Fokus auf Handlungsempfehlungen.
Text: {text}
Zusammenfassung:"""
Fehler: Fehlende Beispiele bei komplexen Formaten
Problem:
# Erwartet spezifisches Format ohne Beispiel
prompt = "Extrahiere Entitäten aus: {text}"
Lösung:
# Mit Beispiel (Few-Shot)
prompt = """Extrahiere Entitäten im Format: ENTITÄT (TYP)
Beispiel:
Text: "Angela Merkel besuchte gestern Berlin."
Entitäten: Angela Merkel (PERSON), Berlin (ORT), gestern (ZEIT)
Text: {text}
Entitäten:"""
Fehler: Widersprüchliche Anweisungen
Problem:
# Widerspruch: kurz UND detailliert
prompt = "Erkläre kurz und detailliert: {thema}"
Lösung:
# Klare Priorisierung
prompt = """Erkläre das Thema in zwei Teilen:
1. KURZFASSUNG (1-2 Sätze): Kernaussage
2. DETAILS (3-5 Sätze): Wichtige Aspekte
Thema: {thema}"""
Zusammenfassung
Effektives Prompt Engineering basiert auf drei Säulen:
| Säule | Kernaspekt |
|---|---|
| Klarheit | Eindeutige, strukturierte Anweisungen |
| Kontext | Relevante Informationen und Beispiele |
| Kontrolle | Explizite Formatvorgaben und Grenzen |
Für KI-Agenten besonders wichtig:
- System-Prompts definieren das Gesamtverhalten
- Tool-Beschreibungen steuern die Werkzeugnutzung
- Strukturierte Ausgaben ermöglichen Weiterverarbeitung
- Iteratives Testen führt zu robusten Prompts
Im weiteren Kursverlauf werden diese Strategien praktisch in LangChain-Agents angewendet.
Abgrenzung zu verwandten Dokumenten
| Dokument | Inhalt |
|---|---|
| Tool Use & Function Calling | Technische Tool-Definition — dieses Dokument beschreibt, wie Tools beschrieben werden |
| Agent-Architekturen | Welche Architektur welche Prompt-Strategien voraussetzt |
| Skills | Wiederverwendbare Prompt-Strukturen als produktionsreife Muster |
Version: 1.0
Stand: November 2025
Kurs: KI-Agenten. Verstehen. Anwenden. Gestalten.