Zum Hauptinhalt springen
Lektion 11 von 12 · Strukturierte JSON-Ausgaben

Entitätsauswertung und Klassifizierung

Lektion 11 von 12 Aktualisiert am 30. Juli 2026 Entwickler
Auf dieser Seite
  1. Kernanwendungsfälle
  2. Entitätsauswertung
  3. Inhaltsklassifizierung
  4. Mehrfachkennzeichnung
  5. Extraktion von tabellarischen Daten
  6. Granulare Sentiment-Analyse
  7. Wichtige Erkenntnisse

Kernanwendungsfälle

Strukturierte Ausgaben sind in zwei Kategorien von Aufgaben besonders effektiv: das Extrahieren von Informationen aus unstrukturiertem Text und die Klassifizierung von Inhalten. Diese beiden Anwendungsfälle stehen im Mittelpunkt der meisten unternehmerischen KI-Anwendungen.

Entitätsauswertung

Die Entitätsauswertung umfasst das Identifizieren und Kategorisieren von Schlüsselelementen in einem Text: Personen, Unternehmen, Standorte, Daten, Beträge und vieles mehr.

from pydantic import BaseModel
from typing import Literal

class Entite(BaseModel):
    texte: str
    type: Literal[
        "person", "company", "location",
        "date", "amount", "product"
    ]
    contexte: str

class ExtractionEntites(BaseModel):
    entites: list[Entite]
    nombre_total: int
    langue_detectee: str

response, parsed = client.chat.parse(
    model="grok-4.20-0309-reasoning",
    messages=[{
        "role": "user",
        "content": """Extrahieren Sie alle Entitäten aus diesem Text:

        Am 15. März 2026 erhöhte Mistral AI 600 Millionen Euro
        bei General Catalyst. Arthur Mensch, der CEO mit Sitz in
        Paris, plant die Veröffentlichung von Mistral Large 3 bis Juni."""
    }],
    response_format=ExtractionEntites
)

for e in parsed.entites:
    print(f"[{e.type}] {e.texte} — {e.contexte}")

Inhaltsklassifizierung

Die Klassifizierung weist vordefinierte Kategorien Inhalten zu. Strukturierte Ausgaben garantieren, dass das Modell nur gültige Kategorien zurückgibt.

class ClassificationEmail(BaseModel):
    categorie: Literal[
        "sales", "support", "billing",
        "partnership", "application", "spam", "other"
    ]
    sous_categorie: str
    priorite: Literal["low", "medium", "high", "urgent"]
    sentiment: Literal["positive", "neutral", "negative"]
    action_requise: bool
    resume: str

response, parsed = client.chat.parse(
    model="grok-4.20-0309-reasoning",
    messages=[{
        "role": "user",
        "content": """Klassifizieren Sie diese E-Mail:

        Betreff: Dringendes Abrechnungsproblem

        Hallo, unsere neueste Rechnung #2847 enthält einen Fehler.
        Der angezeigte Betrag beträgt 3.500 € statt der vereinbarten 2.800 €.
        Bitte korrigieren Sie dies schnellstmöglich."""
    }],
    response_format=ClassificationEmail
)

print(f"Kategorie: {parsed.categorie}")      # "billing"
print(f"Priorität: {parsed.priorite}")        # "high"
print(f"Erforderliche Aktion: {parsed.action_requise}")  # True

Mehrfachkennzeichnung

Wenn Inhalte mehreren Kategorien angehören können:

class ClassificationArticle(BaseModel):
    titre: str
    themes: list[str]
    audience_cible: list[Literal[
        "developers", "managers", "data_scientists",
        "designers", "executives", "general_public"
    ]]
    niveau_technique: Literal["beginner", "intermediate", "advanced"]
    mots_cles_seo: list[str]
    temps_lecture_minutes: int

Extraktion von tabellarischen Daten

Transformieren Sie Text in handlungsorientierte strukturierte Daten:

class LigneCommande(BaseModel):
    reference: str
    designation: str
    quantite: int
    prix_unitaire: float
    montant_total: float

class BonCommande(BaseModel):
    numero: str
    date: str
    fournisseur: str
    lignes: list[LigneCommande]
    montant_ht: float
    tva: float
    montant_ttc: float

response, parsed = client.chat.parse(
    model="grok-4.20-0309-reasoning",
    messages=[{
        "role": "user",
        "content": """Extrahieren Sie Daten aus diesem Bestellschein:

        PO-2026-0847 vom 03/28/2026 — Lieferant: TechParts SAS

        REF-001 | USB-C Kabel 2m | x50 | 3,20 €
        REF-002 | HDMI Adapter | x20 | 12,50 €
        REF-003 | 4-Port USB Hub | x10 | 24,90 €"""
    }],
    response_format=BonCommande
)

Granulare Sentiment-Analyse

Über einfache positive/negative Bewertungen hinaus strukturieren Sie eine vollständige Analyse:

class AspectSentiment(BaseModel):
    aspect: str
    sentiment: Literal["very_positive", "positive", "neutral", "negative", "very_negative"]
    mention: str

class AnalyseAvis(BaseModel):
    note_globale: float
    sentiment_global: str
    aspects: list[AspectSentiment]
    points_forts: list[str]
    points_faibles: list[str]
    recommande: bool

Wichtige Erkenntnisse

  • Die Entitätsauswertung identifiziert Personen, Standorte, Daten und Beträge in freiem Text.
  • Die Klassifizierung erzwingt vordefinierte Kategorien unter Verwendung von Literal und enum.
  • Die Mehrfachkennzeichnung verwendet Listen von Literal.
  • Die Extraktion tabellarischer Daten transformiert unstrukturierten Text in handlungsorientierte Daten.
  • Die Sentiment-Analyse kann granular mit einzelnen Aspekten erfolgen.
  • Alle diese Muster funktionieren mit parse() oder response_format.