Вот некоторые ключевые показатели того, что вы должны использовать LLM, такую как Claude, для автоматизации частей вашего процесса поддержки клиентов:
Некоторые соображения при выборе Claude вместо других LLM:
Опишите идеальное взаимодействие с клиентом, чтобы определить, как и когда вы ожидаете, что клиент будет взаимодействовать с Claude. Этот план поможет определить технические требования вашего решения.
Вот пример взаимодействия в чате для поддержки клиентов автомобильной страховки:
Чат поддержки клиентов — это совокупность нескольких различных задач, от ответов на вопросы до извлечения информации и выполнения действий по запросам, объединённых в одно взаимодействие с клиентом. Перед началом разработки разбейте идеальное взаимодействие с клиентом на каждую задачу, которую вы хотите, чтобы Claude мог выполнять. Это гарантирует, что вы можете подсказывать и оценивать Claude для каждой задачи, и дает вам хорошее представление о диапазоне взаимодействий, которые вам нужно учитывать при написании тестовых случаев.
Вот ключевые задачи, связанные с примером взаимодействия страховки выше:
Приветствие и общее руководство
Информация о продукте
Управление разговором
Работайте со своей командой поддержки, чтобы определить четкие критерии успеха и написать подробные оценки с измеримыми эталонами и целями.
Вот критерии и эталоны, которые можно использовать для оценки того, насколько успешно Claude выполняет определённые задачи:
Вот критерии и эталоны, которые можно использовать для оценки влияния на бизнес использования Claude для поддержки:
Выбор модели зависит от компромиссов между стоимостью, точностью и временем ответа.
Для чата поддержки клиентов Claude Sonnet 4.5 хорошо подходит для балансирования интеллекта, задержки и стоимости. Однако для случаев, когда у вас есть поток разговора с несколькими подсказками, включая RAG, использование инструментов и/или подсказки с длинным контекстом, Claude Haiku 4.5 может быть более подходящим для оптимизации задержки.
Использование Claude для поддержки клиентов требует, чтобы Claude имел достаточно направления и контекста для надлежащего ответа, при этом имея достаточно гибкости для обработки широкого спектра запросов клиентов.
Давайте начнём с написания элементов сильной подсказки, начиная с системной подсказки:
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 (с единственным исключением, являющимся подсказкой роли). Прочитайте больше на Предоставление Claude роли с системной подсказкой.Лучше всего разбить сложные подсказки на подразделы и написать одну часть за раз. Для каждой задачи вы можете найти больший успех, следуя пошаговому процессу для определения частей подсказки, которые Claude потребуются для хорошего выполнения задачи. Для этого примера поддержки клиентов страховки автомобилей мы будем писать по частям все части подсказки, начиная с задачи "Приветствие и общее руководство". Это также облегчает отладку вашей подсказки, так как вы можете быстрее настраивать отдельные части общей подсказки.
Мы поместим все эти части в файл под названием config.py.
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>
"""Затем мы сделаем то же самое для информации о страховке автомобилей и страховке электромобилей.
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>
"""Теперь, когда у нас есть наш статический контент, давайте добавим по крайней мере 4-5 примеров "хороших" взаимодействий для руководства ответами Claude. Эти примеры должны быть репрезентативны для вашего идеального взаимодействия с клиентом и могут включать ограждения, вызовы инструментов и т.д.
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>
"""Вы также захотите включить любые важные инструкции, описывающие Делай и Не делай для того, как Claude должен взаимодействовать с клиентом. Это может быть основано на ограждениях бренда или политиках поддержки.
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.
"""Теперь давайте объединим все эти разделы в одну строку для использования в качестве нашей подсказки.
TASK_SPECIFIC_INSTRUCTIONS = ' '.join([
STATIC_GREETINGS_AND_GENERAL,
STATIC_CAR_INSURANCE,
STATIC_ELECTRIC_CAR_INSURANCE,
EXAMPLES,
ADDITIONAL_GUARDRAILS,
])Claude способен выполнять действия и динамически извлекать информацию, используя функциональность использования инструментов на стороне клиента. Начните со списка любых внешних инструментов или API, которые подсказка должна использовать.
Для этого примера мы начнём с одного инструмента для расчёта предложения.
Пример калькулятора страховки:
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"""
# You can call an http endpoint or a database to get the quote.
# Here, we simulate a delay of 1 seconds and return a fixed quote of 100.
time.sleep(1)
return 100Сложно узнать, насколько хорошо работает ваша подсказка без развёртывания её в тестовой производственной среде и запуска оценок, поэтому давайте создадим небольшое приложение, используя нашу подсказку, SDK Anthropic и streamlit для пользовательского интерфейса.
В файле под названием chatbot.py начните с настройки класса ChatBot, который будет инкапсулировать взаимодействия с SDK Anthropic.
Класс должен иметь два основных метода: generate_message и 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")Протестируйте развёртывание этого кода с помощью Streamlit, используя основной метод. Эта функция main() устанавливает интерфейс чата на основе Streamlit.
Мы сделаем это в файле под названием 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)
# Display user and assistant messages skipping the first two
for message in st.session_state.messages[2:]:
# ignore tool use blocks
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()Запустите программу с помощью:
streamlit run app.pyПодсказки часто требуют тестирования и оптимизации, чтобы быть готовыми к производству. Чтобы определить готовность вашего решения, оцените производительность чатбота, используя систематический процесс, сочетающий количественные и качественные методы. Создание сильной эмпирической оценки на основе ваших определённых критериев успеха позволит вам оптимизировать ваши подсказки.
В сложных сценариях может быть полезно рассмотреть дополнительные стратегии для улучшения производительности помимо стандартных методов инженерии подсказок и стратегий реализации ограждений. Вот некоторые распространённые сценарии:
При работе с большими объёмами статического и динамического контекста включение всей информации в подсказку может привести к высоким затратам, более медленному времени ответа и достижению пределов окна контекста. В этом сценарии реализация методов Retrieval Augmented Generation (RAG) может значительно улучшить производительность и эффективность.
Используя модели встраивания, такие как Voyage, для преобразования информации в векторные представления, вы можете создать более масштабируемую и отзывчивую систему. Этот подход позволяет динамически извлекать релевантную информацию на основе текущего запроса, вместо включения всего возможного контекста в каждую подсказку.
Реализация RAG для вариантов использования поддержки рецепт RAG показала увеличение точности, сокращение времени ответа и снижение затрат на API в системах с обширными требованиями к контексту.
При работе с запросами, требующими информации в реальном времени, такой как остатки счётов или детали политики, подходы RAG на основе встраивания недостаточны. Вместо этого вы можете использовать использование инструментов для значительного улучшения способности вашего чатбота предоставлять точные ответы в реальном времени. Например, вы можете использовать использование инструментов для поиска информации о клиентах, извлечения деталей заказов и отмены заказов от имени клиента.
Этот подход, описанный в нашем рецепте использования инструментов: агент обслуживания клиентов, позволяет вам беспрепятственно интегрировать живые данные в ответы Claude и предоставить более персонализированный и эффективный опыт обслуживания клиентов.
При развёртывании чатбота, особенно в сценариях обслуживания клиентов, крайне важно предотвратить риски, связанные с неправильным использованием, запросами вне области действия и неуместными ответами. Хотя Claude по своей природе устойчив к таким сценариям, вот дополнительные шаги для укрепления ограждений вашего чатбота:
При работе с потенциально длинными ответами реализация потоковой передачи может значительно улучшить вовлечённость и удовлетворённость пользователей. В этом сценарии пользователи получают ответ прогрессивно вместо ожидания создания всего ответа.
Вот как реализовать потоковую передачу:
В некоторых случаях потоковая передача позволяет использовать более продвинутые модели с более высокими базовыми задержками, так как прогрессивное отображение смягчает влияние более длительного времени обработки.
По мере усложнения вашего чатбота архитектура вашего приложения может развиваться в соответствии с этим. Перед добавлением дополнительных слоёв в вашу архитектуру рассмотрите следующие менее исчерпывающие варианты:
Если ваш чатбот обрабатывает невероятно разнообразные задачи, вы можете рассмотреть добавление отдельного классификатора намерений для маршрутизации начального запроса клиента. Для существующего приложения это потребует создания дерева решений, которое будет маршрутизировать запросы клиентов через классификатор, а затем к специализированным разговорам (с их собственным набором инструментов и системных подсказок). Обратите внимание, что этот метод требует дополнительного вызова Claude, который может увеличить задержку.
Хотя наши примеры сосредоточены на функциях Python, вызываемых в среде Streamlit, развёртывание Claude для чата поддержки в реальном времени требует API-сервиса.
Вот как вы можете подойти к этому:
Создайте обёртку API: Разработайте простую обёртку API вокруг вашей функции классификации. Например, вы можете использовать Flask API или Fast API для обёртывания вашего кода в HTTP-сервис. Ваш HTTP-сервис может принимать пользовательский ввод и возвращать ответ помощника полностью. Таким образом, ваш сервис может иметь следующие характеристики:
Создайте веб-интерфейс: Реализуйте удобный веб-интерфейс для взаимодействия с агентом на основе Claude.
Генерация предложения
Посетите наш рецепт RAG cookbook для получения дополнительного примера кода и подробного руководства.