Um dieser Anleitung zu folgen, benötigst du:
ANTHROPIC_API_KEY)Installiere die erforderlichen Pakete:
pip install anthropic streamlit python-dotenvHier sind einige wichtige Indikatoren dafür, dass du ein LLM wie Claude einsetzen solltest, um Teile deines Kundensupport-Prozesses zu automatisieren:
Einige Überlegungen bei der Wahl von Claude gegenüber anderen LLMs:
Skizziere eine ideale Kundeninteraktion, um zu definieren, wie und wann der Kunde mit Claude interagieren soll. Diese Skizze hilft dir, die technischen Anforderungen deiner Lösung zu bestimmen.
Hier ist ein Beispiel für eine Chat-Interaktion im Kundensupport einer Kfz-Versicherung:
Kundensupport-Chat ist eine Sammlung mehrerer verschiedener Aufgaben – von der Beantwortung von Fragen über das Abrufen von Informationen bis hin zum Ausführen von Aktionen auf Anfragen –, die in einer einzigen Kundeninteraktion zusammengefasst sind. Bevor du mit der Entwicklung beginnst, zerlege deine ideale Kundeninteraktion in jede Aufgabe, die Claude ausführen können soll. Dies stellt sicher, dass du Claude für jede Aufgabe prompten und evaluieren kannst, und gibt dir ein gutes Gefühl für die Bandbreite an Interaktionen, die du beim Schreiben von Testfällen berücksichtigen musst.
Hier sind die wichtigsten Aufgaben, die mit dem Beispiel der Versicherungsinteraktion verbunden sind:
Begrüßung und allgemeine Orientierung
Produktinformationen
Gesprächsführung
Angebotserstellung
Arbeite mit deinem Support-Team zusammen, um Erfolgskriterien zu definieren und detaillierte Evaluierungen zu schreiben mit messbaren Benchmarks und Zielen.
Hier sind Kriterien und Benchmarks, mit denen bewertet werden kann, wie erfolgreich Claude die definierten Aufgaben ausführt:
Hier sind Kriterien und Benchmarks, mit denen die geschäftlichen Auswirkungen des Einsatzes von Claude für den Support bewertet werden können:
Die Wahl des Modells hängt von den Abwägungen zwischen Kosten, Genauigkeit und Antwortzeit ab.
Für Kundensupport-Chat ist Claude Opus 4.8 gut geeignet, um Intelligenz, Latenz und Kosten auszubalancieren. Für Fälle, in denen du einen Gesprächsablauf mit mehreren Prompts hast, einschließlich RAG, Tool-Nutzung oder Prompts mit langem Kontext, könnte Claude Haiku 4.5 jedoch besser geeignet sein, um die Latenz zu optimieren.
Die Verwendung von Claude für den Kundensupport erfordert, dass Claude genügend Anweisungen und Kontext hat, um angemessen zu reagieren, und gleichzeitig genügend Flexibilität, um ein breites Spektrum an Kundenanfragen zu bearbeiten.
Beginne damit, die Elemente eines starken Prompts zu schreiben, angefangen mit einem System-Prompt. Erstelle eine Datei namens config.py und füge jeden der folgenden Blöcke hinzu:
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-Turn geschrieben wird (mit der einzigen Ausnahme des Rollen-Promptings). Lies mehr unter Claude mit einem System-Prompt eine Rolle geben.Es ist am besten, komplexe Prompts in Unterabschnitte zu zerlegen und jeweils einen Teil zu schreiben. Für jede Aufgabe könntest du mehr Erfolg haben, wenn du einem schrittweisen Prozess folgst, um die Teile des Prompts zu definieren, die Claude benötigt, um die Aufgabe gut zu erledigen. Für dieses Beispiel des Kfz-Versicherungs-Kundensupports schreibst du Stück für Stück alle Teile für einen Prompt, beginnend mit der Aufgabe „Begrüßung und allgemeine Orientierung". Dies erleichtert auch das Debuggen deines Prompts, da du einzelne Teile des Gesamt-Prompts schneller anpassen kannst.
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>
"""Mache dann dasselbe für deine Informationen zur Kfz-Versicherung und zur Elektroauto-Versicherung.
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>
"""Nachdem du nun deinen statischen Inhalt hast, füge mindestens 4–5 Beispiele für „gute" Interaktionen hinzu, um Claudes Antworten zu steuern. Diese Beispiele sollten repräsentativ für deine ideale Kundeninteraktion sein und können Guardrails, Tool-Aufrufe usw. enthalten.
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>
"""Du solltest auch alle wichtigen Anweisungen einfügen, die Dos und Don'ts dafür beschreiben, wie Claude mit dem Kunden interagieren soll. Diese können sich aus Marken-Guardrails oder Support-Richtlinien ableiten.
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.
"""Kombiniere nun all diese Abschnitte zu einem einzigen String, den du als deinen Prompt verwendest.
TASK_SPECIFIC_INSTRUCTIONS = " ".join(
[
STATIC_GREETINGS_AND_GENERAL,
STATIC_CAR_INSURANCE,
STATIC_ELECTRIC_CAR_INSURANCE,
EXAMPLES,
ADDITIONAL_GUARDRAILS,
]
)Claude ist in der Lage, mithilfe der clientseitigen Tool-Nutzung Aktionen auszuführen und Informationen dynamisch abzurufen. Beginne damit, alle externen Tools oder APIs aufzulisten, die der Prompt verwenden soll.
Für dieses Beispiel beginnst du mit einem Tool zur Berechnung des Angebots.
Füge den Modellnamen, die Tool-Definition und eine Stub-Implementierung zu config.py hinzu:
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"""
# Du kannst einen HTTP-Endpunkt oder eine Datenbank aufrufen, um das Angebot abzurufen.
# Hier simulieren wir eine Verzögerung von 1 Sekunde und geben ein festes Angebot von 100 zurück.
time.sleep(1)
return 100Es ist schwer zu wissen, wie gut dein Prompt funktioniert, ohne ihn in einer Test-Produktionsumgebung zu deployen und Evaluierungen durchzuführen. Erstelle eine kleine Anwendung mit dem Prompt, dem Anthropic SDK und Streamlit für eine Benutzeroberfläche.
Beginne in einer Datei namens chatbot.py damit, die ChatBot-Klasse einzurichten, die die Interaktionen mit dem Anthropic SDK kapselt.
Die Klasse sollte zwei Hauptmethoden haben: generate_message und 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")Teste das Deployment dieses Codes mit Streamlit unter Verwendung einer Main-Methode. Diese main()-Funktion richtet eine Streamlit-basierte Chat-Oberfläche ein.
Mache dies in einer Datei namens 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)
# Zeige Benutzer- und Assistenten-Nachrichten an, überspringe die ersten beiden
for message in st.session_state.messages[2:]:
# Ignoriere tool_use-Blöcke
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()Führe das Programm aus mit:
streamlit run app.pyPrompting erfordert oft Tests und Optimierung, damit es produktionsreif ist. Um die Reife deiner Lösung zu bestimmen, evaluiere die Chatbot-Leistung mit einem systematischen Prozess, der quantitative und qualitative Methoden kombiniert. Das Erstellen einer starken empirischen Evaluierung basierend auf deinen definierten Erfolgskriterien ermöglicht es dir, deine Prompts zu optimieren.
In komplexen Szenarien kann es hilfreich sein, zusätzliche Strategien zur Leistungsverbesserung über die standardmäßigen Prompt-Engineering-Techniken und Guardrail-Implementierungsstrategien hinaus in Betracht zu ziehen. Hier sind einige häufige Szenarien:
Wenn du mit großen Mengen an statischem und dynamischem Kontext arbeitest, kann das Einbeziehen aller Informationen in den Prompt zu hohen Kosten, langsameren Antwortzeiten und dem Erreichen der Kontextfenster-Grenzen führen. In diesem Szenario kann die Implementierung von „Retrieval Augmented Generation" (RAG)-Techniken die Leistung und Effizienz verbessern.
Durch die Verwendung von Embedding-Modellen wie Voyage, um Informationen in Vektordarstellungen umzuwandeln, kannst du ein skalierbareres und reaktionsschnelleres System erstellen. Dieser Ansatz ermöglicht das dynamische Abrufen relevanter Informationen basierend auf der aktuellen Anfrage, anstatt allen möglichen Kontext in jeden Prompt einzubeziehen.
Die Implementierung von RAG für Support-Anwendungsfälle hat nachweislich die Genauigkeit erhöht, Antwortzeiten reduziert und API-Kosten in Systemen mit umfangreichen Kontextanforderungen gesenkt. Siehe das RAG-Rezept für ein ausgearbeitetes Beispiel.
Bei Anfragen, die Echtzeitinformationen erfordern, wie Kontostände oder Policendetails, reichen Embedding-basierte RAG-Ansätze nicht aus. Stattdessen kann Tool-Nutzung die Fähigkeit deines Chatbots verbessern, genaue Echtzeitantworten zu liefern. Du kannst beispielsweise Tool-Nutzung verwenden, um Kundeninformationen nachzuschlagen, Bestelldetails abzurufen und Bestellungen im Namen des Kunden zu stornieren.
Dieser Ansatz, beschrieben im Rezept „Tool-Nutzung: Kundenservice-Agent", ermöglicht es dir, Live-Daten in Claudes Antworten zu integrieren und ein personalisierteres und effizienteres Kundenerlebnis zu bieten.
Beim Deployment eines Chatbots, insbesondere in Kundenservice-Szenarien, ist es wichtig, Risiken im Zusammenhang mit Missbrauch, themenfremden Anfragen und unangemessenen Antworten zu verhindern. Obwohl Claude von Natur aus widerstandsfähig gegenüber solchen Szenarien ist, findest du hier zusätzliche Schritte zur Stärkung deiner Chatbot-Guardrails:
Bei potenziell langen Antworten kann die Implementierung von Streaming das Nutzerengagement und die Zufriedenheit verbessern. In diesem Szenario erhalten Nutzer die Antwort schrittweise, anstatt darauf zu warten, dass die gesamte Antwort generiert wird.
So implementierst du Streaming:
In einigen Fällen ermöglicht Streaming die Verwendung fortschrittlicherer Modelle mit höheren Basis-Latenzen, da die progressive Anzeige die Auswirkungen längerer Verarbeitungszeiten abmildert.
Wenn die Komplexität deines Chatbots wächst, kann sich deine Anwendungsarchitektur entsprechend weiterentwickeln. Bevor du weitere Schichten zu deiner Architektur hinzufügst, ziehe die folgenden weniger aufwendigen Optionen in Betracht:
Wenn dein Chatbot unglaublich vielfältige Aufgaben bearbeitet, solltest du in Betracht ziehen, einen separaten Intent-Klassifikator hinzuzufügen, um die anfängliche Kundenanfrage zu routen. Für die bestehende Anwendung würde dies das Erstellen eines Entscheidungsbaums beinhalten, der Kundenanfragen durch den Klassifikator und dann zu spezialisierten Gesprächen (mit ihrem eigenen Satz von Tools und System-Prompts) leitet. Beachte, dass diese Methode einen zusätzlichen Aufruf an Claude erfordert, der die Latenz erhöhen kann.
Während sich diese Beispiele auf Python-Funktionen konzentriert haben, die in einer Streamlit-Umgebung aufrufbar sind, erfordert das Deployment von Claude für einen Echtzeit-Support-Chatbot einen API-Service.
So kannst du dabei vorgehen:
Erstelle einen API-Wrapper: Entwickle einen einfachen API-Wrapper um deine Klassifizierungsfunktion. Du kannst beispielsweise Flask API oder Fast API verwenden, um deinen Code in einen HTTP-Service zu verpacken. Dein HTTP-Service könnte die Nutzereingabe akzeptieren und die Assistant-Antwort vollständig zurückgeben. Dein Service könnte somit die folgenden Eigenschaften haben:
Erstelle eine Web-Oberfläche: Implementiere eine benutzerfreundliche Web-UI für die Interaktion mit dem Claude-gestützten Agenten.
Gib Claude Zugriff auf deine APIs, damit es im Namen von Kunden Aktionen ausführen kann.
Erstelle Evaluierungen, um deinen Support-Agenten anhand der von dir definierten Erfolgskriterien zu messen.
Streame Antworten, damit Kunden die Antworten sehen, während sie generiert werden.
Verfeinere deinen System-Prompt und deine Beispiele für eine bessere Aufgabenleistung.
Was this page helpful?