Claude Platform Docs
Best practiceCasi d'uso

Instradamento dei ticket

Questa guida illustra come sfruttare le avanzate capacità di comprensione del linguaggio naturale di Claude per classificare i ticket di assistenza clienti su larga scala in base all'intento del cliente, all'urgenza, alla priorità, al profilo del cliente e altro ancora.

Prerequisiti

  • Una chiave API di Claude e il Python SDK installato
  • Accesso al tuo sistema di ticketing di assistenza esistente e familiarità con esso
  • Un set campione di ticket di assistenza storici per i test

Stabilisci se usare Claude per l'instradamento dei ticket

Ecco alcuni indicatori chiave che suggeriscono di usare un "large language model" (grande modello linguistico), o LLM, come Claude invece degli approcci ML tradizionali per il tuo compito di classificazione:


Costruisci e distribuisci il tuo flusso di lavoro di assistenza basato su LLM

Comprendi il tuo attuale approccio all'assistenza

Prima di automatizzare, è fondamentale comprendere il tuo sistema di ticketing esistente. Inizia indagando su come il tuo team di assistenza gestisce attualmente l'instradamento dei ticket.

Considera domande come:

  • Quali criteri vengono utilizzati per determinare quale SLA/offerta di servizio viene applicata?
  • L'instradamento dei ticket viene utilizzato per determinare a quale livello di assistenza o specialista di prodotto viene assegnato un ticket?
  • Esistono già regole o flussi di lavoro automatizzati? In quali casi falliscono?
  • Come vengono gestiti i casi limite o i ticket ambigui?
  • Come il team assegna le priorità ai ticket?

Più sai su come gli esseri umani gestiscono determinati casi, meglio potrai lavorare con Claude per svolgere il compito.

Definisci le categorie di intento dell'utente

Un elenco ben definito di categorie di intento dell'utente è fondamentale per una classificazione accurata dei ticket di assistenza con Claude. La capacità di Claude di instradare efficacemente i ticket all'interno del tuo sistema è direttamente proporzionale a quanto sono ben definite le categorie del tuo sistema.

Ecco alcuni esempi di categorie e sottocategorie di intento dell'utente.

Oltre all'intento, l'instradamento e la prioritizzazione dei ticket possono essere influenzati anche da altri fattori come l'urgenza, il tipo di cliente, gli SLA o la lingua. Assicurati di considerare altri criteri di instradamento quando costruisci il tuo sistema di instradamento automatizzato.

Stabilisci i criteri di successo

Collabora con il tuo team di assistenza per definire criteri di successo chiari con benchmark, soglie e obiettivi misurabili.

Ecco alcuni criteri e benchmark standard quando si usano gli LLM per l'instradamento dei ticket di assistenza:

Ecco alcuni criteri di successo comuni che possono essere utili indipendentemente dall'uso di un LLM:

Scegli il modello Claude giusto

La scelta del modello dipende dai compromessi tra costo, accuratezza e tempo di risposta.

Molti clienti hanno trovato claude-haiku-4-5-20251001 un modello ideale per l'instradamento dei ticket, poiché è il modello più veloce ed economico della famiglia Claude 4 pur offrendo risultati eccellenti. Se il tuo problema di classificazione richiede una profonda competenza specialistica o un grande volume di categorie di intento, o un ragionamento complesso, puoi optare per il modello Sonnet più grande.

Costruisci un prompt solido

L'instradamento dei ticket è un tipo di compito di classificazione. Claude analizza il contenuto di un ticket di assistenza e lo classifica in categorie predefinite in base al tipo di problema, all'urgenza, alle competenze richieste o ad altri fattori rilevanti.

Scrivi un prompt di classificazione dei ticket. Il prompt iniziale dovrebbe contenere il contenuto della richiesta dell'utente e restituire sia il ragionamento sia l'intento.

Ecco un esempio di prompt di classificazione per l'instradamento dei ticket:

def classify_support_request(ticket_contents):
    # Definisci il prompt per l'attività di classificazione
    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.
        """

Ecco i componenti chiave di questo prompt:

  • Il template del prompt è una f-string Python, che consente di inserire ticket_contents nei tag <request>.
  • Il prompt assegna a Claude un ruolo chiaramente definito come sistema di classificazione che analizza attentamente il contenuto del ticket per determinare l'intento principale e le esigenze del cliente.
  • Il prompt istruisce Claude sulla corretta formattazione dell'output, in questo caso fornendo il suo ragionamento e la sua analisi all'interno dei tag <reasoning>, seguiti dall'etichetta di classificazione appropriata all'interno dei tag <intent>.
  • Il prompt specifica le categorie di intento valide: "Support, Feedback, Complaint", "Order Tracking" e "Refund/Exchange".
  • Il prompt include alcuni esempi (ovvero few-shot prompting) per illustrare come dovrebbe essere formattato l'output, il che migliora accuratezza e coerenza.

Far suddividere a Claude la sua risposta in sezioni di tag XML separate ti consente di usare espressioni regolari per estrarre il ragionamento e l'intento dall'output in modo indipendente. Questo ti permette di creare passaggi successivi mirati nel flusso di lavoro di instradamento dei ticket, come usare solo l'intento per decidere a quale persona instradare il ticket.

Distribuisci il tuo prompt

È difficile sapere quanto bene funzioni il tuo prompt senza distribuirlo in un ambiente di produzione di test ed eseguire valutazioni.

Costruisci la struttura di distribuzione. Inizia definendo la firma del metodo che incapsula la chiamata a Claude. Estendi il metodo che hai iniziato a scrivere in precedenza, che prende ticket_contents come input, in modo che ora restituisca una tupla di reasoning e intent come output. Se hai un'automazione esistente che usa ML tradizionale, ti conviene seguire invece quella firma del metodo.

Python
import re

# Crea un'istanza del client dell'API Claude
client = anthropic.Anthropic()

# Imposta il modello predefinito
DEFAULT_MODEL = "claude-haiku-4-5-20251001"


def classify_support_request(ticket_contents):
    # Definisci il prompt per l'attività di classificazione
    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.
        """
    # Invia il prompt all'API per classificare la richiesta di supporto.
    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

    # Usa la libreria di espressioni regolari di Python per estrarre `reasoning`.
    reasoning_match = re.search(
        r"<reasoning>(.*?)</reasoning>", reasoning_and_intent, re.DOTALL
    )
    reasoning = reasoning_match.group(1).strip() if reasoning_match else ""

    # Allo stesso modo, estrai anche `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

Questo codice:

  • Crea un'istanza del client usando la tua chiave API.
  • Definisce una funzione classify_support_request che prende una stringa ticket_contents.
  • Invia ticket_contents a Claude per la classificazione usando il classification_prompt.
  • Restituisce il reasoning e l'intent del modello estratti dalla risposta.

Poiché l'intero testo del ragionamento e dell'intento deve essere generato prima del parsing, l'esempio imposta stream=False (il valore predefinito).


Valuta il tuo prompt

Il prompting richiede spesso test e ottimizzazione per essere pronto per la produzione. Per determinare la maturità della tua soluzione, valuta le prestazioni in base ai criteri di successo e alle soglie che hai stabilito in precedenza.

Per eseguire la tua valutazione, hai bisogno di casi di test su cui eseguirla. Il resto di questa guida presuppone che tu abbia già sviluppato i tuoi casi di test.

Costruisci una funzione di valutazione

La valutazione di esempio per questa guida misura le prestazioni di Claude lungo tre metriche chiave:

  • Accuratezza
  • Costo per classificazione

Potresti dover valutare Claude su altri assi a seconda dei fattori che sono importanti per te.

Per valutare ciò, modifica innanzitutto lo script per aggiungere una funzione che confronta l'intento previsto con l'intento effettivo e calcola la percentuale di previsioni corrette. Quindi aggiungi le funzionalità di calcolo dei costi e di misurazione del tempo.

Python
import re

# Crea un'istanza del client della Claude API
client = anthropic.Anthropic()

# Imposta il modello predefinito
DEFAULT_MODEL = "claude-haiku-4-5-20251001"


def classify_support_request(request, actual_intent):
    # Definisci il prompt per l'attività di classificazione
    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

    # Usa la libreria di espressioni regolari di Python per estrarre `reasoning`.
    reasoning_match = re.search(
        r"<reasoning>(.*?)</reasoning>", reasoning_and_intent, re.DOTALL
    )
    reasoning = reasoning_match.group(1).strip() if reasoning_match else ""

    # Allo stesso modo, estrai anche `intent`.
    intent_match = re.search(r"<intent>(.*?)</intent>", reasoning_and_intent, re.DOTALL)
    intent = intent_match.group(1).strip() if intent_match else ""

    # Verifica se la previsione del modello è corretta.
    correct = actual_intent.strip() == intent.strip()

    # Restituisci reasoning, intent, correct e usage.
    return reasoning, intent, correct, usage

Ecco un'analisi delle modifiche:

  • Il metodo classify_support_request ora prende l'actual_intent dai casi di test e lo confronta con la classificazione dell'intento di Claude per valutare se corrispondono.
  • Il metodo estrae le statistiche di utilizzo della chiamata API per calcolare il costo in base ai token di input e output utilizzati.

Esegui la tua valutazione

Una valutazione adeguata richiede soglie e benchmark chiari per determinare cosa sia un buon risultato. Lo script precedente restituisce i valori di runtime per accuratezza, tempo di risposta e costo per classificazione, ma hai comunque bisogno di soglie chiaramente stabilite. Ad esempio:

  • Accuratezza: 95% (su 100 test)
  • Costo per classificazione: riduzione media del 50% (su 100 test) rispetto al metodo di instradamento attuale

Avere queste soglie ti consente di stabilire rapidamente e facilmente su larga scala, e con empirismo imparziale, quale metodo è il migliore per te e quali modifiche potrebbero essere necessarie per adattarsi meglio ai tuoi requisiti.


Migliora le prestazioni

In scenari complessi, può essere utile considerare strategie aggiuntive per migliorare le prestazioni oltre alle tecniche di prompt engineering standard e alle strategie di implementazione dei guardrail. Ecco alcuni scenari comuni:

Usa una gerarchia tassonomica per i casi con più di 20 categorie di intento

Man mano che il numero di classi cresce, aumenta anche il numero di esempi richiesti, rendendo potenzialmente il prompt ingombrante. In alternativa, puoi considerare l'implementazione di un sistema di classificazione gerarchico usando una combinazione di classificatori.

  1. Organizza i tuoi intenti in una struttura ad albero tassonomica.
  2. Crea una serie di classificatori a ogni livello dell'albero, abilitando un approccio di instradamento a cascata.

Ad esempio, potresti avere un classificatore di primo livello che categorizza ampiamente i ticket in "Technical Issues" (problemi tecnici), "Billing Questions" (domande sulla fatturazione) e "General Inquiries" (richieste generali). Ciascuna di queste categorie può poi avere il proprio sotto-classificatore per affinare ulteriormente la classificazione.

Gerarchia di classificatori che instrada i ticket verso Technical Issues (problemi tecnici), Billing Questions (domande sulla fatturazione) o General Inquiries (richieste generali), ciascuno con un sotto-classificatore

  • Pro - maggiore sfumatura e accuratezza: Puoi creare prompt diversi per ogni percorso padre, consentendo una classificazione più mirata e specifica per il contesto. Questo può portare a una maggiore accuratezza e a una gestione più sfumata delle richieste dei clienti.

  • Contro - maggiore latenza: Tieni presente che più classificatori possono portare a una maggiore "latency" (latenza), e Anthropic consiglia di implementare questo approccio con il modello più veloce, Haiku.

Usa database vettoriali e il recupero tramite ricerca per similarità per gestire ticket altamente variabili

Sebbene fornire esempi sia il modo più efficace per migliorare le prestazioni, se le richieste di assistenza sono altamente variabili, può essere difficile includere abbastanza esempi in un singolo prompt.

In questo scenario, potresti impiegare un database vettoriale per eseguire ricerche per similarità da un dataset di esempi e recuperare gli esempi più rilevanti per una determinata query.

Questo approccio, descritto in dettaglio nella ricetta di classificazione, ha dimostrato di migliorare le prestazioni dal 71% al 93% di accuratezza.

Tieni conto specificamente dei casi limite previsti

Ecco alcuni scenari in cui Claude potrebbe classificare erroneamente i ticket (potrebbero essercene altri specifici della tua situazione). In questi scenari, considera di fornire istruzioni esplicite o esempi nel prompt su come Claude dovrebbe gestire il caso limite:


Integra Claude nel tuo flusso di lavoro di assistenza più ampio

Una corretta integrazione richiede che tu prenda alcune decisioni su come il tuo script di instradamento dei ticket basato su Claude si inserisce nell'architettura del tuo sistema di instradamento dei ticket più ampio. Ci sono due modi in cui potresti farlo:

  • Push-based: Il sistema di ticket di assistenza che stai usando (ad esempio, Zendesk) attiva il tuo codice inviando un evento webhook al tuo servizio di instradamento, che poi classifica l'intento e lo instrada.
    • Questo approccio è più scalabile sul web, ma richiede di esporre un endpoint pubblico.
  • Pull-based: Il tuo codice recupera i ticket più recenti in base a una pianificazione prestabilita e li instrada al momento del recupero.
    • Questo approccio è più facile da implementare ma potrebbe effettuare chiamate non necessarie al sistema di ticket di assistenza quando la frequenza di recupero è troppo alta, oppure potrebbe essere eccessivamente lento quando la frequenza di recupero è troppo bassa.

Per entrambi questi approcci, devi incapsulare il tuo script in un servizio. La scelta dell'approccio dipende da quali API fornisce il tuo sistema di ticketing di assistenza.


Visita il cookbook di classificazione per altro codice di esempio e indicazioni dettagliate sulle valutazioni.

Inizia a costruire e valutare il tuo flusso di lavoro sulla Claude Console.

Was this page helpful?