Prima di costruire con Claude

Decidere se utilizzare Claude per il supporto chat

Ecco alcuni indicatori chiave che suggeriscono di impiegare un LLM come Claude per automatizzare parti del processo di assistenza clienti:

Alcune considerazioni per scegliere Claude rispetto ad altri LLM:

  • Dai priorità alla conversazione naturale e sfumata: La sofisticata comprensione del linguaggio di Claude permette conversazioni più naturali e contestualizzate che risultano più umane rispetto alle chat con altri LLM.
  • Ricevi spesso richieste complesse e aperte: Claude può gestire un’ampia gamma di argomenti e richieste senza generare risposte preconfezionate o richiedere un’estesa programmazione di permutazioni delle espressioni dell’utente.
  • Hai bisogno di supporto multilingue scalabile: Le capacità multilingue di Claude gli permettono di sostenere conversazioni in oltre 200 lingue senza la necessità di chatbot separati o processi di traduzione estesi per ogni lingua supportata.

Definire l’interazione chat ideale

Delinea un’interazione ideale con il cliente per definire come e quando ti aspetti che il cliente interagisca con Claude. Questo schema aiuterà a determinare i requisiti tecnici della tua soluzione.

Ecco un esempio di interazione chat per il supporto assicurativo auto:

  • Cliente: Avvia l’esperienza di supporto chat
    • Claude: Saluta calorosamente il cliente e avvia la conversazione
  • Cliente: Chiede informazioni sull’assicurazione per la sua nuova auto elettrica
    • Claude: Fornisce informazioni pertinenti sulla copertura dei veicoli elettrici
  • Cliente: Pone domande relative alle esigenze uniche per le assicurazioni dei veicoli elettrici
    • Claude: Risponde con risposte accurate e informative e fornisce link alle fonti
  • Cliente: Pone domande fuori tema non correlate all’assicurazione o alle auto
    • Claude: Chiarisce che non discute argomenti non correlati e riporta l’utente al tema dell’assicurazione auto
  • Cliente: Esprime interesse per un preventivo assicurativo
    • Claude: Pone una serie di domande per determinare il preventivo appropriato, adattandosi alle loro risposte
    • Claude: Invia una richiesta per utilizzare lo strumento API di generazione preventivi insieme alle informazioni necessarie raccolte dall’utente
    • Claude: Riceve le informazioni di risposta dall’uso dello strumento API, sintetizza le informazioni in una risposta naturale e presenta il preventivo fornito all’utente
  • Cliente: Pone domande di follow-up
    • Claude: Risponde alle domande di follow-up secondo necessità
    • Claude: Guida il cliente ai passaggi successivi nel processo assicurativo e conclude la conversazione
Nell’esempio reale che scrivi per il tuo caso d’uso, potresti trovare utile scrivere le parole effettive in questa interazione in modo da avere anche un’idea del tono ideale, della lunghezza delle risposte e del livello di dettaglio che vuoi che Claude abbia.

Suddividere l’interazione in compiti unici

La chat di supporto clienti è una raccolta di molteplici compiti diversi, dalla risposta alle domande al recupero di informazioni fino all’azione sulle richieste, racchiusi in una singola interazione con il cliente. Prima di iniziare a costruire, scomponi la tua interazione ideale con il cliente in ogni compito che vuoi che Claude sia in grado di eseguire. Questo assicura che tu possa sollecitare e valutare Claude per ogni compito e ti dà una buona idea della gamma di interazioni di cui devi tenere conto quando scrivi i casi di test.

I clienti a volte trovano utile visualizzare questo come un diagramma di flusso dell’interazione dei possibili punti di inflessione della conversazione a seconda delle richieste dell’utente.

Ecco i compiti chiave associati all’esempio di interazione assicurativa sopra:

  1. Saluto e guida generale

    • Salutare calorosamente il cliente e avviare la conversazione
    • Fornire informazioni generali sull’azienda e l’interazione
  2. Informazioni sul prodotto

    • Fornire informazioni sulla copertura dei veicoli elettrici
      Questo richiederà che Claude abbia le informazioni necessarie nel suo contesto e potrebbe implicare che sia necessaria un’integrazione RAG.
    • Rispondere alle domande relative alle esigenze uniche dell’assicurazione per veicoli elettrici
    • Rispondere alle domande di follow-up sul preventivo o sui dettagli dell’assicurazione
    • Offrire link alle fonti quando appropriato
  3. Gestione della conversazione

    • Rimanere in tema (assicurazione auto)
    • Reindirizzare le domande fuori tema verso argomenti pertinenti
  4. Generazione preventivo

    • Porre domande appropriate per determinare l’idoneità al preventivo
    • Adattare le domande in base alle risposte del cliente
    • Inviare le informazioni raccolte all’API di generazione preventivi
    • Presentare il preventivo fornito al cliente

Stabilire criteri di successo

Lavora con il tuo team di supporto per definire chiari criteri di successo e scrivere valutazioni dettagliate con benchmark e obiettivi misurabili.

Ecco criteri e benchmark che possono essere utilizzati per valutare quanto efficacemente Claude esegue i compiti definiti:

Ecco criteri e benchmark che possono essere utilizzati per valutare l’impatto aziendale dell’impiego di Claude per il supporto:

Come implementare Claude come agente del servizio clienti

Scegliere il modello Claude giusto

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

Per la chat di supporto clienti, claude-3-7-sonnet-20250219 è ben adatto a bilanciare intelligenza, latenza e costo. Tuttavia, per i casi in cui hai un flusso di conversazione con più prompt inclusi RAG, uso di strumenti e/o prompt con contesto lungo, claude-3-haiku-20240307 potrebbe essere più adatto per ottimizzare la latenza.

Costruire un prompt forte

Usare Claude per il supporto clienti richiede che Claude abbia abbastanza direzione e contesto per rispondere appropriatamente, mantenendo sufficiente flessibilità per gestire un’ampia gamma di richieste dei clienti.

Iniziamo scrivendo gli elementi di un prompt forte, partendo da un prompt di sistema:

IDENTITY = """Sei Eva, un'assistente AI amichevole e competente per Acme Insurance 
Company. Il tuo ruolo è accogliere calorosamente i clienti e fornire informazioni sulle 
offerte assicurative di Acme, che includono assicurazione auto e assicurazione auto 
elettrica. Puoi anche aiutare i clienti a ottenere preventivi per le loro esigenze 
assicurative."""
Mentre potresti essere tentato di mettere tutte le tue informazioni all’interno di un prompt di sistema come modo per separare le istruzioni dalla conversazione con l’utente, Claude in realtà funziona meglio con la maggior parte del contenuto del prompt scritto all’interno del primo turno User (con l’unica eccezione dell’assegnazione del ruolo). Leggi di più su Dare a Claude un ruolo con un prompt di sistema.

È meglio suddividere i prompt complessi in sottosezioni e scriverne una parte alla volta. Per ogni compito, potresti avere maggior successo seguendo un processo passo dopo passo per definire le parti del prompt di cui Claude avrebbe bisogno per svolgere bene il compito. Per questo esempio di assicurazione auto, scriveremo pezzo per pezzo tutte le parti per un prompt partendo dal compito “Saluto e guida generale”. Questo rende anche più facile il debug del tuo prompt poiché puoi più rapidamente regolare le singole parti del prompt complessivo.

Metteremo tutte queste parti in un file chiamato config.py.

STATIC_GREETINGS_AND_GENERAL = """
<static_context>
Acme Auto Insurance: Il Tuo Compagno di Fiducia sulla Strada

Chi siamo:
In Acme Insurance, comprendiamo che il tuo veicolo è più di un semplice mezzo di trasporto—è il tuo biglietto per le avventure della vita. 
Dal 1985, creiamo polizze assicurative auto che danno ai conducenti la fiducia di esplorare, pendolare e viaggiare con tranquillità.
Che tu stia navigando per le strade cittadine o intraprendendo viaggi attraverso il paese, Acme è qui per proteggere te e il tuo veicolo. 
Le nostre innovative polizze assicurative auto sono progettate per adattarsi alle tue esigenze uniche, coprendo tutto dai piccoli tamponamenti alle collisioni maggiori.
Con il servizio clienti pluripremiato di Acme e la rapida risoluzione dei sinistri, puoi concentrarti sulla gioia di guidare mentre noi gestiamo il resto. 
Non siamo solo un fornitore di assicurazioni—siamo il tuo co-pilota nei viaggi della vita.
Scegli Acme Auto Insurance e sperimenta la sicurezza che deriva da una copertura superiore e una cura genuina. Perché in Acme, non assicuriamo solo la tua auto—alimentiamo le tue avventure sulla strada aperta.

Nota: Offriamo anche copertura specializzata per veicoli elettrici, assicurando che i conducenti di tutti i tipi di auto possano beneficiare della nostra protezione.

Acme Insurance offre i seguenti prodotti:
- Assicurazione auto
- Assicurazione auto elettrica
- Assicurazione due ruote

Orari di lavoro: Lunedì-Venerdì, 9:00 - 17:00 EST
Numero servizio clienti: 1-800-123-4567
</static_context>
"""

Faremo lo stesso per le nostre informazioni sull’assicurazione auto e sull’assicurazione auto elettrica.

STATIC_CAR_INSURANCE="""
<static_context>
Copertura Assicurazione Auto:
Le polizze assicurative auto di Acme tipicamente coprono:
1. Copertura responsabilità civile: Paga per lesioni personali e danni materiali che causi ad altri.
2. Copertura collisione: Paga per i danni alla tua auto in un incidente.
3. Copertura completa: Paga per i danni alla tua auto da incidenti non da collisione.
4. Copertura spese mediche: Paga per le spese mediche dopo un incidente.
5. Copertura conducente non assicurato/sottoassicurato: Ti protegge se vieni colpito da un conducente con assicurazione insufficiente.

Le coperture opzionali includono:
- Rimborso auto a noleggio
- Assistenza stradale
- Sostituzione auto nuova
</static_context>
"""

STATIC_ELECTRIC_CAR_INSURANCE="""
<static_context>
Assicurazione Auto Elettrica:
La nostra assicurazione auto elettrica specializzata va oltre la copertura auto tradizionale, 
offrendo protezione su misura per il tuo investimento high-tech. Oltre alle coperture standard, offriamo:
- Protezione dei costosi sistemi batteria
- Copertura delle attrezzature di ricarica domestica
- Adattamento al mondo in rapida evoluzione dei veicoli elettrici

Che tu stia guidando una Rivian, Nissan Leaf, Chevrolet Bolt, 
o qualsiasi altro veicolo elettrico, i nostri agenti esperti sono pronti a creare una polizza 
che ti dia la fiducia di goderti ogni miglio alimentato da elettroni.
</static_context>
"""

Ora che abbiamo il nostro contenuto statico, aggiungiamo almeno 4-5 esempi di interazioni “buone” per guidare le risposte di Claude. Questi esempi dovrebbero essere rappresentativi della tua interazione ideale con il cliente e possono includere guardrail, chiamate a strumenti, ecc.

EXAMPLES="""
Ecco alcuni esempi di come puoi interagire con i clienti:

<example 1>
U: Ciao, offrite assicurazioni commerciali per piccole imprese?

A: Ah! Sfortunatamente, non offriamo assicurazioni commerciali al momento. 
Tuttavia, forniamo una gamma di prodotti assicurativi personali inclusa l'assicurazione auto e l'assicurazione auto elettrica. 
Ti piacerebbe saperne di più su queste offerte?
</example 1>

<example 2>
U: Ciao, quali sono i vostri orari di lavoro?

A: I nostri orari di lavoro sono da lunedì a venerdì, dalle 9:00 alle 17:00 EST. 
Se hai domande o hai bisogno di assistenza, non esitare a contattarci durante questi orari. 
Come posso aiutarti oggi?
</example 2>

<example 3>
U: Sto cercando un'assicurazione auto. Cosa offre Acme?

A: Ottima scelta! Le polizze assicurative auto di Acme tipicamente includono:
- Copertura responsabilità civile: Ti protegge se sei responsabile di un incidente
- Copertura collisione: Paga per i danni alla tua auto in un incidente
- Copertura completa: Copre incidenti non da collisione come furto o vandalismo
- Copertura spese mediche: Paga per le spese mediche dopo un incidente
- Copertura conducente non assicurato/sottoassicurato: Ti protegge dai conducenti con assicurazione insufficiente

Offriamo anche coperture opzionali come rimborso auto a noleggio, assistenza stradale e sostituzione auto nuova. 
Vorresti maggiori dettagli su queste coperture, o hai domande specifiche sull'assicurazione del tuo veicolo?
</example 3>

<example 4>
U: Vorrei sapere della vostra assicurazione auto elettrica.

A: Certamente! La nostra assicurazione auto elettrica è specificamente progettata per soddisfare le esigenze uniche dei proprietari di veicoli elettrici. 
Oltre a tutte le coperture standard che offriamo per le auto normali, le nostre polizze per auto elettriche includono:

- Copertura batteria: Protezione contro danni o degradazione del costoso sistema batteria del tuo veicolo
- Pacchetto tech: Copre riparazioni o sostituzione di elettronica avanzata e sistemi informatici di bordo
- Copertura stazione di ricarica: Protegge sia le attrezzature di ricarica domestiche che portatili
- Protezione cybersecurity: Copertura contro hacking o minacce digitali
- Assistenza stradale specializzata: Include il traino con pianale per proteggere il sottoscocca del veicolo

Copriamo un'ampia gamma di veicoli elettrici, inclusi modelli popolari di Tesla, Rivian, Nissan, Chevrolet e altri. 
C'è un veicolo elettrico specifico che vorresti assicurare, o vorresti maggiori dettagli su queste coperture?
</example 4>

<example 5>
U: Vorrei un preventivo per la mia assicurazione auto.

A: Certamente! Sarò lieta di aiutarti a ottenere un preventivo per la tua assicurazione auto. 
Per fornirti un preventivo accurato, avrò bisogno di raccogliere alcune informazioni sul tuo veicolo e sul conducente principale. 
Iniziamo con le basi:

1. Qual è la marca e il modello del tuo veicolo?
2. In che anno è stato prodotto?
3. Approssimativamente quanti chilometri hai percorso?
4. Qual è l'età del conducente principale?

Una volta che fornirai queste informazioni, userò il nostro strumento di preventivazione per generare un preventivo assicurativo personalizzato per te.
</example 5>
"""

Vorrai anche includere eventuali istruzioni importanti che delineano i Do’s e Don’ts per come Claude dovrebbe interagire con il cliente. Questo può derivare da guardrail del brand o politiche di supporto.

ADDITIONAL_GUARDRAILS = """Si prega di attenersi ai seguenti guardrail:
1. Fornire informazioni solo sui tipi di assicurazione elencati nelle nostre offerte.
2. Se viene chiesto di un tipo di assicurazione che non offriamo, dichiarare 
cortesemente che non forniamo quel servizio.
3. Non speculare su future offerte di prodotti o piani aziendali.
4. Non fare promesse o stipulare accordi che non è autorizzato a fare.
Tu fornisci solo informazioni e guida.
5. Non menzionare prodotti o servizi dei concorrenti.
"""

Ora combiniamo tutte queste sezioni in una singola stringa da usare come nostro prompt.

TASK_SPECIFIC_INSTRUCTIONS = ' '.join([
   STATIC_GREETINGS_AND_GENERAL,
   STATIC_CAR_INSURANCE,
   STATIC_ELECTRIC_CAR_INSURANCE,
   EXAMPLES,
   ADDITIONAL_GUARDRAILS,
])

Aggiungere capacità dinamiche e agentive con l’uso di strumenti

Claude è in grado di intraprendere azioni e recuperare informazioni dinamicamente utilizzando la funzionalità di uso degli strumenti lato client. Inizia elencando eventuali strumenti esterni o API che il prompt dovrebbe utilizzare.

Per questo esempio, inizieremo con uno strumento per calcolare il preventivo.

Come promemoria, questo strumento non eseguirà il calcolo effettivo, segnalerà solo all’applicazione che uno strumento dovrebbe essere usato con qualsiasi argomento specificato.

Esempio di calcolatore preventivo assicurativo:

TOOLS = [{
  "name": "get_quote",
  "description": "Calcola il preventivo assicurativo basato sull'input dell'utente. Il valore restituito è il premio mensile.",
  "input_schema": {
    "type": "object",
    "properties": {
      "make": {"type": "string", "description": "La marca del veicolo."},
      "model": {"type": "string", "description": "Il modello del veicolo."},
      "year": {"type": "integer", "description": "L'anno di produzione del veicolo."},
      "mileage": {"type": "integer", "description": "Il chilometraggio del veicolo."},
      "driver_age": {"type": "integer", "description": "L'età del conducente principale."}
    },
    "required": ["make", "model", "year", "mileage", "driver_age"]
  }
}]

def get_quote(make, model, year, mileage, driver_age):
    """Restituisce il premio mensile in USD"""
    # Puoi chiamare un endpoint http o un database per ottenere il preventivo.
    # Qui, simuliamo un ritardo di 1 secondo e restituiamo un preventivo fisso di 100.
    time.sleep(1)
    return 100

Distribuire i tuoi prompt

È difficile sapere quanto bene funziona il tuo prompt senza distribuirlo in un ambiente di test di produzione e eseguire valutazioni quindi costruiamo una piccola applicazione usando il nostro prompt, l’SDK Anthropic e streamlit per un’interfaccia utente.

In un file chiamato chatbot.py, inizia impostando la classe ChatBot, che incapsulerà le interazioni con l’SDK Anthropic.

La classe dovrebbe avere due metodi principali: generate_message e process_user_input.

from anthropic import Anthropic
from config import IDENTITY, TOOLS, MODEL, get_quote
from dotenv import load_dotenv

load_dotenv()

class ChatBot:
   def __init__(self, session_state):
       self.anthropic = Anthropic()
       self.session_state = session_state

   def generate_message(
       self,
       messages,
       max_tokens,
   ):
       try:
           response = self.anthropic.messages.create(
               model=MODEL,
               system=IDENTITY,
               max_tokens=max_tokens,
               messages=messages,
               tools=TOOLS,
           )
           return response
       except Exception as e:
           return {"error": str(e)}

   def process_user_input(self, user_input):
       self.session_state.messages.append({"role": "user", "content": user_input})

       response_message = self.generate_message(
           messages=self.session_state.messages,
           max_tokens=2048,
       )

       if "error" in response_message:
           return f"Si è verificato un errore: {response_message['error']}"

       if response_message.content[-1].type == "tool_use":
           tool_use = response_message.content[-1]
           func_name = tool_use.name
           func_params = tool_use.input
           tool_use_id = tool_use.id

           result = self.handle_tool_use(func_name, func_params)
           self.session_state.messages.append(
               {"role": "assistant", "content": response_message.content}
           )
           self.session_state.messages.append({
               "role": "user",
               "content": [{
                   "type": "tool_result",
                   "tool_use_id": tool_use_id,
                   "content": f"{result}",
               }],
           })

           follow_up_response = self.generate_message(
               messages=self.session_state.messages,
               max_tokens=2048,
           )

           if "error" in follow_up_response:
               return f"Si è verificato un errore: {follow_up_response['error']}"

           response_text = follow_up_response.content[0].text
           self.session_state.messages.append(
               {"role": "assistant", "content": response_text}
           )
           return response_text
      
       elif response_message.content[0].type == "text":
           response_text = response_message.content[0].text
           self.session_state.messages.append(
               {"role": "assistant", "content": response_text}
           )
           return response_text
      
       else:
           raise Exception("Si è verificato un errore: Tipo di risposta inaspettato")

   def handle_tool_use(self, func_name, func_params):
       if func_name == "get_quote":
           premium = get_quote(**func_params)
           return f"Preventivo generato: ${premium:.2f} al mese"
      
       raise Exception("È stato utilizzato uno strumento inaspettato")

Costruire la tua interfaccia utente

Testa la distribuzione di questo codice con Streamlit usando un metodo main. Questa funzione main() imposta un’interfaccia chat basata su Streamlit.

Lo faremo in un file chiamato app.py

import streamlit as st
from chatbot import ChatBot
from config import TASK_SPECIFIC_INSTRUCTIONS

def main():
   st.title("Chatta con Eva, l'Assistente di Acme Insurance Company🤖")

   if "messages" not in st.session_state:
       st.session_state.messages = [
           {'role': "user", "content": TASK_SPECIFIC_INSTRUCTIONS},
           {'role': "assistant", "content": "Capito"},
       ]

   chatbot = ChatBot(st.session_state)

   # Mostra i messaggi dell'utente e dell'assistente saltando i primi due
   for message in st.session_state.messages[2:]:
       # ignora i blocchi di uso strumenti
       if isinstance(message["content"], str):
           with st.chat_message(message["role"]):
               st.markdown(message["content"])

   if user_msg := st.chat_input("Scrivi il tuo messaggio qui..."):
       st.chat_message("user").markdown(user_msg)

       with st.chat_message("assistant"):
           with st.spinner("Eva sta pensando..."):
               response_placeholder = st.empty()
               full_response = chatbot.process_user_input(user_msg)
               response_placeholder.markdown(full_response)

if __name__ == "__main__":
   main()

Esegui il programma con:

streamlit run app.py

Valutare i tuoi prompt

Il prompting spesso richiede test e ottimizzazione per essere pronto per la produzione. Per determinare la prontezza della tua soluzione, valuta le prestazioni del chatbot usando un processo sistematico che combina metodi quantitativi e qualitativi. Creare una forte valutazione empirica basata sui tuoi criteri di successo definiti ti permetterà di ottimizzare i tuoi prompt.

La Console Anthropic ora presenta uno strumento di Valutazione che ti permette di testare i tuoi prompt in vari scenari.

Migliorare le prestazioni

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

Ridurre la latenza del contesto lungo con RAG

Quando si ha a che fare con grandi quantità di contesto statico e dinamico, includere tutte le informazioni nel prompt può portare a costi elevati, tempi di risposta più lenti e raggiungimento dei limiti della finestra di contesto. In questo scenario, implementare tecniche di Retrieval Augmented Generation (RAG) può migliorare significativamente le prestazioni e l’efficienza.

Usando modelli di embedding come Voyage per convertire le informazioni in rappresentazioni vettoriali, puoi creare un sistema più scalabile e reattivo. Questo approccio permette il recupero dinamico di informazioni rilevanti basato sulla query corrente, piuttosto che includere tutto il possibile contesto in ogni prompt.

L’implementazione di RAG per casi d’uso di supporto ricetta RAG ha dimostrato di aumentare l’accuratezza, ridurre i tempi di risposta e ridurre i costi API nei sistemi con requisiti di contesto estesi.

Integrare dati in tempo reale con l’uso di strumenti

Quando si ha a che fare con query che richiedono informazioni in tempo reale, come saldi del conto o dettagli della polizza, gli approcci RAG basati su embedding non sono sufficienti. Invece, puoi sfruttare l’uso di strumenti per migliorare significativamente la capacità del tuo chatbot di fornire risposte accurate in tempo reale. Per esempio, puoi usare l’uso di strumenti per cercare informazioni sui clienti, recuperare dettagli degli ordini e cancellare ordini per conto del cliente.

Questo approccio, delineato nella nostra ricetta di uso strumenti: agente del servizio clienti, ti permette di integrare perfettamente dati live nelle risposte di Claude e fornire un’esperienza cliente più personalizzata ed efficiente.

Rafforzare i guardrail di input e output

Quando si distribuisce un chatbot, specialmente in scenari di servizio clienti, è cruciale prevenire rischi associati a uso improprio, query fuori ambito e risposte inappropriate. Mentre Claude è intrinsecamente resiliente a tali scenari, ecco ulteriori passi per rafforzare i guardrail del tuo chatbot:

  • Ridurre l’allucinazione: Implementa meccanismi di verifica dei fatti e citazioni per basare le risposte su informazioni fornite.
  • Verificare le informazioni: Verifica che le risposte dell’agente siano allineate con le politiche della tua azienda e i fatti noti.
  • Evitare impegni contrattuali: Assicurati che l’agente non faccia promesse o stipuli accordi che non è autorizzato a fare.
  • Mitigare i jailbreak: Usa metodi come schermi di innocuità e validazione dell’input per impedire agli utenti di sfruttare vulnerabilità del modello, mirando a generare contenuti inappropriati.
  • Evitare di menzionare i concorrenti: Implementa un filtro per le menzioni dei concorrenti per mantenere il focus sul brand e non menzionare prodotti o servizi dei concorrenti.
  • Mantenere Claude nel personaggio: Impedire a Claude di cambiare il loro stile di contesto, anche durante interazioni lunghe e complesse.
  • Rimuovere Informazioni Personali Identificabili (PII): A meno che non sia esplicitamente richiesto e autorizzato, rimuovi qualsiasi PII dalle risposte.

Ridurre il tempo di risposta percepito con lo streaming

Quando si ha a che fare con risposte potenzialmente lunghe, implementare lo streaming può migliorare significativamente il coinvolgimento e la soddisfazione dell’utente. In questo scenario, gli utenti ricevono la risposta progressivamente invece di aspettare che l’intera risposta sia generata.

Ecco come implementare lo streaming:

  1. Usa l’API di Streaming Anthropic per supportare le risposte in streaming.
  2. Configura il tuo frontend per gestire i chunk di testo in arrivo.
  3. Visualizza ogni chunk mentre arriva, simulando la digitazione in tempo reale.
  4. Implementa un meccanismo per salvare la risposta completa, permettendo agli utenti di visualizzarla se navigano via e tornano.

In alcuni casi, lo streaming permette l’uso di modelli più avanzati con latenze di base più alte, poiché la visualizzazione progressiva mitiga l’impatto di tempi di elaborazione più lunghi.

Scalare il tuo Chatbot

Man mano che la complessità del tuo Chatbot cresce, la tua architettura applicativa può evolversi per adattarsi. Prima di aggiungere ulteriori strati alla tua architettura, considera le seguenti opzioni meno esaustive:

  • Assicurati di sfruttare al massimo i tuoi prompt e ottimizzare attraverso il prompt engineering. Usa le nostre guide al prompt engineering per scrivere i prompt più efficaci.
  • Aggiungi ulteriori strumenti al prompt (che possono includere catene di prompt) e vedi se puoi ottenere la funzionalità richiesta.

Se il tuo Chatbot gestisce compiti incredibilmente vari, potresti voler considerare di aggiungere un classificatore di intenti separato per instradare la query iniziale del cliente. Per l’applicazione esistente, questo comporterebbe la creazione di un albero decisionale che instradarrebbe le query dei clienti attraverso il classificatore e poi verso conversazioni specializzate (con il proprio set di strumenti e prompt di sistema). Nota, questo metodo richiede una chiamata aggiuntiva a Claude che può aumentare la latenza.

Integrare Claude nel tuo flusso di lavoro di supporto

Mentre i nostri esempi si sono concentrati su funzioni Python chiamabili all’interno di un ambiente Streamlit, distribuire Claude per il chatbot di supporto in tempo reale richiede un servizio API.

Ecco come puoi approcciare questo:

  1. Creare un wrapper API: Sviluppa un semplice wrapper API intorno alla tua funzione di classificazione. Per esempio, puoi usare Flask API o Fast API per incapsulare il tuo codice in un Servizio HTTP. Il tuo servizio HTTP potrebbe accettare l’input dell’utente e restituire la risposta dell’Assistente nella sua interezza. Quindi, il tuo servizio potrebbe avere le seguenti caratteristiche:

    • Server-Sent Events (SSE): SSE permette lo streaming in tempo reale delle risposte dal server al client. Questo è cruciale per fornire un’esperienza fluida e interattiva quando si lavora con LLM.
    • Caching: Implementare il caching può migliorare significativamente i tempi di risposta e ridurre le chiamate API non necessarie.
    • Mantenimento del contesto: Mantenere il contesto quando un utente naviga via e torna è importante per la continuità nelle conversazioni.
  2. Costruire un’interfaccia web: Implementa un’interfaccia utente web user-friendly per interagire con l’agente basato su Claude.