Systematischer Debugging-Ansatz
Binärsuche über Prompt-Abschnitte: Entfernen Sie die Hälfte, testen Sie und grenzen Sie das Problem ein.
Systematischer Debugging-Ansatz ist eine kostenlose AI Prompt Engineering-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Prompt Engineering-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.
Die richtige Einstellung zum Debuggen
Das Debuggen von Prompts ähnelt dem Debuggen von Software: Ändern Sie nicht mehrere Dinge gleichzeitig, raten Sie nicht wahllos und führen Sie keine Lösung ein, die Sie nicht erklären können. Ein systematisches Vorgehen verwendet die Logik der binären Suche – bei jedem Test wird der Problemraum halbiert –, um den minimalen fehlerauslösenden Fall effizient zu finden.
Schritt 1: Den Fehler reproduzieren
Reproduzieren Sie den Fehler zuverlässig, bevor Sie mit dem Debuggen beginnen. Ein Fehler, den Sie nicht konsistent reproduzieren können, lässt sich nicht systematisch debuggen.
Führen Sie den Prompt bei derselben Eingabe fünfmal aus. Wenn er jedes Mal fehlschlägt: deterministischer Fehler – einfach zu debuggen. Wenn er nur manchmal fehlschlägt: probabilistischer Fehler – setzen Sie zuerst temperature=0, um Zufälligkeit auszuschließen, und testen Sie anschließend erneut.
import openai
client = openai.OpenAI(api_key='sk-...')
def run_prompt(prompt, user_input, temperature=0):
resp = client.chat.completions.create(
model='gpt-4o',
messages=[
{'role': 'system', 'content': prompt},
{'role': 'user', 'content': user_input}
],
temperature=temperature
)
return resp.choices[0].message.content
# Reproduce with temperature=0 to eliminate randomness
for i in range(5):
output = run_prompt(failing_prompt, test_input, temperature=0)
print(f'Run {i+1}:', output[:100])Schritt 2: Einen minimal reproduzierbaren Prompt erstellen
Ein minimal reproduzierbarer Prompt (MRP) ist der kürzeste Prompt, der den Fehler weiterhin auslöst. Durch das Entfernen irrelevanter Teile wird der problematische Abschnitt isoliert und der Fehler eindeutig nachvollziehbar.
Beginnen Sie mit dem vollständigen Prompt und entfernen Sie die Hälfte des Inhalts. Testen Sie. Wenn der Fehler weiterhin auftritt: Der problematische Abschnitt befindet sich in der Hälfte, die Sie beibehalten haben. Wiederholen Sie den Vorgang. Das ist eine binäre Suche im Prompt.
def binary_search_prompt(prompt_lines, user_input, fail_fn):
'''Binary search: find the minimal set of lines that causes the failure.'''
if len(prompt_lines) == 1:
return prompt_lines # Minimal failing unit found
mid = len(prompt_lines) // 2
first_half = prompt_lines[:mid]
second_half = prompt_lines[mid:]
# Test first half
if fail_fn('\n'.join(first_half), user_input):
return binary_search_prompt(first_half, user_input, fail_fn)
# Test second half
elif fail_fn('\n'.join(second_half), user_input):
return binary_search_prompt(second_half, user_input, fail_fn)
else:
# Both halves pass — interaction effect between halves
return prompt_linesDer Entfernungstest
Eine einfachere Form der binären Suche: Entfernen Sie systematisch einzelne Abschnitte und prüfen Sie, ob das Entfernen das Problem behebt. Das funktioniert, wenn der Prompt klar abgegrenzte Abschnitte enthält (Systemanweisungen, Kontext, Beispiele, Formatspezifikation).
sections = {
'role_instruction': 'You are a precise JSON API. Respond only with valid JSON.',
'context': 'The user is asking about our product catalog.',
'format_spec': 'Return a JSON object with keys: name, price, available.',
'examples': 'Example: {"name": "Widget", "price": 9.99, "available": true}',
'safety': 'Do not reveal internal pricing strategy.'
}
def test_without(section_to_remove, user_input):
reduced = {k: v for k, v in sections.items() if k != section_to_remove}
prompt = '\n'.join(reduced.values())
output = run_prompt(prompt, user_input)
print(f'Without {section_to_remove}: {evaluate(output)}')
for section in sections:
test_without(section, 'What is the price of a Widget?')A/B-Tests von Prompt-Abschnitten
A/B-Tests für Prompts bedeuten, zwei Versionen eines einzelnen Abschnitts zu erstellen und ihre Ausgaben bei denselben Eingaben zu vergleichen. Im Gegensatz zu Entfernungstests bewerten A/B-Tests alternative Formulierungen statt des Vorhandenseins oder Fehlens eines Abschnitts.
# A/B test: vague vs precise format instruction
variant_A = 'Return a JSON object.'
variant_B = 'Return a valid JSON object. No markdown, no code fences, no prose. Only the raw JSON.'
test_inputs = [
'What is the price of Widget A?',
'List all available products.',
'Is Widget B in stock?'
]
def run_ab_test(base_prompt, variant, inputs, n_runs=5):
pass_count = 0
for inp in inputs:
for _ in range(n_runs):
prompt = base_prompt.replace('{{FORMAT}}', variant)
output = run_prompt(prompt, inp)
if is_valid_json(output):
pass_count += 1
return pass_count / (len(inputs) * n_runs)
print('A pass rate:', run_ab_test(template, variant_A, test_inputs))
print('B pass rate:', run_ab_test(template, variant_B, test_inputs))Differential Testing
Differential Testing vergleicht zwei nahezu identische Prompts, um herauszufinden, welche Änderung die Regression verursacht hat. Das ist nützlich, wenn etwas „letzte Woche noch funktioniert hat“, jetzt aber nicht mehr.
Vergleichen Sie den alten Prompt per Diff mit dem neuen, ermitteln Sie die geänderten Abschnitte und testen Sie anschließend jeden geänderten Abschnitt isoliert.
import difflib
def show_prompt_diff(prompt_v1, prompt_v2):
diff = difflib.unified_diff(
prompt_v1.splitlines(),
prompt_v2.splitlines(),
fromfile='v1',
tofile='v2',
lineterm=''
)
for line in diff:
print(line)
show_prompt_diff(working_prompt, failing_prompt)
# Output shows exactly which lines changed between versions
# Test reverting each changed section individuallyEingaben und Prompts testen
Es gibt zwei Testdimensionen: den Prompt und die Eingabe. Ein Prompt kann bei einfachen Eingaben funktionieren, bei komplexen jedoch fehlschlagen. Ein hilfreicher Debugging-Schritt: Wenn der Prompt bei einer komplexen Eingabe fehlschlägt, versuchen Sie es mit einer einfacheren Variante der Eingabe, um zu bestätigen, dass der Prompt selbst korrekt ist.
# Input complexity ladder
inputs_by_complexity = [
'What is 2 + 2?', # trivially simple
'Summarize this sentence.', # simple task
'Analyze this 500-word essay.', # moderate
'Compare 10 documents and extract contradictions.' # complex
]
# Find the complexity level where the prompt starts failing
for inp in inputs_by_complexity:
output = run_prompt(failing_prompt, inp)
result = 'PASS' if evaluate(output) else 'FAIL'
print(f'{result}: {inp[:60]}')
# First FAIL indicates where the prompt breaks downDas Muster für einen minimal reproduzierbaren Prompt
Der MRP für eine Debugging-Sitzung eines Prompts folgt dieser Struktur:
- Ein-Satz-Rollenbeschreibung (falls erforderlich)
- Aufgabenanweisung in einem Satz
- Formatanweisung
- Die minimale Eingabe, die den Fehler reproduziert
Wenn dieser 4-zeilige Prompt weiterhin fehlschlägt, liegt das Problem im Modell oder im Format. Fügen Sie schrittweise jeweils einen Abschnitt wieder hinzu, bis der Fehler erneut auftritt – dieser Abschnitt ist die Ursache.
# Start minimal
MINIMAL_PROMPT = (
'You are a data extractor.\n'
'Extract the product name and price from the text.\n'
'Respond with JSON: {"name": "...", "price": ...}\n'
)
minimal_input = 'Widget Pro costs $49.'
# Test: if this works, the problem is in something added on top
output = run_prompt(MINIMAL_PROMPT, minimal_input)
print(output)
# Expected: {"name": "Widget Pro", "price": 49.0}Die Debugging-Sitzung dokumentieren
Dokumentieren Sie jeden Test während einer Debugging-Sitzung. Ohne Notizen wiederholen Sie möglicherweise dieselben Tests oder vergessen, welche Hypothesen ausgeschlossen wurden.
debug_log = [
{
'test': 'base_prompt_v5',
'hypothesis': 'failing due to format conflict',
'result': 'FAIL',
'notes': 'JSON prefix still present'
},
{
'test': 'base_prompt_v5_no_markdown_hint',
'hypothesis': 'removing markdown hint from user message fixes conflict',
'result': 'PASS',
'notes': 'Output is clean JSON. Root cause confirmed: format conflict.'
}
]
import json
with open('debug_session.json', 'w') as f:
json.dump(debug_log, f, indent=2)Wann Sie das Debuggen beenden und die Strategie ändern sollten
Manchmal bringt das Debuggen eines Prompts nur noch einen abnehmenden Nutzen. Anzeichen dafür, dass es Zeit ist, die Strategie zu ändern:
- Sie haben mehr als 2 Stunden damit verbracht, denselben Fehler weiter einzugrenzen
- Der minimale Prompt schlägt trotz einer klaren, einfachen Anweisung weiterhin fehl
- A/B-Tests zeigen keinen statistisch signifikanten Unterschied
Alternativen: Wechseln Sie zu Function Calling (strukturierten Ausgaben), fügen Sie einen Validierungsschritt zur Nachbearbeitung hinzu, zerlegen Sie die Aufgabe in zwei einfachere Prompts oder aktualisieren Sie das Modell.
Beheben und Absichern
Nachdem Sie die Grundursache gefunden und behoben haben, sichern Sie den Prompt ab, um ähnliche Fehler zu verhindern:
- Fügen Sie den fehlerauslösenden Testfall Ihrer Testsuite als Regressionstest hinzu
- Fügen Sie eine defensive Anweisung hinzu: „Auch wenn die Eingabe ungewöhnlich ist, geben Sie immer JSON zurück.“
- Fügen Sie eine Ausgabenvalidierung hinzu, damit der Fehler programmgesteuert und nicht erst in der Produktion erkannt wird
Ein behobener, aber nicht abgesicherter Prompt wird beim nächsten Grenzfall erneut fehlschlagen.
def safe_run_prompt(prompt, user_input):
output = run_prompt(prompt, user_input)
try:
parsed = json.loads(output)
return parsed
except json.JSONDecodeError:
# Fallback: ask the model to fix its own output
fix_prompt = f'The following is not valid JSON. Rewrite it as valid JSON only:\n{output}'
fixed = run_prompt('', fix_prompt)
return json.loads(fixed)Wissensüberprüfung
Was sagt es beim Debuggen eines Prompts mit binärer Suche aus, wenn Sie die erste Hälfte des Prompts entfernen und der Fehler daraufhin verschwindet?
Zusammenfassung: Systematisches Debuggen
Ein systematisches Vorgehen beim Debuggen von Prompts:
- Reproduzieren: Setzen Sie temperature=0, führen Sie den Prompt fünfmal aus und bestätigen Sie, dass der Fehler konsistent auftritt
- Minimieren: Führen Sie eine binäre Suche in den Prompt-Abschnitten durch, um den minimalen fehlerauslösenden Prompt zu finden
- A/B-Test: Vergleichen Sie alternative Formulierungen des fehlerhaften Abschnitts
- Differential Testing: Vergleichen Sie funktionierende und fehlerhafte Prompt-Versionen per Diff, um die Regression zu finden
- Dokumentieren: Protokollieren Sie jeden Test, jede Hypothese und jedes Ergebnis
- Absichern: Fügen Sie den behobenen Fall Ihrer Testsuite hinzu
Nächste Lektion: Protokollierungs- und Dokumentationsstrategien für die langfristige Pflege von Prompts.
Häufig gestellte Fragen
Ist die Lektion „Systematischer Debugging-Ansatz“ kostenlos?
Ja — der vollständige Text von „Systematischer Debugging-Ansatz“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Prompt Engineering-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Systematischer Debugging-Ansatz“?
Binärsuche über Prompt-Abschnitte: Entfernen Sie die Hälfte, testen Sie und grenzen Sie das Problem ein. Du übst AI Prompt Engineering mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um AI Prompt Engineering zu starten?
Keine Vorkenntnisse erforderlich. AI Prompt Engineering auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Systematischer Debugging-Ansatz“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser AI Prompt Engineering-Lektion Code schreiben und ausführen?
Ja. Jede AI Prompt Engineering-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Unerwartete Ausgaben diagnostizieren
- Ursachenanalyse für Prompts
- Systematischer Debugging-Ansatz
- Strategien für Logging und Dokumentation