Para seguir este guia, você precisa de:
ANTHROPIC_API_KEY)Instale os pacotes necessários:
pip install anthropic streamlit python-dotenvAqui estão alguns indicadores-chave de que você deve empregar um LLM como Claude para automatizar partes do seu processo de suporte ao cliente:
Algumas considerações para escolher Claude em vez de outros LLMs:
Descreva uma interação ideal com o cliente para definir como e quando você espera que o cliente interaja com Claude. Esse esboço ajudará a determinar os requisitos técnicos da sua solução.
Aqui está um exemplo de interação de chat para suporte ao cliente de seguro de automóvel:
O chat de suporte ao cliente é uma coleção de várias tarefas diferentes, desde responder perguntas até recuperar informações e executar ações em solicitações, tudo reunido em uma única interação com o cliente. Antes de começar a construir, divida sua interação ideal com o cliente em cada tarefa que você deseja que Claude seja capaz de executar. Isso garante que você possa criar prompts e avaliar Claude para cada tarefa, e lhe dá uma boa noção da variedade de interações que você precisa considerar ao escrever casos de teste.
Aqui estão as principais tarefas associadas ao exemplo de interação de seguro:
Saudação e orientação geral
Informações sobre o produto
Gerenciamento da conversa
Geração de cotação
Trabalhe com sua equipe de suporte para definir critérios de sucesso e escrever avaliações detalhadas com benchmarks e metas mensuráveis.
Aqui estão critérios e benchmarks que podem ser usados para avaliar o quão bem Claude executa as tarefas definidas:
Aqui estão critérios e benchmarks que podem ser usados para avaliar o impacto nos negócios de empregar Claude para suporte:
A escolha do modelo depende das compensações entre custo, precisão e tempo de resposta.
Para chat de suporte ao cliente, Claude Opus 4.8 é adequado para equilibrar inteligência, "latency" (latência) e custo. No entanto, para casos em que você tem fluxo de conversa com vários prompts, incluindo RAG, uso de ferramentas ou prompts de contexto longo, Claude Haiku 4.5 pode ser mais adequado para otimizar a latência.
Usar Claude para suporte ao cliente requer que Claude tenha direção e contexto suficientes para responder adequadamente, ao mesmo tempo em que tenha flexibilidade suficiente para lidar com uma ampla gama de consultas de clientes.
Comece escrevendo os elementos de um prompt forte, começando com um prompt do sistema. Crie um arquivo chamado config.py e adicione cada um dos seguintes blocos a ele:
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 (com a única exceção sendo o prompting de papel). Leia mais em Dando a Claude um papel com um prompt do sistema.É melhor dividir prompts complexos em subseções e escrever uma parte de cada vez. Para cada tarefa, você pode ter mais sucesso seguindo um processo passo a passo para definir as partes do prompt que Claude precisaria para executar bem a tarefa. Para este exemplo de suporte ao cliente de seguro de automóvel, você escreverá de forma incremental todas as partes de um prompt, começando com a tarefa "Saudação e orientação geral". Isso também facilita a depuração do seu prompt, pois você pode ajustar mais rapidamente partes individuais do prompt geral.
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>
"""Em seguida, faça o mesmo para suas informações sobre seguro de automóvel e seguro de carro elétrico.
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>
"""Agora que você tem seu conteúdo estático, adicione pelo menos 4-5 exemplos de interações "boas" para orientar as respostas do Claude. Esses exemplos devem ser representativos da sua interação ideal com o cliente e podem incluir guardrails, chamadas de ferramentas, etc.
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>
"""Você também vai querer incluir quaisquer instruções importantes descrevendo o que fazer e o que não fazer sobre como Claude deve interagir com o cliente. Isso pode se basear em guardrails da marca ou políticas de suporte.
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.
"""Agora combine todas essas seções em uma única string para usar como seu prompt.
TASK_SPECIFIC_INSTRUCTIONS = " ".join(
[
STATIC_GREETINGS_AND_GENERAL,
STATIC_CAR_INSURANCE,
STATIC_ELECTRIC_CAR_INSURANCE,
EXAMPLES,
ADDITIONAL_GUARDRAILS,
]
)Claude é capaz de executar ações e recuperar informações dinamicamente usando a funcionalidade de uso de ferramentas do lado do cliente. Comece listando quaisquer ferramentas externas ou APIs que o prompt deve usar.
Para este exemplo, comece com uma ferramenta para calcular a cotação.
Adicione o nome do modelo, a definição da ferramenta e uma implementação stub ao 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"""
# Você pode chamar um endpoint HTTP ou um banco de dados para obter a cotação.
# Aqui, simulamos um atraso de 1 segundo e retornamos uma cotação fixa de 100.
time.sleep(1)
return 100É difícil saber o quão bem seu prompt funciona sem implantá-lo em um ambiente de produção de teste e executar avaliações. Construa uma pequena aplicação usando o prompt, o SDK da Anthropic e o Streamlit para uma interface de usuário.
Em um arquivo chamado chatbot.py, comece configurando a classe ChatBot, que encapsulará as interações com o SDK da Anthropic.
A classe deve ter dois métodos principais: 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")Teste a implantação deste código com Streamlit usando um método main. Esta função main() configura uma interface de chat baseada em Streamlit.
Faça isso em um arquivo chamado 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)
# Exibe mensagens do usuário e do assistente, pulando as duas primeiras
for message in st.session_state.messages[2:]:
# ignora blocos de uso de ferramentas
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()Execute o programa com:
streamlit run app.pyO prompting geralmente requer testes e otimização para estar pronto para produção. Para determinar a prontidão da sua solução, avalie o desempenho do chatbot usando um processo sistemático que combina métodos quantitativos e qualitativos. Criar uma avaliação empírica forte com base nos seus critérios de sucesso definidos permitirá que você otimize seus prompts.
Em cenários complexos, pode ser útil considerar estratégias adicionais para melhorar o desempenho além das técnicas padrão de engenharia de prompt e estratégias de implementação de guardrails. Aqui estão alguns cenários comuns:
Ao lidar com grandes quantidades de contexto estático e dinâmico, incluir todas as informações no prompt pode levar a custos altos, tempos de resposta mais lentos e atingir os limites da janela de contexto. Nesse cenário, implementar técnicas de "Retrieval Augmented Generation" (geração aumentada por recuperação), ou RAG, pode melhorar o desempenho e a eficiência.
Ao usar modelos de embedding como o Voyage para converter informações em representações vetoriais, você pode criar um sistema mais escalável e responsivo. Essa abordagem permite a recuperação dinâmica de informações relevantes com base na consulta atual, em vez de incluir todo o contexto possível em cada prompt.
Implementar RAG para casos de uso de suporte demonstrou aumentar a precisão, reduzir os tempos de resposta e reduzir os custos de API em sistemas com requisitos extensivos de contexto. Consulte a receita de RAG para um exemplo prático.
Ao lidar com consultas que exigem informações em tempo real, como saldos de contas ou detalhes de apólices, abordagens de RAG baseadas em embedding não são suficientes. Em vez disso, o uso de ferramentas pode aprimorar a capacidade do seu chatbot de fornecer respostas precisas e em tempo real. Por exemplo, você pode usar o uso de ferramentas para consultar informações do cliente, recuperar detalhes de pedidos e cancelar pedidos em nome do cliente.
Essa abordagem, descrita na receita de uso de ferramentas: agente de atendimento ao cliente, permite integrar dados ao vivo nas respostas do Claude e fornecer uma experiência de cliente mais personalizada e eficiente.
Ao implantar um chatbot, especialmente em cenários de atendimento ao cliente, é importante prevenir riscos associados a uso indevido, consultas fora do escopo e respostas inadequadas. Embora Claude seja inerentemente resiliente a tais cenários, aqui estão passos adicionais para fortalecer os guardrails do seu chatbot:
Ao lidar com respostas potencialmente longas, implementar streaming pode melhorar o engajamento e a satisfação do usuário. Nesse cenário, os usuários recebem a resposta progressivamente em vez de esperar que toda a resposta seja gerada.
Veja como implementar streaming:
Em alguns casos, o streaming permite o uso de modelos mais avançados com latências base mais altas, pois a exibição progressiva mitiga o impacto de tempos de processamento mais longos.
À medida que a complexidade do seu chatbot cresce, a arquitetura da sua aplicação pode evoluir para acompanhar. Antes de adicionar mais camadas à sua arquitetura, considere as seguintes opções menos exaustivas:
Se o seu chatbot lida com tarefas incrivelmente variadas, você pode considerar adicionar um classificador de intenção separado para rotear a consulta inicial do cliente. Para a aplicação existente, isso envolveria criar uma árvore de decisão que rotearia as consultas dos clientes através do classificador e depois para conversas especializadas (com seu próprio conjunto de ferramentas e prompts do sistema). Observe que esse método requer uma chamada adicional ao Claude que pode aumentar a latência.
Embora esses exemplos tenham se concentrado em funções Python que podem ser chamadas dentro de um ambiente Streamlit, implantar Claude para chatbot de suporte em tempo real requer um serviço de API.
Veja como você pode abordar isso:
Crie um wrapper de API: Desenvolva um wrapper de API simples em torno da sua função de classificação. Por exemplo, você pode usar Flask API ou Fast API para encapsular seu código em um Serviço HTTP. Seu serviço HTTP poderia aceitar a entrada do usuário e retornar a resposta do Assistente em sua totalidade. Assim, seu serviço poderia ter as seguintes características:
Construa uma interface web: Implemente uma interface web amigável para interagir com o agente alimentado por Claude.
Dê ao Claude acesso às suas APIs para que ele possa executar ações em nome dos clientes.
Construa avaliações para medir seu agente de suporte em relação aos critérios de sucesso que você definiu.
Transmita respostas para que os clientes vejam as respostas à medida que são geradas.
Refine seu prompt do sistema e exemplos para melhor desempenho nas tarefas.
Was this page helpful?