Вот несколько ключевых признаков того, что вам стоит использовать «large language model» (большую языковую модель), или LLM, такую как Claude, для автоматизации части процесса поддержки клиентов:
Некоторые соображения в пользу выбора Claude по сравнению с другими LLM:
Опишите идеальное взаимодействие с клиентом, чтобы определить, как и когда клиент должен взаимодействовать с Claude. Этот план поможет определить технические требования к вашему решению.
Вот пример взаимодействия в чате для поддержки клиентов по автострахованию:
Чат поддержки клиентов — это набор множества различных задач, от ответов на вопросы до извлечения информации и выполнения действий по запросам, объединённых в единое взаимодействие с клиентом. Прежде чем начать разработку, разбейте идеальное взаимодействие с клиентом на все задачи, которые Claude должен уметь выполнять. Это гарантирует, что вы сможете составить подсказку и оценить Claude для каждой задачи, а также даст вам хорошее представление о диапазоне взаимодействий, которые нужно учесть при написании тестовых случаев.
Вот ключевые задачи, связанные с приведённым выше примером взаимодействия по страхованию:
Приветствие и общие указания
Информация о продукте
Управление разговором
Генерация расчёта
Совместно с вашей командой поддержки определите критерии успеха и напишите подробные оценки с измеримыми контрольными показателями и целями.
Вот критерии и контрольные показатели, которые можно использовать для оценки того, насколько успешно Claude выполняет определённые задачи:
Вот критерии и контрольные показатели, которые можно использовать для оценки влияния использования Claude для поддержки на бизнес:
Выбор модели зависит от компромиссов между стоимостью, точностью и временем отклика.
Для чата поддержки клиентов Claude Opus 4.8 хорошо подходит для баланса между интеллектом, задержкой и стоимостью. Однако в случаях, когда у вас есть поток разговора с несколькими подсказками, включая 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"""
# Вы можете вызвать HTTP-эндпоинт или обратиться к базе данных, чтобы получить котировку.
# Здесь мы имитируем задержку в 1 секунду и возвращаем фиксированную котировку 100.
time.sleep(1)
return 100Трудно понять, насколько хорошо работает ваша подсказка, не развернув её в тестовой производственной среде и не запустив оценки, поэтому давайте создадим небольшое приложение, используя подсказку, Anthropic SDK и streamlit для пользовательского интерфейса.
В файле с именем chatbot.py начните с настройки класса ChatBot, который будет инкапсулировать взаимодействия с Anthropic SDK.
Класс должен иметь два основных метода: 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. Эта функция 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)
# Показать сообщения пользователя и ассистента, пропуская первые два
for message in st.session_state.messages[2:]:
# игнорировать блоки использования инструментов
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 из книги рецептов для получения дополнительных примеров кода и подробных указаний.
Изучите рецепт по цитированию из книги рецептов, чтобы узнать, как обеспечить точность и объяснимость информации.
Was this page helpful?