Prima di costruire con Claude

Decidere se utilizzare Claude per il supporto in chat

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

Alcune considerazioni per scegliere Claude rispetto ad altri LLM:

  • Dai priorità a conversazioni naturali e sfumate: La sofisticata comprensione linguistica di Claude consente conversazioni più naturali e contestuali che risultano più simili a quelle 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 una programmazione estesa di permutazioni di espressioni dell’utente.
  • Hai bisogno di supporto multilingue scalabile: Le capacità multilingue di Claude gli permettono di intrattenere conversazioni in oltre 200 lingue senza la necessità di chatbot separati o processi di traduzione estesi per ogni lingua supportata.

Definire l’interazione ideale in chat

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 in chat per il supporto clienti di un’assicurazione auto:

  • Cliente: Avvia l’esperienza di chat di supporto
    • 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 per veicoli elettrici
  • Cliente: Pone domande relative alle esigenze uniche per le assicurazioni di 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 all’assicurazione auto
  • Cliente: Esprime interesse per un preventivo assicurativo
    • Claude: Pone una serie di domande per determinare il preventivo appropriato, adattandosi alle 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 dallo 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 verso i 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 della risposta e del livello di dettaglio che desideri che Claude abbia.

Suddividere l’interazione in attività uniche

La chat di supporto clienti è una raccolta di molteplici attività diverse, dalla risposta alle domande al recupero di informazioni fino all’esecuzione di azioni sulle richieste, il tutto racchiuso in un’unica interazione con il cliente. Prima di iniziare a costruire, scomponi la tua interazione ideale con il cliente in ogni attività che vuoi che Claude sia in grado di eseguire. Questo assicura che tu possa istruire e valutare Claude per ogni attività, 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 svolta della conversazione a seconda delle richieste dell’utente.

Ecco le attività chiave associate 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 sull’interazione
  2. Informazioni sul prodotto

    • Fornire informazioni sulla copertura per veicoli elettrici
      Questo richiederà che Claude abbia le informazioni necessarie nel suo contesto, e potrebbe implicare che sia necessaria un’integrazione RAG.
    • Rispondere a domande relative alle esigenze assicurative uniche dei veicoli elettrici
    • Rispondere a 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 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 scrivi valutazioni dettagliate con parametri e obiettivi misurabili.

Ecco criteri e parametri che possono essere utilizzati per valutare quanto efficacemente Claude esegue le attività definite:

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

Come implementare Claude come agente di 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-opus-4-20250514 è ben adatto a bilanciare intelligenza, latenza e costo. Tuttavia, per casi in cui hai un flusso di conversazione con più prompt inclusi RAG, uso di strumenti e/o prompt a lungo contesto, claude-3-haiku-20240307 potrebbe essere più adatto per ottimizzare la latenza.

Costruire un prompt forte

Utilizzare Claude per il supporto clienti richiede che Claude abbia abbastanza direzione e contesto per rispondere in modo appropriato, 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 è dare un caloroso benvenuto ai clienti e fornire informazioni sulle 
offerte assicurative di Acme, che includono assicurazione auto e assicurazione 
per auto elettriche. Puoi anche aiutare i clienti a ottenere preventivi per le loro esigenze assicurative."""
Mentre potresti essere tentato di inserire 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 del prompt di ruolo). Leggi di più su Assegnare un ruolo a Claude con un prompt di sistema.

È meglio suddividere i prompt complessi in sottosezioni e scrivere una parte alla volta. Per ogni attività, potresti avere maggior successo seguendo un processo passo dopo passo per definire le parti del prompt di cui Claude avrebbe bisogno per svolgere bene l’attività. Per questo esempio di supporto clienti per l’assicurazione auto, scriveremo gradualmente tutte le parti per un prompt iniziando con l’attività “Saluto e guida generale”. Questo rende anche più facile il debug del tuo prompt poiché puoi regolare più rapidamente 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 per esplorare, pendolare e viaggiare con tranquillità.
Che tu stia navigando per le strade cittadine o intraprendendo viaggi attraverso il paese, Acme è lì 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 premiato di Acme e la rapida risoluzione dei sinistri, puoi concentrarti sulla gioia di guidare mentre noi ci occupiamo del 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 per veicoli a due ruote

Orari di lavoro: Lunedì-Venerdì, 9:00 - 17:00 EST
Numero del 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 di responsabilità civile: Paga per lesioni personali e danni alla proprietà che causi ad altri.
2. Copertura collisione: Paga per danni alla tua auto in un incidente.
3. Copertura completa: Paga per danni alla tua auto da incidenti non di collisione.
4. Copertura spese mediche: Paga per spese mediche dopo un incidente.
5. Copertura conducente non assicurato/sottoassicurato: Ti protegge se sei 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 specializzata per auto elettriche va oltre la copertura auto tradizionale, 
offrendo protezione su misura per il tuo investimento high-tech. Oltre alle coperture standard, offriamo:
- Salvaguardia dei costosi sistemi di batterie
- 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>
H: Ciao, offrite assicurazioni commerciali per piccole imprese?

A: Ah! Sfortunatamente, non offriamo assicurazioni commerciali in questo momento. 
Tuttavia, forniamo una gamma di prodotti assicurativi personali tra cui assicurazione auto e assicurazione per auto elettriche. 
Vorresti saperne di più su queste offerte?
</example 1>

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

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

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

A: Ottima scelta! Le polizze assicurative auto di Acme tipicamente includono:
- Copertura di responsabilità civile: Ti protegge se sei responsabile in un incidente
- Copertura collisione: Paga per danni alla tua auto in un incidente
- Copertura completa: Copre incidenti non di collisione come furto o vandalismo
- Copertura spese mediche: Paga per spese mediche dopo un incidente
- Copertura conducente non assicurato/sottoassicurato: Ti protegge da 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>
H: Vorrei sapere di più sulla vostra assicurazione per auto elettriche.

A: Certamente! La nostra assicurazione per auto elettriche è appositamente 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 di batterie del tuo veicolo
- Pacchetto tecnologico: 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 rimorchio 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 stai cercando di assicurare, o vorresti maggiori dettagli su queste coperture?
</example 4>

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

A: Certamente! Sarò felice 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 avrai fornito queste informazioni, utilizzerò il nostro strumento di preventivazione per generare un preventivo assicurativo personalizzato per te.
</example 5>
"""

Vorrai anche includere eventuali istruzioni importanti che delineano cosa fare e cosa non fare per come Claude dovrebbe interagire con il cliente. Questo può derivare da guardrail del brand o politiche di supporto.

ADDITIONAL_GUARDRAILS = """Si prega di aderire 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, affermare 
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 di concorrenti.
"""

Ora combiniamo tutte queste sezioni in un’unica stringa da utilizzare 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 utilizzato con qualsiasi argomento specificato.

Esempio di calcolatore di preventivi assicurativi:

TOOLS = [{
  "name": "get_quote",
  "description": "Calcola il preventivo assicurativo in base all'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 in cui il veicolo è stato prodotto."},
      "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 utilizzando il nostro prompt, l’SDK Anthropic e streamlit per un’interfaccia utente.

In un file chiamato chatbot.py, inizia configurando 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 l’interfaccia utente

Testa la distribuzione di questo codice con Streamlit utilizzando un metodo main. Questa funzione main() configura un’interfaccia di 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)

   # Visualizza i messaggi dell'utente e dell'assistente saltando i primi due
   for message in st.session_state.messages[2:]:
       # ignora i blocchi di uso degli 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 utilizzando un processo sistematico che combina metodi quantitativi e qualitativi. Creare una forte valutazione empirica basata sui 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 alle 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 al 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.

Utilizzando modelli di embedding come Voyage per convertire le informazioni in rappresentazioni vettoriali, puoi creare un sistema più scalabile e reattivo. Questo approccio consente il recupero dinamico di informazioni pertinenti basate 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 in 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 di conti o dettagli di polizze, 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. Ad esempio, puoi utilizzare l’uso di strumenti per cercare informazioni sui clienti, recuperare dettagli degli ordini e annullare ordini per conto del cliente.

Questo approccio, delineato nella nostra ricetta di uso degli strumenti: agente di 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 le allucinazioni: 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 degli input per impedire agli utenti di sfruttare vulnerabilità del modello, mirando a generare contenuti inappropriati.
  • Evitare di menzionare concorrenti: Implementa un filtro di menzione dei concorrenti per mantenere il focus sul brand e non menzionare prodotti o servizi di concorrenti.
  • Mantenere Claude nel personaggio: Impedisci a Claude di cambiare il suo stile di contesto, anche durante interazioni lunghe e complesse.
  • Rimuovere Informazioni Personali Identificabili (PII): A meno che non sia esplicitamente richiesto e autorizzato, elimina 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 attendere che l’intera risposta venga generata.

Ecco come implementare lo streaming:

  1. Usa l’API di Streaming Anthropic per supportare risposte in streaming.
  2. Configura il tuo frontend per gestire i chunk di testo in arrivo.
  3. Visualizza ogni chunk man mano che 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 consente l’uso di modelli più avanzati con latenze di base più elevate, 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, l’architettura della tua applicazione può evolversi di conseguenza. Prima di aggiungere ulteriori livelli alla tua architettura, considera le seguenti opzioni meno esaustive:

  • Assicurati di sfruttare al massimo i tuoi prompt e di ottimizzare attraverso il prompt engineering. Usa le nostre guide di 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 attività incredibilmente varie, potresti voler considerare l’aggiunta di 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 richiamabili all’interno di un ambiente Streamlit, distribuire Claude per un chatbot di supporto in tempo reale richiede un servizio API.

Ecco come puoi affrontare questo:

  1. Creare un wrapper API: Sviluppa un semplice wrapper API attorno alla tua funzione di classificazione. Ad esempio, puoi usare Flask API o Fast API per avvolgere 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 consente 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 chiamate API non necessarie.
    • Mantenimento del contesto: Mantenere il contesto quando un utente naviga via e ritorna è importante per la continuità nelle conversazioni.
  2. Costruire un’interfaccia web: Implementa un’interfaccia utente web user-friendly per interagire con l’agente alimentato da Claude.