Muster von Ausgabe zu Eingabe
Extrahieren Sie strukturierte Daten aus Schritt 1, um sie in Schritt 2 einzusetzen
Muster von Ausgabe zu Eingabe ist eine kostenlose AI Prompt Engineering-Lektion auf CoddyKit. Dies ist Lektion 2 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 zentrale Herausforderung: Extrahieren und Injizieren
In einer Prompt Chain erzeugt Schritt 1 Text. Schritt 2 benötigt einen bestimmten Teil dieses Textes als Eingabe. Die Herausforderung besteht darin, zuverlässig genau das richtige Feld aus der Ausgabe von Schritt 1 zu extrahieren und sauber in den Prompt von Schritt 2 zu injizieren.
Wenn Schritt 1 unstrukturierten Fließtext zurückgibt, ist die Extraktion fehleranfällig. Die Lösung besteht darin, die Prompts von Schritt 1 so zu entwerfen, dass sie eine strukturierte Ausgabe — typischerweise JSON — zurückgeben, die programmgesteuert geparst und injiziert werden kann.
Schritt 1 für die maschinelle Verarbeitung entwerfen
Die Ausgabe eines Prompts, die in eine Kette eingespeist werden soll, sollte immer strukturierte Daten liefern. Geben Sie das genaue JSON-Schema im Prompt an:
import anthropic
import json
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
step1_prompt = '''
<task>
Analyze the customer review below.
</task>
<review>
The onboarding was confusing and took 3 hours. The core feature works great though.
</review>
<output_format>
Return ONLY a JSON object. No other text.
{
"sentiment": "positive|negative|mixed",
"issues": ["string"],
"positives": ["string"],
"priority": "high|medium|low"
}
</output_format>
'''
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=300,
messages=[{'role': 'user', 'content': step1_prompt}]
)
print(response.content[0].text)Ausgabe von Schritt 1 parsen
Nachdem Schritt 1 JSON zurückgegeben hat, parsen Sie es in Python und extrahieren Sie die für Schritt 2 benötigten Felder:
import json
def parse_step1_output(raw_text):
# Models sometimes wrap JSON in extra text -- strip it
text = raw_text.strip()
# Find the first { and last } to extract JSON object
start = text.find("{")
end = text.rfind("}")
if start != -1 and end != -1 and end > start:
text = text[start:end+1]
try:
return json.loads(text)
except json.JSONDecodeError as e:
raise ValueError("Step 1 output is not valid JSON: " + str(e))
# Example usage
raw = '{"sentiment": "mixed", "issues": ["confusing onboarding"], "positives": ["core feature"], "priority": "high"}'
parsed = parse_step1_output(raw)
print(parsed['issues'])
print(parsed['priority'])Extrahierte Felder in Schritt 2 einfügen
Fügen Sie nach dem Parsen bestimmte Felder in die Prompt-Vorlage von Schritt 2 ein. Verwenden Sie Python-f-Strings oder Template-Variablen:
def build_step2_prompt(parsed_step1):
issues = '\n'.join(f'- {issue}' for issue in parsed_step1['issues'])
priority = parsed_step1['priority']
sentiment = parsed_step1['sentiment']
return f'''
<context>
A customer review was analyzed. Overall sentiment: {sentiment}. Priority: {priority}.
</context>
<task>
Write a customer support response addressing these specific issues:
{issues}
Acknowledge the positives before addressing the issues.
</task>
<output_format>
Plain text response, 3 sentences maximum, professional tone.
</output_format>
'''
parsed = {'sentiment': 'mixed', 'issues': ['confusing onboarding'], 'priority': 'high', 'positives': ['core feature']}
print(build_step2_prompt(parsed))Vollständige Zwei-Schritt-Kette
Parse und Einfügen zu einer vollständigen Pipeline mit zwei Schritten kombinieren:
import anthropic, json
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
def call(prompt, max_tokens=500):
r = client.messages.create(
model='claude-opus-4-5', max_tokens=max_tokens,
messages=[{'role': 'user', 'content': prompt}]
)
return r.content[0].text
def review_response_chain(review_text):
# Step 1: Analyze
step1 = call(f'Analyze this review. Return JSON: {{"sentiment": str, "issues": [str], "priority": str}}\n\nReview: {review_text}')
parsed = json.loads(step1.strip())
# Inject into Step 2
issues_str = ', '.join(parsed['issues'])
step2_prompt = f'Write a 2-sentence support reply. Issues to address: {issues_str}. Priority: {parsed["priority"]}.'
# Step 2: Draft response
reply = call(step2_prompt)
return reply
print(review_response_chain('Login is broken. App crashes on startup.'))Verschachtelte JSON-Daten einfügen
Wenn Schritt 1 verschachtelte Objekte zurückgibt, extrahieren Sie nur die von Schritt 2 benötigten Daten, damit der eingefügte Prompt kompakt bleibt:
step1_output = {
'document': {
'title': 'Q3 Report',
'sections': [
{'name': 'Revenue', 'value': '$4.2M', 'change': '+12%'},
{'name': 'Users', 'value': '85,000', 'change': '+5%'},
{'name': 'Churn', 'value': '3.2%', 'change': '-0.8%'}
]
},
'summary': 'Strong revenue quarter with moderate user growth.'
}
# Extract only what Step 2 needs — not the full nested object
def extract_for_step2(data):
sections = data['document']['sections']
metrics = '\n'.join(f"{s['name']}: {s['value']} ({s['change']})" for s in sections)
return {
'metrics': metrics,
'summary': data['summary']
}
step2_input = extract_for_step2(step1_output)
print(step2_input)Übermäßiges Einfügen vermeiden
Ein häufiger Fehler besteht darin, die gesamte Ausgabe von Schritt 1 in Schritt 2 einzufügen. Dadurch wird der Prompt von Schritt 2 unnötig groß, und das Modell kann durch irrelevante Felder verwirrt werden.
- Schlecht:
f'Here is the analysis: {str(all_of_step1_output)}' - Gut: Extrahieren Sie nur die spezifischen Felder, die Schritt 2 benötigt, und fügen Sie sie mit eindeutigen Bezeichnungen ein
Schritt 2 sollte genau die benötigten Informationen erhalten – nicht mehr und nicht weniger.
Bedingte Verzweigung basierend auf der Ausgabe
Die geparste Ausgabe von Schritt 1 kann steuern, welcher Prompt für Schritt 2 ausgeführt wird – so wird aus einer linearen Kette eine Pipeline mit Verzweigungen:
def route_chain(user_message):
# Step 1: Classify intent
classification = json.loads(call(
f'Classify this message as billing, technical, or general. Return JSON: {{"intent": str}}\n\nMessage: {user_message}'
))
intent = classification['intent']
# Route to specialized Step 2 prompt
if intent == 'billing':
prompt = f'You are a billing specialist. Address: {user_message}'
elif intent == 'technical':
prompt = f'You are a senior engineer. Provide technical guidance for: {user_message}'
else:
prompt = f'You are a general support agent. Respond to: {user_message}'
return call(prompt)
print(route_chain('My invoice shows a wrong amount.'))Zustand über mehrere Schritte hinweg akkumulieren
Verwalten Sie für längere Ketten ein State-Dictionary, das die Ausgaben jedes Schritts sammelt:
def run_pipeline(initial_input):
state = {'input': initial_input}
# Step 1
state['entities'] = json.loads(call(
f'Extract entities as JSON: {{"people": [], "companies": []}}\n\n{state["input"]}'
))
# Step 2 uses entities from Step 1
companies_str = ', '.join(state['entities'].get('companies', []))
state['company_types'] = call(
f'Classify these companies as startup/enterprise: {companies_str}'
)
# Step 3 uses output from Steps 1 and 2
state['summary'] = call(
f'Write a 2-sentence summary.\nEntities: {state["entities"]}\nClassifications: {state["company_types"]}'
)
return state
result = run_pipeline('Apple and OpenAI announced a partnership with Elon Musk.')
print(result['summary'])Hilfsfunktionen zum Extrahieren von JSON
Erstellen Sie eine wiederverwendbare Extraktionsfunktion für Ihre Ketteninfrastruktur:
import re, json
def extract_json(text):
"Extract JSON from model output, handling extra text around the object."
# Try direct parse first
try:
return json.loads(text.strip())
except json.JSONDecodeError:
pass
# Try finding JSON object by bracket matching
start = text.find("{")
end = text.rfind("}")
if start != -1 and end != -1 and end > start:
try:
return json.loads(text[start:end+1])
except json.JSONDecodeError:
pass
# Try finding JSON array
start = text.find("[")
end = text.rfind("]")
if start != -1 and end != -1 and end > start:
try:
return json.loads(text[start:end+1])
except json.JSONDecodeError:
pass
raise ValueError("Could not extract JSON from: " + text[:200])
print(extract_json('{"key": "value"}'))Output-to-Input-Muster testen
Output-to-Input-Pipelines benötigen zwei Testebenen:
- Jeden Schritt als Unit testen: Gibt Schritt 1 zuverlässig parsbares JSON zurück? Erzeugt Schritt 2 für eine bestimmte extrahierte Eingabe die richtige Ausgabe?
- Die Kette als Integration testen: Erzeugt die End-to-End-Pipeline für repräsentative Eingaben die korrekten Ergebnisse?
Halten Sie Schritt-Prompts deterministisch, indem Sie für Klassifizierungs- und Extraktionsschritte, bei denen Konsistenz wichtig ist, temperature=0 verwenden.
def test_step1(review_text, expected_sentiment):
raw = call(f'Analyze review. Return JSON: {{"sentiment": str}}\n\n{review_text}')
parsed = extract_json(raw)
assert parsed['sentiment'] == expected_sentiment, f'Expected {expected_sentiment}, got {parsed["sentiment"]}'
print(f'PASS: sentiment={parsed["sentiment"]}')
# Run unit test for Step 1
test_step1('The product is excellent!', 'positive')
test_step1('This is terrible.', 'negative')Schnelltest
Welches Ausgabeformat wird für Schritt 1 einer Prompt-Kette empfohlen, wenn das Ergebnis programmgesteuert extrahiert und in Schritt 2 eingefügt wird?
Output-to-Input – wichtigste Erkenntnisse
Zuverlässige Output-to-Input-Muster machen Prompt-Ketten produktionsbereit:
- Entwerfen Sie Schritt-1-Prompts so, dass sie JSON mit einem expliziten Schema statt Prosa zurückgeben
- Parsen Sie die Ausgabe von Schritt 1 vor dem Einfügen: Entfernen Sie Markdown-Codeblöcke und behandeln Sie JSONDecodeError
- Fügen Sie nur die von Schritt 2 benötigten Felder ein – vermeiden Sie übermäßiges Einfügen
- Verwenden Sie State-Dictionaries, um Daten über längere Ketten hinweg zu sammeln und weiterzugeben
- Die geparste Ausgabe kann eine bedingte Verzweigung steuern und so zu spezialisierten Prompts für Schritt 2 weiterleiten
- Erstellen Sie wiederverwendbare JSON-Extraktionsfunktionen, die mit Inkonsistenzen in der Modellausgabe umgehen
- Testen Sie jeden Schritt unabhängig als Unit und anschließend die vollständige Pipeline als Integration
Häufig gestellte Fragen
Ist die Lektion „Muster von Ausgabe zu Eingabe“ kostenlos?
Ja — der vollständige Text von „Muster von Ausgabe zu Eingabe“ 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 „Muster von Ausgabe zu Eingabe“?
Extrahieren Sie strukturierte Daten aus Schritt 1, um sie in Schritt 2 einzusetzen 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 2 von 4.
Wie lange dauert die Lektion „Muster von Ausgabe zu Eingabe“?
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
- Was ist Prompt Chaining?
- Muster von Ausgabe zu Eingabe
- Sequenzielle Transformationsketten
- Fehlerbehandlung in Prompt-Ketten