Claude Platform Docs
Best PracticesAnwendungsfälle

Ticket-Routing

Dieser Leitfaden zeigt, wie du Claudes fortschrittliche Fähigkeiten zum Verstehen natürlicher Sprache nutzen kannst, um Kundensupport-Tickets in großem Umfang nach Kundenabsicht, Dringlichkeit, Priorisierung, Kundenprofil und mehr zu klassifizieren.

Voraussetzungen

  • Ein Claude API-Key und das installierte Python SDK
  • Zugriff auf dein bestehendes Support-Ticketsystem und Vertrautheit damit
  • Ein Beispielsatz historischer Support-Tickets zum Testen

Festlegen, ob Claude für das Ticket-Routing verwendet werden soll

Hier sind einige wichtige Indikatoren dafür, dass du ein „large language model“ (großes Sprachmodell), oder LLM, wie Claude anstelle traditioneller ML-Ansätze für deine Klassifizierungsaufgabe verwenden solltest:


Deinen LLM-Support-Workflow erstellen und bereitstellen

Deinen aktuellen Support-Ansatz verstehen

Bevor du automatisierst, ist es entscheidend, dein bestehendes Ticketsystem zu verstehen. Beginne damit, zu untersuchen, wie dein Support-Team derzeit das Ticket-Routing handhabt.

Berücksichtige Fragen wie:

  • Welche Kriterien werden verwendet, um zu bestimmen, welches SLA/Serviceangebot angewendet wird?
  • Wird das Ticket-Routing verwendet, um zu bestimmen, an welche Support-Stufe oder welchen Produktspezialisten ein Ticket geht?
  • Gibt es bereits automatisierte Regeln oder Workflows? In welchen Fällen versagen sie?
  • Wie werden Grenzfälle oder mehrdeutige Tickets behandelt?
  • Wie priorisiert das Team Tickets?

Je mehr du darüber weißt, wie Menschen bestimmte Fälle handhaben, desto besser kannst du mit Claude zusammenarbeiten, um die Aufgabe zu erledigen.

Kategorien für Nutzerabsichten definieren

Eine gut definierte Liste von Kategorien für Nutzerabsichten ist entscheidend für eine genaue Klassifizierung von Support-Tickets mit Claude. Claudes Fähigkeit, Tickets innerhalb deines Systems effektiv weiterzuleiten, ist direkt proportional dazu, wie gut die Kategorien deines Systems definiert sind.

Hier sind einige Beispiele für Kategorien und Unterkategorien von Nutzerabsichten.

Neben der Absicht können Ticket-Routing und Priorisierung auch von anderen Faktoren wie Dringlichkeit, Kundentyp, SLAs oder Sprache beeinflusst werden. Achte darauf, beim Aufbau deines automatisierten Routing-Systems auch andere Routing-Kriterien zu berücksichtigen.

Erfolgskriterien festlegen

Arbeite mit deinem Support-Team zusammen, um klare Erfolgskriterien zu definieren – mit messbaren Benchmarks, Schwellenwerten und Zielen.

Hier sind einige Standardkriterien und Benchmarks für den Einsatz von LLMs beim Routing von Support-Tickets:

Hier sind einige gängige Erfolgskriterien, die unabhängig davon nützlich sein können, ob ein LLM verwendet wird:

Das richtige Claude-Modell wählen

Die Wahl des Modells hängt von den Abwägungen zwischen Kosten, Genauigkeit und Antwortzeit ab.

Viele Kunden haben festgestellt, dass claude-haiku-4-5-20251001 ein ideales Modell für das Ticket-Routing ist, da es das schnellste und kosteneffizienteste Modell der Claude-4-Familie ist und dennoch hervorragende Ergebnisse liefert. Wenn dein Klassifizierungsproblem tiefes Fachwissen, eine große Anzahl von Absichtskategorien oder komplexes Schlussfolgern erfordert, kannst du dich für das größere Sonnet-Modell entscheiden.

Einen starken Prompt erstellen

Ticket-Routing ist eine Art von Klassifizierungsaufgabe. Claude analysiert den Inhalt eines Support-Tickets und ordnet es anhand des Problemtyps, der Dringlichkeit, der erforderlichen Expertise oder anderer relevanter Faktoren vordefinierten Kategorien zu.

Schreibe einen Prompt zur Ticketklassifizierung. Der anfängliche Prompt sollte den Inhalt der Nutzeranfrage enthalten und sowohl die Begründung als auch die Absicht zurückgeben.

Hier ist ein Beispiel für einen Klassifizierungs-Prompt zum Ticket-Routing:

def classify_support_request(ticket_contents):
    # Definiere den Prompt für die Klassifizierungsaufgabe
    classification_prompt = f"""You will be acting as a customer support ticket classification system. Your task is to analyze customer support requests and output the appropriate classification intent for each request, along with your reasoning.

        Here is the customer support request you need to classify:

        <request>{ticket_contents}</request>

        Please carefully analyze the above request to determine the customer's core intent and needs. Consider what the customer is asking for has concerns about.

        First, write out your reasoning and analysis of how to classify this request inside <reasoning> tags.

        Then, output the appropriate classification label for the request inside a <intent> tag. The valid intents are:
        <intents>
        <intent>Support, Feedback, Complaint</intent>
        <intent>Order Tracking</intent>
        <intent>Refund/Exchange</intent>
        </intents>

        A request may have ONLY ONE applicable intent. Only include the intent that is most applicable to the request.

        As an example, consider the following request:
        <request>Hello! I had high-speed fiber internet installed on Saturday and my installer, Kevin, was absolutely fantastic! Where can I send my positive review? Thanks for your help!</request>

        Here is an example of how your output should be formatted (for the above example request):
        <reasoning>The user seeks information in order to leave positive feedback.</reasoning>
        <intent>Support, Feedback, Complaint</intent>

        Here are a few more examples:
        <examples>
        <example 2>
        Example 2 Input:
        <request>I wanted to write and personally thank you for the compassion you showed towards my family during my father's funeral this past weekend. Your staff was so considerate and helpful throughout this whole process; it really took a load off our shoulders. The visitation brochures were beautiful. We'll never forget the kindness you showed us and we are so appreciative of how smoothly the proceedings went. Thank you, again, Amarantha Hill on behalf of the Hill Family.</request>

        Example 2 Output:
        <reasoning>User leaves a positive review of their experience.</reasoning>
        <intent>Support, Feedback, Complaint</intent>
        </example 2>
        <example 3>

        ...

        </example 8>
        <example 9>
        Example 9 Input:
        <request>Your website keeps sending ad-popups that block the entire screen. It took me twenty minutes just to finally find the phone number to call and complain. How can I possibly access my account information with all of these popups? Can you access my account for me, since your website is broken? I need to know what the address is on file.</request>

        Example 9 Output:
        <reasoning>The user requests help accessing their web account information.</reasoning>
        <intent>Support, Feedback, Complaint</intent>
        </example 9>

        Remember to always include your classification reasoning before your actual intent output. The reasoning should be enclosed in <reasoning> tags and the intent in <intent> tags. Return only the reasoning and the intent.
        """

Hier sind die wichtigsten Bestandteile dieses Prompts:

  • Die Prompt-Vorlage ist ein Python-f-String, sodass ticket_contents in die <request>-Tags eingefügt werden kann.
  • Der Prompt gibt Claude eine klar definierte Rolle als Klassifizierungssystem, das den Ticketinhalt sorgfältig analysiert, um die Kernabsicht und die Bedürfnisse des Kunden zu ermitteln.
  • Der Prompt weist Claude zur korrekten Ausgabeformatierung an, in diesem Fall, seine Begründung und Analyse innerhalb von <reasoning>-Tags anzugeben, gefolgt vom passenden Klassifizierungslabel innerhalb von <intent>-Tags.
  • Der Prompt legt die gültigen Absichtskategorien fest: „Support, Feedback, Complaint“, „Order Tracking“ und „Refund/Exchange“.
  • Der Prompt enthält einige Beispiele (auch bekannt als Few-Shot-Prompting), um zu veranschaulichen, wie die Ausgabe formatiert sein soll, was Genauigkeit und Konsistenz verbessert.

Wenn Claude seine Antwort in separate XML-Tag-Abschnitte aufteilt, kannst du reguläre Ausdrücke verwenden, um Begründung und Absicht unabhängig voneinander aus der Ausgabe zu extrahieren. So kannst du gezielte nächste Schritte im Ticket-Routing-Workflow erstellen, etwa indem du nur die Absicht verwendest, um zu entscheiden, an welche Person das Ticket weitergeleitet wird.

Deinen Prompt bereitstellen

Es ist schwer zu wissen, wie gut dein Prompt funktioniert, ohne ihn in einer Test-Produktionsumgebung bereitzustellen und Evaluierungen durchzuführen.

Erstelle die Bereitstellungsstruktur. Beginne damit, die Methodensignatur für das Wrappen des Aufrufs an Claude zu definieren. Erweitere die Methode, die du zuvor zu schreiben begonnen hast und die ticket_contents als Eingabe entgegennimmt, sodass sie nun ein Tupel aus reasoning und intent als Ausgabe zurückgibt. Wenn du eine bestehende Automatisierung mit traditionellem ML hast, solltest du stattdessen dieser Methodensignatur folgen.

Python
import re

# Erstelle eine Instanz des Claude API-Clients
client = anthropic.Anthropic()

# Lege das Standardmodell fest
DEFAULT_MODEL = "claude-haiku-4-5-20251001"


def classify_support_request(ticket_contents):
    # Definiere den Prompt für die Klassifizierungsaufgabe
    classification_prompt = f"""You will be acting as a customer support ticket classification system.
        ...
        ... The reasoning should be enclosed in <reasoning> tags and the intent in <intent> tags. Return only the reasoning and the intent.
        """
    # Sende den Prompt an die API, um die Support-Anfrage zu klassifizieren.
    message = client.messages.create(
        model=DEFAULT_MODEL,
        max_tokens=500,
        messages=[{"role": "user", "content": classification_prompt}],
        stream=False,
    )
    reasoning_and_intent = message.content[0].text

    # Verwende Pythons Bibliothek für reguläre Ausdrücke, um `reasoning` zu extrahieren.
    reasoning_match = re.search(
        r"<reasoning>(.*?)</reasoning>", reasoning_and_intent, re.DOTALL
    )
    reasoning = reasoning_match.group(1).strip() if reasoning_match else ""

    # Extrahiere auf die gleiche Weise auch den `intent`.
    intent_match = re.search(r"<intent>(.*?)</intent>", reasoning_and_intent, re.DOTALL)
    intent = intent_match.group(1).strip() if intent_match else ""

    return reasoning, intent

Dieser Code:

  • Erstellt eine Client-Instanz mit deinem API-Key.
  • Definiert eine Funktion classify_support_request, die einen ticket_contents-String entgegennimmt.
  • Sendet ticket_contents mithilfe des classification_prompt zur Klassifizierung an Claude.
  • Gibt reasoning und intent des Modells zurück, die aus der Antwort extrahiert wurden.

Da der gesamte Begründungs- und Absichtstext vor dem Parsen generiert werden muss, setzt das Beispiel stream=False (den Standardwert).


Deinen Prompt evaluieren

Prompting erfordert oft Tests und Optimierung, um produktionsreif zu sein. Um die Einsatzbereitschaft deiner Lösung zu bestimmen, evaluiere die Leistung anhand der Erfolgskriterien und Schwellenwerte, die du zuvor festgelegt hast.

Um deine Evaluierung durchzuführen, benötigst du Testfälle, auf denen du sie ausführen kannst. Der Rest dieses Leitfadens geht davon aus, dass du bereits deine Testfälle entwickelt hast.

Eine Evaluierungsfunktion erstellen

Die Beispiel-Evaluierung für diesen Leitfaden misst Claudes Leistung anhand von drei Schlüsselmetriken:

  • Genauigkeit
  • Kosten pro Klassifizierung

Je nachdem, welche Faktoren für dich wichtig sind, musst du Claude möglicherweise auch auf anderen Achsen bewerten.

Um dies zu bewerten, ändere zunächst das Skript, um eine Funktion hinzuzufügen, die die vorhergesagte Absicht mit der tatsächlichen Absicht vergleicht und den Prozentsatz korrekter Vorhersagen berechnet. Füge dann Funktionen zur Kostenberechnung und Zeitmessung hinzu.

Python
import re

# Erstelle eine Instanz des Claude API-Clients
client = anthropic.Anthropic()

# Lege das Standardmodell fest
DEFAULT_MODEL = "claude-haiku-4-5-20251001"


def classify_support_request(request, actual_intent):
    # Definiere den Prompt für die Klassifizierungsaufgabe
    classification_prompt = f"""You will be acting as a customer support ticket classification system.
        ...
        ...The reasoning should be enclosed in <reasoning> tags and the intent in <intent> tags. Return only the reasoning and the intent.
        """

    message = client.messages.create(
        model=DEFAULT_MODEL,
        max_tokens=500,
        messages=[{"role": "user", "content": classification_prompt}],
    )
    usage = message.usage  # Get the usage statistics for the API call for how many input and output tokens were used.
    reasoning_and_intent = message.content[0].text

    # Verwende Pythons Bibliothek für reguläre Ausdrücke, um `reasoning` zu extrahieren.
    reasoning_match = re.search(
        r"<reasoning>(.*?)</reasoning>", reasoning_and_intent, re.DOTALL
    )
    reasoning = reasoning_match.group(1).strip() if reasoning_match else ""

    # Extrahiere auf ähnliche Weise auch den `intent`.
    intent_match = re.search(r"<intent>(.*?)</intent>", reasoning_and_intent, re.DOTALL)
    intent = intent_match.group(1).strip() if intent_match else ""

    # Prüfe, ob die Vorhersage des Modells korrekt ist.
    correct = actual_intent.strip() == intent.strip()

    # Gib reasoning, intent, correct und usage zurück.
    return reasoning, intent, correct, usage

Hier ist eine Aufschlüsselung der Änderungen:

  • Die Methode classify_support_request nimmt nun actual_intent aus den Testfällen entgegen und vergleicht es mit Claudes Absichtsklassifizierung, um zu bewerten, ob sie übereinstimmen.
  • Die Methode extrahiert Nutzungsstatistiken für den API-Aufruf, um die Kosten auf Grundlage der verwendeten Input- und Output-Token zu berechnen.

Deine Evaluierung durchführen

Eine ordnungsgemäße Evaluierung erfordert klare Schwellenwerte und Benchmarks, um zu bestimmen, was ein gutes Ergebnis ist. Das vorangehende Skript gibt die Laufzeitwerte für Genauigkeit, Antwortzeit und Kosten pro Klassifizierung zurück, aber du benötigst dennoch klar festgelegte Schwellenwerte. Zum Beispiel:

  • Genauigkeit: 95 % (bei 100 Tests)
  • Kosten pro Klassifizierung: durchschnittlich 50 % Reduzierung (über 100 Tests) gegenüber der aktuellen Routing-Methode

Mit diesen Schwellenwerten kannst du schnell und einfach in großem Umfang und mit unparteiischer Empirie feststellen, welche Methode für dich am besten ist und welche Änderungen möglicherweise vorgenommen werden müssen, um deinen Anforderungen besser zu entsprechen.


Leistung verbessern

In komplexen Szenarien kann es hilfreich sein, zusätzliche Strategien zur Leistungsverbesserung über die standardmäßigen Prompt-Engineering-Techniken und Strategien zur Implementierung von Guardrails hinaus in Betracht zu ziehen. Hier sind einige gängige Szenarien:

Eine taxonomische Hierarchie für Fälle mit mehr als 20 Absichtskategorien verwenden

Mit wachsender Anzahl von Klassen steigt auch die Anzahl der erforderlichen Beispiele, was den Prompt möglicherweise unhandlich macht. Als Alternative kannst du die Implementierung eines hierarchischen Klassifizierungssystems mit einer Mischung von Klassifikatoren in Betracht ziehen.

  1. Organisiere deine Absichten in einer taxonomischen Baumstruktur.
  2. Erstelle eine Reihe von Klassifikatoren auf jeder Ebene des Baums, um einen kaskadierenden Routing-Ansatz zu ermöglichen.

Du könntest zum Beispiel einen Klassifikator auf oberster Ebene haben, der Tickets grob in „Technical Issues“ (Technische Probleme), „Billing Questions“ (Abrechnungsfragen) und „General Inquiries“ (Allgemeine Anfragen) einteilt. Jede dieser Kategorien kann dann ihren eigenen Unterklassifikator haben, um die Klassifizierung weiter zu verfeinern.

Klassifikator-Hierarchie, die Tickets an „Technical Issues“ (Technische Probleme), „Billing Questions“ (Abrechnungsfragen) oder „General Inquiries“ (Allgemeine Anfragen) weiterleitet, jeweils mit einem Unterklassifikator

  • Vorteile – mehr Nuancen und Genauigkeit: Du kannst für jeden übergeordneten Pfad unterschiedliche Prompts erstellen, was eine gezieltere und kontextspezifischere Klassifizierung ermöglicht. Dies kann zu verbesserter Genauigkeit und einer nuancierteren Behandlung von Kundenanfragen führen.

  • Nachteile – erhöhte Latenz: Beachte, dass mehrere Klassifikatoren zu erhöhter „latency“ (Latenz) führen können, und Anthropic empfiehlt, diesen Ansatz mit dem schnellsten Modell, Haiku, zu implementieren.

Vektordatenbanken und Ähnlichkeitssuche verwenden, um stark variierende Tickets zu verarbeiten

Obwohl das Bereitstellen von Beispielen der effektivste Weg zur Leistungsverbesserung ist, kann es schwierig sein, genügend Beispiele in einen einzigen Prompt aufzunehmen, wenn Support-Anfragen stark variieren.

In diesem Szenario könntest du eine Vektordatenbank einsetzen, um Ähnlichkeitssuchen in einem Datensatz von Beispielen durchzuführen und die relevantesten Beispiele für eine bestimmte Anfrage abzurufen.

Dieser Ansatz, der im Klassifizierungsrezept ausführlich beschrieben wird, hat nachweislich die Leistung von 71 % Genauigkeit auf 93 % Genauigkeit verbessert.

Erwartete Grenzfälle gezielt berücksichtigen

Hier sind einige Szenarien, in denen Claude Tickets möglicherweise falsch klassifiziert (es kann weitere geben, die für deine Situation spezifisch sind). Erwäge in diesen Szenarien, im Prompt explizite Anweisungen oder Beispiele dafür bereitzustellen, wie Claude den Grenzfall behandeln soll:


Claude in deinen übergeordneten Support-Workflow integrieren

Eine ordnungsgemäße Integration erfordert, dass du einige Entscheidungen darüber triffst, wie dein Claude-basiertes Ticket-Routing-Skript in die Architektur deines übergeordneten Ticket-Routing-Systems passt. Es gibt zwei Möglichkeiten, dies zu tun:

  • Push-basiert: Das von dir verwendete Support-Ticketsystem (zum Beispiel Zendesk) löst deinen Code aus, indem es ein Webhook-Ereignis an deinen Routing-Dienst sendet, der dann die Absicht klassifiziert und das Ticket weiterleitet.
    • Dieser Ansatz ist besser web-skalierbar, erfordert aber, dass du einen öffentlichen Endpunkt bereitstellst.
  • Pull-basiert: Dein Code ruft die neuesten Tickets nach einem festgelegten Zeitplan ab und leitet sie zum Zeitpunkt des Abrufs weiter.
    • Dieser Ansatz ist einfacher zu implementieren, führt aber möglicherweise zu unnötigen Aufrufen an das Support-Ticketsystem, wenn die Abruffrequenz zu hoch ist, oder ist möglicherweise zu langsam, wenn die Abruffrequenz zu niedrig ist.

Für beide Ansätze musst du dein Skript in einen Dienst einbetten. Die Wahl des Ansatzes hängt davon ab, welche APIs dein Support-Ticketsystem bereitstellt.


Besuche das Klassifizierungs-Cookbook für weiteren Beispielcode und detaillierte Anleitungen zur Evaluierung.

Beginne mit dem Erstellen und Evaluieren deines Workflows in der Claude Console.

Was this page helpful?