Задача
Проект ставил перед собой задачу обработки различных текстовых запросов пользователей в свободной форме.
Обычно такие запросы включали информацию о планах пользователя для конкретного города и периода времени, а также указывали, какие действия они собираются предпринять и в какой помощи нуждаются.
Необходимо было сопоставить каждый запрос с услугами, предлагаемыми путеводителями, представленными на портале.
Система должна была определить доступность путеводителей в момент визита пользователя и отправить результаты по электронной почте.
Ранее этот процесс выполнялся вручную, но для его автоматизации требовался искусственный интеллект.
Решение
Наша команда предприняла следующие шаги:
- Сбор требований: Мы собрали все необходимые требования и образцы пользовательских запросов.
- Подготовка базы данных: Мы разработали базу данных, чтобы создать список услуг для каждого путеводителя в каждом городе.
- Создание прототипа: Мы разработали RAG-приложение, чтобы показать, как происходит извлечение ключевых данных и поиск свободных путеводителей по городам.
- Оценка бюджета: Мы проанализировали бюджет, чтобы выбрать наиболее подходящую модель LLM для решения задачи.
- Тестирование и запуск: Мы протестировали решение и запустили его в эксплуатацию.
Обзор решения
Ключевая особенность нашего решения заключается в извлечении необходимых данных из пользовательских запросов и нахождении соответствующих профилей путеводителей по городам с помощью векторного поиска и текстовых вложений.
Все профили путеводителей изначально встраиваются и сохраняются в базе данных, которая также отслеживает их доступность на определенные периоды. Если профиль изменяется, он обновляется и сохраняется заново.
Зарегистрированные пользователи отправляют запросы через специальную форму, однако большинство из них не заполняют поля с периодом и городом, а указывают все данные в текстовом поле. Поэтому LLM извлекает из запросов следующие данные:
- Дата начала путешествия
- Дата окончания путешествия
- Страна и город
- Список необходимых услуг
LLM эффективно обобщает информацию. Поэтому даже если пользователь не укажет страну или напишет «1 неделя» вместо точной даты окончания путешествия, ИИ всё равно сможет рассчитать правильные даты.
Список услуг векторизуется с помощью текстового вложения (модель OpenAI text-embedding-ada-002).
Поиск в базе данных осуществляется на основе этого вектора, а также периода и города, используя плагин pgvector и SQL-запросы.
В результате создается список доступных путеводителей, который сортируется по вероятности соответствия указанным критериям услуг.
Топ-3 совпадения включаются в электронное письмо пользователю. Если подходящих путеводителей не найдено или LLM не удается извлечь данные, запрос помечается для проверки вручную, что позволяет выявить проблемы и собрать информацию для улучшения работы LLM.
В итоге пользователь получает электронное письмо с тремя наиболее подходящими путеводителями, прямыми ссылками на их профили и кнопкой для бронирования услуги.
Ключевые особенности
- Разработка решений на основе LLM для умного поиска и обработки запросов.
- Приложение RAG для использования профилей путеводителей в качестве базы знаний.
- Участие только зарегистрированных пользователей, что исключает случайное потребление токенов LLM.
- Поддержка проверки вручную в случае, если ИИ не может извлечь ключевые данные из запросов или если в городе не найдено доступных путеводителей.
Результат
Благодаря внедрению умных запросов система сопоставления автоматизировала примерно 89% ручной работы на платформе.
Это позволило значительно ускорить обработку запросов пользователей, сократив время отклика до 3 минут, при этом сохраняя высокий уровень качества обслуживания.