Команда: Заходит как-то улитка в бар...
Мультиагентная система на базе языковых моделей, которая в реальном времени помогает оператору контакт-центра обрабатывать клиентские запросы.
- Архитектура всего приложения
- Роль каждого компонента системы
- Агенты
- Задания ИИ агентов
- CRM | Оценка операторов (Quality assurance & Summary)
- Запуск
- API
flowchart TD
User[<img src='https://www.svgrepo.com/show/525577/user-circle.svg' width='40' height='40' />]
Nginx[<img src='https://www.logo.wine/a/logo/Nginx/Nginx-Logo.wine.svg' width='40' height='40' />]
Back[<img src='https://icon.icepanel.io/Technology/svg/Go.svg' width='40' height='40' />]
React[<img src='https://cdn.worldvectorlogo.com/logos/react-1.svg' width='40' height='40' />]
Redis[<img src='https://upload.wikimedia.org/wikipedia/commons/6/64/Logo-redis.svg' width='40' height='40' />]
AIAgents[<img src='https://www.svgrepo.com/show/376344/python.svg' width='40' height='40' />]
Qdrant[<img src='https://qdrant.tech/img/brand-resources-logos/logo.svg' width='40' height='40' />]
User --> Nginx
Nginx --> User
Nginx --> Back
Back --> Nginx
Back --> Redis
Redis --> Back
Redis --> AIAgents
AIAgents --> Redis
AIAgents --> API[MWS GPT API]
API --> AIAgents
AIAgents --> Qdrant
Qdrant --> AIAgents
Nginx --> React
React -->|static files| Nginx
- Nginx балансировщик и хост статических файлов фронтенда. Также позволяет масштабировать систему в ширину.
- Frontend - интерфейс, написанный на React. Позволяет взаимодействовать с системой и получать подсказки от агентов.
- Messenger Backend - бэкенд на Go, который отвечает за взаимодействие с фронтендом и Redis. Есть возможность создать сколько угодно реплик этого сервиса.
- Redis - кэш и очередь сообщений. Используется для хранения запросов на обработку от пользователей.
- AI Agents - сервис на Python, который обрабатывает запросы от пользователей, аркестрирует ИИ агентов и выполняет поиск в векторной базе данных.
- Qdrant - векторная база данных, которая хранит векторные представления документов и позволяет быстро находить нужные данные по запросу.
- MWS GPT API - API, который позволяет взаимодействовать с LLM. Используется для генерации ответов на запросы пользователей и агентов.
Агент, определяющий намерение пользователя. Он анализирует текстовые сообщения и определяет, с какой проблемой пользователь обращается в поддержку.
Этот агент отвечает за предоставление релевантной информации пользователю. В его распоряжении находится инструмент для обращения в векторную базу данных, чтобы подобрать наиболее подходящую информацию из справки.
Данный агент анализирует сообщения пользователя и определяет его эмоциональное состояние. Он помогает подобрать правильный подход к пользователю, чтобы улучшить качество обслуживания.
Агент, который помогает оператору сформировать ответ на сообщения пользователя. Он использует информацию от Intent, Knowledge и Emotion агентов, чтобы предложить оператору наиболее подходящий ответ.
Данный агент отвечает за создание резюме диалога. Он анализирует сообщения диалога и работу предыдущих агентов, формируя краткое содержание, которое потом передается в CRM.
Этот агент отвечает за контроль качества работы операторов. Он анализирует сообщения оператора и пользователя, а также контекст от прошлых агентов, чтобы определить как оператор справляется с задачей.
📓 Здесь вы можете посмотреть некоторые наши эксперименты по усовершенствованию агентов.
Ниже можно увидеть как выглядит схема контекстов взаимодействия между заданиями для агентов.
flowchart TD
IntentTask --> ActionSuggestionTask
EmotionTask --> ActionSuggestionTask
KnowledgeTask --> ActionSuggestionTask
flowchart TD
IntentTask --> SummaryTask
EmotionTask --> SummaryTask
KnowledgeTask --> SummaryTask
flowchart TD
IntentTask --> QualityAssuranceTask
EmotionTask --> QualityAssuranceTask
KnowledgeTask --> QualityAssuranceTask
💡 ActionSuggestionCrew это группа агентов, которые помогают оператору отвечать пользователю в чате. Чтобы сформировать подходящий ответ, используется информация об эмоции, намерении и знаниях из справки.
📊 SummaryCrew это группа агентов, которая формирует резюме диалога ("issue_type", "client_sentiment", "resolution") и отправляет его в CRM. Для этого используются намерение, эмоция и знания из справки.
📈 QualityAssuranceCrew анализирует работу операторов и предлагает улучшения, делает выводы на основе намерения и настроения пользователя, а также данных из базы знаний. Результаты выполнения отправляется в CRM.
Поскольку не было предоставлено внешней CRM-системы, мы эмулируем вывод в подобную систему, записывая информацию в файл. Эту информацию в некоторых ситуациях не стоит предоставлять операторам поддержки, поэтому мы не сделали её вывод в пользовательском интерфейсе.
Для просмотра данных необходимо обратиться к Docker контейнеру с помощью приведённой ниже команды:
docker exec -it zadacha-168-ai_helper-1 cat crm_report.csv
Для начала необходимо создать файл .env в корневой папке проекта (рядом с .env.template). Там необходимо обязательно указать MWS_API_KEY.
Остальные переменные окружения:
TEXT_MODELназвание модели для генерации/обработки текстаMWS_BASE_URLБазовый URL API внешнего сервисаVERBOSEРежим детального логирования (true/false) для ИИ агентовQDRANT_URLАдрес векторной базы данных QdrantOTEL_SDK_DISABLEDОтключает телеметрию CrewAI при значенииtrueREDIS_HOSTАдрес Redis-сервера (например, имя контейнера или IP)REDIS_PORTПорт для подключения к RedisREDIS_HOST_PASSWORDПароль для доступа к RedisREDIS_QUEUE_NAMEНазвание очереди задач в Redis
Для запуска вам понадобится docker, инструкция по установке тут
docker compose upДля взаимодействия с системой используется REST API. Ниже приведены основные эндпоинты:
Описание: Получить список всех чатов.
{
"chats": [
{
"chatId": "string",
"message": "string",
"resolution": "string | null",
"intent": "string",
"emotion": "string",
"datetime": "2011-10-05T14:48:00.000Z"
}
]
}Описание: Получить переписку по chatId.
{
"messages": [
{
"messageId": "string",
"chatId": "string",
"role": "string",
"message": "string",
"datetime": "2011-10-05T14:48:00.000Z"
}
]
}Описание: Получить AI-ответ по chatId.
{
"message": "string"
}Описание: Получить CRM-отчет по chatId.
{
"chatId": "string"
}{
"issue_type": "string",
"client_sentiment": "string",
"resolution": "string",
"summary": "string"
}Описание: Получить все CRM-отчеты.
[
{
"issue_type": "string",
"client_sentiment": "string",
"resolution": "string",
"summary": "string"
}
]Описание: Получить список всех чатов.
{
"firstMessage": "string"
}{
"chatId": "string"
}Описание: Отправить новое сообщение в существующий чат.
{
"chatId": "string",
"role": "string",
"message": "string",
"dateTime": "2011-10-05T14:48:00.000Z"
}{
"messageId": "string"
}Описание: Завершить чат.
{
"chatId": "string"
}