LLM als Textklassifikator
Verwenden Sie Prompts für Sentiment-, Intent-, Themen- und Multilabel-Klassifikation
LLM als Textklassifikator 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.
LLMs als Textklassifikatoren
Für die traditionelle Textklassifikation sind annotierte Trainingsdaten, die Feinabstimmung eines Modells und eine Bereitstellungsinfrastruktur erforderlich. LLMs können Text allein mit einem Prompt klassifizieren — Trainingsdaten sind nicht erforderlich.
Auf LLMs basierende Klassifikatoren sind besonders geeignet, wenn:
- Die Kategorien semantisches Verständnis erfordern (nicht nur den Abgleich von Schlüsselwörtern)
- Sie neue Kategorien hinzufügen müssen, ohne das Modell neu zu trainieren
- Ihnen nur wenige annotierte Beispiele zur Verfügung stehen
- Die Kategorien nuanciert sind (die Absicht hinter einer Nachricht und nicht nur ihr Thema)
Sentiment-Klassifikation
Sentiment ist eine der häufigsten Klassifikationsaufgaben. Ein sorgfältig formulierter Prompt liefert bei nuancierten Fällen bessere Ergebnisse als ein einfacher Abgleich von Schlüsselwörtern:
import anthropic, json
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
def classify_sentiment(text):
prompt = f'''
Classify the sentiment of the text below.
Return ONLY JSON: {{"sentiment": "positive|negative|neutral", "confidence": "high|medium|low"}}
Definitions:
- positive: Overall favorable opinion or emotion
- negative: Overall unfavorable opinion or dissatisfaction
- neutral: Factual, balanced, or no clear sentiment
Text: {text}
'''
r = client.messages.create(
model='claude-opus-4-5', max_tokens=50,
messages=[{'role': 'user', 'content': prompt}]
)
return json.loads(r.content[0].text)
print(classify_sentiment('The product works but setup was painful.'))
print(classify_sentiment('Delivery was incredibly fast and packaging was perfect!'))Intent-Klassifikation
Die Intent-Klassifikation ermittelt, was der Nutzer zu tun versucht — unverzichtbar für Chatbots, Supportsysteme und Suchanwendungen:
INTENT_CATEGORIES = [
'purchase_intent: User wants to buy or is ready to purchase',
'complaint: User is dissatisfied and reporting a problem',
'question: User is asking for information or help',
'cancellation: User wants to cancel a service or subscription',
'compliment: User is expressing satisfaction or praise',
'other: Does not fit any category above'
]
def classify_intent(message):
categories_str = '\n'.join(f'- {c}' for c in INTENT_CATEGORIES)
prompt = f'''
Classify the intent of this customer message.
Return JSON: {{"intent": str, "confidence": "high|medium|low"}}
Categories:
{categories_str}
Message: {message}
'''
r = client.messages.create(model='claude-opus-4-5', max_tokens=80, messages=[{'role': 'user', 'content': prompt}])
return json.loads(r.content[0].text)
print(classify_intent('I love the app but I need to cancel my plan.'))
print(classify_intent('How do I export my data to CSV?'))Themenklassifizierung
Die Themenklassifizierung weist Texten eine thematische Kategorie zu. Sie eignet sich zum Weiterleiten von Inhalten, Filtern von Feeds und Kategorisieren von Support-Tickets:
def classify_topic(article_text, topics):
topic_list = ', '.join(topics)
prompt = f'''
Classify the topic of this article. Choose EXACTLY ONE from the list.
Return JSON: {{"topic": str, "secondary_topic": str or null}}
Available topics: {topic_list}
Article (first 300 chars): {article_text[:300]}
'''
r = client.messages.create(model='claude-opus-4-5', max_tokens=80, messages=[{'role': 'user', 'content': prompt}])
return json.loads(r.content[0].text)
topics = ['technology', 'sports', 'politics', 'business', 'science', 'health', 'entertainment']
text = 'The FDA approved a new mRNA vaccine for seasonal influenza, marking a breakthrough in vaccine technology.'
result = classify_topic(text, topics)
print(result)Dringlichkeitsklassifizierung
Die Dringlichkeitsklassifizierung hilft dabei, Support-Tickets, E-Mails und Vorfälle zu priorisieren. Die genaue Definition von Dringlichkeitsstufen ist entscheidend:
URGENCY_PROMPT = '''
Classify the urgency of this support ticket.
Return JSON: {{"urgency": str, "reason": str}}
Urgency levels:
- critical: Service is completely down, data loss occurring, or security breach
- high: Major functionality broken, many users affected, no workaround
- medium: Non-critical feature broken, workaround exists, single user affected
- low: Cosmetic issue, enhancement request, general question
Be conservative: only use critical if the ticket explicitly describes a system-wide outage or data loss.
Ticket: {ticket}
'''
def classify_urgency(ticket_text):
prompt = URGENCY_PROMPT.replace('{ticket}', ticket_text)
r = client.messages.create(model='claude-opus-4-5', max_tokens=100, messages=[{'role': 'user', 'content': prompt}])
return json.loads(r.content[0].text)
print(classify_urgency('The entire production database is down. All customers affected.'))
print(classify_urgency('Dark mode button is slightly off-center.'))Multi-Label-Klassifizierung
Manchmal gehört ein Text gleichzeitig zu mehreren Kategorien. Eine Multi-Label-Klassifizierung gibt alle zutreffenden Kategorien zurück:
def multi_label_classify(text, labels):
label_list = ', '.join(labels)
prompt = f'''
Classify this text. It may belong to multiple categories.
Return JSON: {{"labels": [str], "primary_label": str}}
Available labels: {label_list}
Rules:
- Include all labels that clearly apply
- Do NOT include labels that only marginally apply
- primary_label is the single most relevant label
Text: {text}
'''
r = client.messages.create(model='claude-opus-4-5', max_tokens=100, messages=[{'role': 'user', 'content': prompt}])
return json.loads(r.content[0].text)
labels = ['technical', 'billing', 'account', 'bug_report', 'feature_request', 'security']
text = 'I found a bug that exposes other users billing information on my account page.'
print(multi_label_classify(text, labels))Vorlagen für Klassifizierungs-Prompts
Eine wiederverwendbare Vorlage für einen Klassifizierungs-Prompt, die für jede Kategorienmenge funktioniert:
def build_classifier(category_definitions, additional_rules=''):
cats = '\n'.join(f'- {k}: {v}' for k, v in category_definitions.items())
return f'''
Classify the input text into exactly one category below.
Return JSON: {{"category": str, "confidence": "high|medium|low"}}
Categories:
{cats}
{('\nAdditional rules:\n' + additional_rules) if additional_rules else ''}
Text: {{text}}
'''
language_classifier = build_classifier({
'formal': 'Business or academic writing, professional context',
'informal': 'Casual, conversational, slang or colloquial',
'technical': 'Domain-specific jargon, code, or specialized terminology',
'emotional': 'High emotional content, personal, expressive'
})
print(language_classifier[:200])Umgang mit mehrdeutigen Klassifizierungen
Manche Eingaben passen tatsächlich zu mehreren Kategorien. Entwerfen Sie Klassifizierungs-Prompts so, dass sie Mehrdeutigkeit ausdrücklich behandeln:
AMBIGUITY_PROMPT = '''
Classify this customer message. If the message is ambiguous or could fit multiple categories,
choose the category that would be most useful for routing it to the correct team.
Return JSON:
{{
"category": str,
"is_ambiguous": true | false,
"alternative": str or null,
"reasoning": str
}}
Categories: billing, technical_support, sales, account_management
Message: {message}
'''
message = 'I upgraded my plan but I am still seeing the free tier features.'
r = client.messages.create(
model='claude-opus-4-5', max_tokens=150,
messages=[{'role': 'user', 'content': AMBIGUITY_PROMPT.format(message=message)}]
)
print(json.loads(r.content[0].text))Batch-Klassifizierung für mehr Effizienz
Die Klassifizierung von Elementen nacheinander ist kostspielig. Die Batch-Klassifizierung verarbeitet mehrere Eingaben in einem API-Aufruf:
def batch_classify(items, categories):
items_str = '\n'.join(f'{i+1}. {item}' for i, item in enumerate(items))
cat_str = ', '.join(categories)
prompt = f'''
Classify each item below. Categories: {cat_str}
Return JSON: {{"results": [{{"id": int, "category": str, "confidence": str}}]}}
Items:
{items_str}
'''
r = client.messages.create(model='claude-opus-4-5', max_tokens=300, messages=[{'role': 'user', 'content': prompt}])
return json.loads(r.content[0].text)['results']
texts = [
'Absolutely love this product!',
'It crashed twice today.',
'What is your refund policy?',
'The color options are limited.'
]
results = batch_classify(texts, ['positive_feedback', 'bug_report', 'inquiry', 'feature_request'])
for r in results:
print(f'{texts[r["id"]-1][:30]}... -> {r["category"]} ({r["confidence"]})')Genauigkeit des Klassifizierers bewerten
LLM-Klassifizierer müssen systematisch anhand gelabelter Beispiele evaluiert werden. Erstellen Sie einen kleinen Testsatz und messen Sie die Genauigkeit:
labeled_test_set = [
{'text': 'Great product, no issues!', 'expected': 'positive'},
{'text': 'The app keeps crashing on startup.', 'expected': 'negative'},
{'text': 'The screen resolution is 1080p.', 'expected': 'neutral'},
{'text': 'Worst experience of my life.', 'expected': 'negative'},
{'text': 'Works as advertised, decent value.', 'expected': 'positive'},
]
def evaluate_classifier(test_set, classify_fn):
correct = 0
for example in test_set:
result = classify_fn(example['text'])
if result['sentiment'] == example['expected']:
correct += 1
else:
print(f'WRONG: "{example["text"][:40]}" -> got {result["sentiment"]}, expected {example["expected"]}')
accuracy = correct / len(test_set)
print(f'Accuracy: {correct}/{len(test_set)} = {accuracy:.0%}')
return accuracy
evaluate_classifier(labeled_test_set, classify_sentiment)Few-Shot-Beispiele in Klassifizierungs-Prompts
Das Hinzufügen von Few-Shot-Beispielen zu einem Klassifizierungs-Prompt verbessert die Genauigkeit bei Grenzfällen und differenzierten Kategorien. Platzieren Sie 2–3 Beispiele, die den Unterschied zwischen ähnlichen Kategorien verdeutlichen:
few_shot_classifier = '''
Classify each customer message as: billing, technical, or general.
Examples:
Input: "I was charged twice for this month." -> billing
Input: "The app crashes when I open the dashboard." -> technical
Input: "Do you have a mobile app?" -> general
Input: "My invoice shows the wrong plan." -> billing
Input: "I cannot log in, I get error 403." -> technical
Now classify:
Input: {message}
Return JSON: {"category": str, "confidence": "high|medium|low"}
'''
message = "My subscription was renewed but I cancelled last week."
prompt = few_shot_classifier.replace("{message}", message)
print(prompt)Kurze Überprüfung
Was ist der Hauptvorteil der Verwendung eines LLM für die Textklassifizierung im Vergleich zu einem herkömmlichen trainierten Klassifizierer?
LLM als Klassifizierer – die wichtigsten Erkenntnisse
Die Klassifizierung auf Basis von LLMs ist leistungsfähig, flexibel und schnell bereitzustellen:
- Definieren Sie Kategorien mit Beschreibungen – nicht nur mit Namen –, um auch differenzierte Fälle korrekt zu behandeln
- Geben Sie bei jeder Klassifizierung JSON mit Kategorie und Konfidenz zurück
- Häufige Muster: Sentiment (positiv/negativ/neutral), Intent, Thema, Dringlichkeit
- Die Multi-Label-Klassifizierung gibt alle zutreffenden Kategorien sowie ein primäres Label zurück
- Die Batch-Klassifizierung verarbeitet mehrere Eingaben in einem API-Aufruf und sorgt so für mehr Effizienz
- Behandeln Sie mehrdeutige Eingaben ausdrücklich – fragen Sie nach der primären Kategorie sowie Alternativen und einer Begründung
- Bewerten Sie die Genauigkeit anhand eines gelabelten Testsatzes, bevor Sie das System in der Produktion einsetzen
Häufig gestellte Fragen
Ist die Lektion „LLM als Textklassifikator“ kostenlos?
Ja — der vollständige Text von „LLM als Textklassifikator“ 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 „LLM als Textklassifikator“?
Verwenden Sie Prompts für Sentiment-, Intent-, Themen- und Multilabel-Klassifikation 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 „LLM als Textklassifikator“?
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
- Prompts zur Named-Entity-Extraktion
- Schema-gesteuerte Datenextraktion
- LLM als Textklassifikator
- Konfidenz und Unsicherheit bei der Klassifikation