Per seguire questa guida, hai bisogno di:
ANTHROPIC_API_KEY)Installa i pacchetti richiesti:
pip install anthropic streamlit python-dotenvEcco alcuni indicatori chiave che suggeriscono l'impiego di un LLM come Claude per automatizzare parti del tuo processo di assistenza clienti:
Alcune considerazioni per scegliere Claude rispetto ad altri LLM:
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 di chat per l'assistenza clienti di un'assicurazione auto:
La chat di assistenza clienti è una raccolta di molteplici compiti diversi, dalla risposta alle domande al recupero di informazioni fino all'esecuzione di azioni su richiesta, tutti racchiusi in un'unica interazione con il cliente. Prima di iniziare a costruire, suddividi la tua interazione ideale con il cliente in ogni compito che vuoi che Claude sia in grado di eseguire. Questo garantisce che tu possa creare prompt 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.
Ecco i compiti chiave associati all'esempio di interazione assicurativa:
Saluto e indicazioni generali
Informazioni sul prodotto
Gestione della conversazione
Generazione del preventivo
Collabora con il tuo team di assistenza per definire i criteri di successo e scrivere valutazioni dettagliate con benchmark e obiettivi misurabili.
Ecco criteri e benchmark che possono essere utilizzati per valutare con quale successo Claude esegue i compiti definiti:
Ecco criteri e benchmark che possono essere utilizzati per valutare l'impatto aziendale dell'impiego di Claude per l'assistenza:
La scelta del modello dipende dai compromessi tra costo, accuratezza e tempo di risposta.
Per la chat di assistenza clienti, Claude Opus 4.8 è adatto a bilanciare intelligenza, "latency" (latenza) e costo. Tuttavia, per i casi in cui hai un flusso di conversazione con più prompt che includono RAG, uso degli strumenti o prompt con contesto lungo, Claude Haiku 4.5 potrebbe essere più adatto per ottimizzare la latenza.
L'utilizzo di Claude per l'assistenza clienti richiede che Claude abbia indicazioni e contesto sufficienti per rispondere in modo appropriato, pur avendo abbastanza flessibilità per gestire un'ampia gamma di richieste dei clienti.
Inizia scrivendo gli elementi di un prompt efficace, a partire da un prompt di sistema. Crea un file chiamato config.py e aggiungi ciascuno dei seguenti blocchi:
IDENTITY = """You are Eva, a friendly and knowledgeable AI assistant for Acme Insurance
Company. Your role is to warmly welcome customers and provide information on
Acme's insurance offerings, which include car insurance and electric car
insurance. You can also help customers get quotes for their insurance needs."""User (con l'unica eccezione del role prompting). Leggi di più in Assegnare a Claude un ruolo con un prompt di sistema.È meglio suddividere i prompt complessi in sottosezioni e scrivere una parte alla volta. Per ogni compito, potresti ottenere maggiore 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 assistenza clienti per l'assicurazione auto, scriverai in modo incrementale tutte le parti di un prompt a partire dal compito "Saluto e indicazioni generali". Questo rende anche più facile il debug del tuo prompt, poiché puoi regolare più rapidamente le singole parti del prompt complessivo.
STATIC_GREETINGS_AND_GENERAL = """
<static_context>
Acme Auto Insurance: Your Trusted Companion on the Road
About:
At Acme Insurance, we understand that your vehicle is more than just a mode of transportation—it's your ticket to life's adventures.
Since 1985, we've been crafting auto insurance policies that give drivers the confidence to explore, commute, and travel with peace of mind.
Whether you're navigating city streets or embarking on cross-country road trips, Acme is there to protect you and your vehicle.
Our innovative auto insurance policies are designed to adapt to your unique needs, covering everything from fender benders to major collisions.
With Acme's award-winning customer service and swift claim resolution, you can focus on the joy of driving while we handle the rest.
We're not just an insurance provider—we're your co-pilot in life's journeys.
Choose Acme Auto Insurance and experience the assurance that comes with superior coverage and genuine care. Because at Acme, we don't just
insure your car—we fuel your adventures on the open road.
Note: We also offer specialized coverage for electric vehicles, ensuring that drivers of all car types can benefit from our protection.
Acme Insurance offers the following products:
- Car insurance
- Electric car insurance
- Two-wheeler insurance
Business hours: Monday-Friday, 9 AM - 5 PM EST
Customer service number: 1-800-123-4567
</static_context>
"""Poi fai lo stesso per le tue informazioni sull'assicurazione auto e sull'assicurazione per auto elettriche.
STATIC_CAR_INSURANCE = """
<static_context>
Car Insurance Coverage:
Acme's car insurance policies typically cover:
1. Liability coverage: Pays for bodily injury and property damage you cause to others.
2. Collision coverage: Pays for damage to your car in an accident.
3. Comprehensive coverage: Pays for damage to your car from non-collision incidents.
4. Medical payments coverage: Pays for medical expenses after an accident.
5. Uninsured/underinsured motorist coverage: Protects you if you're hit by a driver with insufficient insurance.
Optional coverages include:
- Rental car reimbursement
- Roadside assistance
- New car replacement
</static_context>
"""
STATIC_ELECTRIC_CAR_INSURANCE = """
<static_context>
Electric Car Insurance:
Our specialized electric car insurance goes beyond traditional auto coverage,
offering tailored protection for your high-tech investment. In addition to standard coverages, we offer:
- Safeguarding expensive battery systems
- Covering home charging equipment
- Adapting to the rapidly evolving world of electric vehicles
Whether you're driving a Rivian, Nissan Leaf, Chevrolet Bolt,
or any other electric vehicle, our knowledgeable agents are ready to craft a policy
that gives you the confidence to enjoy every electron-powered mile.
</static_context>
"""Ora che hai il tuo contenuto statico, aggiungi almeno 4-5 interazioni "buone" di esempio 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 = """
Here are a few examples of how you can interact with customers:
<example 1>
H: Hi, do you offer commercial insurance for small businesses?
A: Ah! Unfortunately, we don't offer commercial insurance at this time.
However, we do provide a range of personal insurance products including car insurance and electric car insurance.
Would you like to know more about these offerings?
</example 1>
<example 2>
H: Hi, what are your business hours?
A: Our business hours are Monday to Friday, 9 AM to 5 PM EST.
If you have any questions or need assistance, feel free to reach out during those times.
How else can I assist you today?
</example 2>
<example 3>
H: I'm shopping for car insurance. What does Acme offer?
A: Great choice! Acme's car insurance policies typically include:
- Liability coverage: Protects you if you're at fault in an accident
- Collision coverage: Pays for damage to your car in an accident
- Comprehensive coverage: Covers non-collision incidents like theft or vandalism
- Medical payments coverage: Pays for medical expenses after an accident
- Uninsured/underinsured motorist coverage: Protects you from drivers with insufficient insurance
We also offer optional coverages like rental car reimbursement, roadside assistance, and new car replacement.
Would you like more details on any of these coverages, or do you have specific questions about insuring your vehicle?
</example 3>
<example 4>
H: I'd like to hear about your electric car insurance.
A: Certainly! Our electric car insurance is specially designed to meet the unique needs of electric vehicle owners.
In addition to all the standard coverages we offer for regular cars, our electric car policies include:
- Battery coverage: Protection against damage or degradation of your vehicle's expensive battery system
- Tech package: Covers repairs or replacement of advanced electronics and onboard computer systems
- Charging station coverage: Protects both home and portable charging equipment
- Cybersecurity protection: Coverage against hacking or digital threats
- Specialized roadside assistance: Includes flatbed towing to protect the vehicle's undercarriage
We cover a wide range of electric vehicles, including popular models from Tesla, Rivian, Nissan, Chevrolet, and more.
Is there a specific electric vehicle you're looking to insure, or would you like more details on any of these coverages?
</example 4>
<example 5>
H: I'd like to get a quote for my car insurance.
A: Certainly! I'd be happy to help you get a quote for your car insurance.
To provide you with an accurate quote, I'll need to collect some information about your vehicle and the primary driver.
Let's start with the basics:
1. What is the make and model of your vehicle?
2. What year was it manufactured?
3. Approximately how many miles have you driven?
4. What is the age of the primary driver?
Once you provide this information, I'll use our quoting tool to generate a personalized insurance quote for you.
</example 5>
"""Vorrai anche includere eventuali istruzioni importanti che delineano cosa fare e cosa non fare riguardo a come Claude dovrebbe interagire con il cliente. Questo può derivare dai guardrail del brand o dalle politiche di assistenza.
ADDITIONAL_GUARDRAILS = """Please adhere to the following guardrails:
1. Only provide information about insurance types listed in our offerings.
2. If asked about an insurance type we don't offer, politely state
that we don't provide that service.
3. Do not speculate about future product offerings or company plans.
4. Don't make promises or enter into agreements it's not authorized to make.
You only provide information and guidance.
5. Do not mention any competitor's products or services.
"""Ora combina tutte queste sezioni in un'unica stringa da utilizzare come prompt.
TASK_SPECIFIC_INSTRUCTIONS = " ".join(
[
STATIC_GREETINGS_AND_GENERAL,
STATIC_CAR_INSURANCE,
STATIC_ELECTRIC_CAR_INSURANCE,
EXAMPLES,
ADDITIONAL_GUARDRAILS,
]
)Claude è in grado di eseguire azioni e recuperare informazioni in modo dinamico utilizzando la funzionalità di uso degli strumenti lato client. Inizia elencando eventuali strumenti esterni o API che il prompt dovrebbe utilizzare.
Per questo esempio, inizia con uno strumento per calcolare il preventivo.
Aggiungi il nome del modello, la definizione dello strumento e un'implementazione stub a config.py:
import time
MODEL = "claude-opus-4-8"
TOOLS = [
{
"name": "get_quote",
"description": "Calculate the insurance quote based on user input. Returned value is per month premium.",
"input_schema": {
"type": "object",
"properties": {
"make": {"type": "string", "description": "The make of the vehicle."},
"model": {"type": "string", "description": "The model of the vehicle."},
"year": {
"type": "integer",
"description": "The year the vehicle was manufactured.",
},
"mileage": {
"type": "integer",
"description": "The mileage on the vehicle.",
},
"driver_age": {
"type": "integer",
"description": "The age of the primary driver.",
},
},
"required": ["make", "model", "year", "mileage", "driver_age"],
},
}
]
def get_quote(make, model, year, mileage, driver_age):
"""Returns the premium per month in USD"""
# Puoi chiamare un endpoint http o un database per ottenere la quotazione.
# Qui simuliamo un ritardo di 1 secondo e restituiamo una quotazione fissa di 100.
time.sleep(1)
return 100È difficile sapere quanto bene funziona il tuo prompt senza distribuirlo in un ambiente di produzione di test ed eseguire valutazioni. Costruisci una piccola applicazione utilizzando il prompt, l'SDK di 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 di 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"An error occurred: {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"An error occurred: {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("An error occurred: Unexpected response type")
def handle_tool_use(self, func_name, func_params):
if func_name == "get_quote":
premium = get_quote(**func_params)
return f"Quote generated: ${premium:.2f} per month"
raise Exception("An unexpected tool was used")Testa la distribuzione di questo codice con Streamlit utilizzando un metodo main. Questa funzione main() configura un'interfaccia di chat basata su Streamlit.
Fai questo in un file chiamato app.py
import streamlit as st
from chatbot import ChatBot
from config import TASK_SPECIFIC_INSTRUCTIONS
def main():
st.title("Chat with Eva, Acme Insurance Company's Assistant🤖")
if "messages" not in st.session_state:
st.session_state.messages = [
{"role": "user", "content": TASK_SPECIFIC_INSTRUCTIONS},
{"role": "assistant", "content": "Understood"},
]
chatbot = ChatBot(st.session_state)
# Visualizza i messaggi utente e 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("Type your message here..."):
st.chat_message("user").markdown(user_msg)
with st.chat_message("assistant"):
with st.spinner("Eva is thinking..."):
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.pyLa creazione di prompt spesso richiede test e ottimizzazione per essere pronta 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 solida valutazione empirica basata sui tuoi criteri di successo definiti ti permetterà di ottimizzare i tuoi prompt.
In scenari complessi, può essere utile considerare strategie aggiuntive per migliorare le prestazioni oltre alle tecniche standard di prompt engineering e alle strategie di implementazione dei guardrail. Ecco alcuni scenari comuni:
Quando si gestiscono 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, l'implementazione di tecniche di "Retrieval Augmented Generation" (generazione aumentata dal recupero), o RAG, può migliorare 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 in base alla query corrente, anziché includere tutto il contesto possibile in ogni prompt.
È stato dimostrato che l'implementazione di RAG per i casi d'uso di assistenza aumenta l'accuratezza, riduce i tempi di risposta e riduce i costi dell'API nei sistemi con requisiti di contesto estesi. Consulta la ricetta RAG per un esempio pratico.
Quando si gestiscono query che richiedono informazioni in tempo reale, come saldi di conto o dettagli di polizza, gli approcci RAG basati su embedding non sono sufficienti. Invece, l'uso degli strumenti può migliorare la capacità del tuo chatbot di fornire risposte accurate e in tempo reale. Ad esempio, puoi utilizzare l'uso degli strumenti per cercare informazioni sui clienti, recuperare dettagli degli ordini e annullare ordini per conto del cliente.
Questo approccio, descritto nella ricetta sull'uso degli strumenti: agente di assistenza clienti, ti consente di integrare dati in tempo reale nelle risposte di Claude e fornire un'esperienza cliente più personalizzata ed efficiente.
Quando si distribuisce un chatbot, specialmente in scenari di assistenza clienti, è importante prevenire i rischi associati a uso improprio, query fuori ambito e risposte inappropriate. Sebbene Claude sia intrinsecamente resiliente a tali scenari, ecco passaggi aggiuntivi per rafforzare i guardrail del tuo chatbot:
Quando si gestiscono risposte potenzialmente lunghe, l'implementazione dello streaming può migliorare 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:
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.
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 onerose:
Se il tuo chatbot gestisce compiti incredibilmente vari, 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 instraderebbe le query dei clienti attraverso il classificatore e poi verso conversazioni specializzate (con il proprio set di strumenti e prompt di sistema). Nota che questo metodo richiede una chiamata aggiuntiva a Claude che può aumentare la latenza.
Sebbene questi esempi si siano concentrati su funzioni Python richiamabili all'interno di un ambiente Streamlit, la distribuzione di Claude per un chatbot di assistenza in tempo reale richiede un servizio API.
Ecco come puoi affrontare questo:
Crea un wrapper API: sviluppa un semplice wrapper API attorno alla tua funzione di classificazione. Ad esempio, puoi utilizzare 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'Assistant nella sua interezza. Pertanto, il tuo servizio potrebbe avere le seguenti caratteristiche:
Costruisci un'interfaccia web: implementa un'interfaccia utente web intuitiva per interagire con l'agente basato su Claude.
Dai a Claude accesso alle tue API in modo che possa agire per conto dei clienti.
Costruisci valutazioni per misurare il tuo agente di assistenza rispetto ai criteri di successo che hai definito.
Trasmetti le risposte in streaming in modo che i clienti vedano le risposte mentre vengono generate.
Perfeziona il tuo prompt di sistema e gli esempi per migliori prestazioni nei compiti.
Was this page helpful?