
Авторизация

Сброс пароля
ИИ-ассистент, отвечающий на вопросы пользователей по базе знаний
Заказчик: NL International

Мы разработали ИИ-ассистента для NL International, который ищет ответы не просто по ключевым словам, а по смыслу. Он понимает суть запроса, даже если формулировка неточная, и находит подходящие статьи из базы знаний компании.
1. Вводная задача от заказчика, проблематика, цели
Компания NL International обратилась к нам с запросом на создание виртуального помощника, который сможет оперативно отвечать на вопросы клиентов и партнёров, используя внутреннюю базу знаний.
Обычные боты, основанные на ключевых словах, не учитывали контекст и часто не находили нужные статьи, если пользователь формулировал вопрос иначе, чем в базе знаний.
Команде требовался ассистент, способный «читать между строк»: понимать суть запроса, извлекать релевантные ответы даже при неточных формулировках и подбирать нужные статьи из базы знаний на основе смысла, а не просто ключевых слов.
Например, пользователь спрашивает: «Я набрал 3 кг за праздничный сезон. Как мне от них избавиться?»
В этом случае ИИ-ассистент обращается к базе знаний FAQ и находит статью с заголовком «Как похудеть».


2. Описание реализации кейса и творческого пути по поиску оптимального решения
1. Контент: Подготовка базы знаний
Мы любим использовать Chatwoot в наших проектах. Обычно мы используем его для интерфейса оператора, когда чат-бот переключается на человека. Но кроме интерфейса оператора, у Chatwoot есть удобная функция базы знаний.
В базу знаний Chatwoot добавили следующую функцию: к каждой статье из раздела FAQ добавили примеры реальных пользовательских вопросов, с которых обычно начинается поиск ответа.
2. Программирование: Преобразование всех статей из базы знаний в векторный вид
Мы будем искать статьи, которые отвечают на вопрос пользователя по семантическому сходству между текстами. Для этого мы сначала преобразуем тексты в векторный вид, а затем вычисляем расстояние между векторами. Чем меньше расстояние, тем ближе содержание статей.
Для хранения векторного представления статей мы используем векторную базу данных Qdrant. Qdrant оптимизирован для операций с векторами, что позволяет быстро находить схожие вектора.
Чтобы преобразовать текст статьи в вектор и записать его в Qdrant, нам нужно решить две задачи:
- Документы должны быть сегментированы так, чтобы каждый вектор соответствовал одной логической теме. Это важно, потому что чем больше текста кодируется, тем более средним и нечетким становится полученный вектор. Соответственно, становится сложнее определить какую-либо тему в нем. Поэтому важно изначально сегментировать документ на части, и здесь нет универсального решения. Обычно сегментация выполняется с использованием некоторых структурных эвристик (главы или абзацы), затем уточняется моделями для предсказания следующего предложения (NSP), например. И в конечном итоге проверяется человеком. В контексте FAQ этот шаг не понадобился, так как у нас были только короткие ответы. Тем не менее, для обогащения поля поиска мы сгенерировали человекоподобные вопросы к ответам, а для вопросов (если таковые имелись) создали синтетическое «изображение ответа». Все это затем преобразуется в вектор и добавляется в примеры для целевой статьи.
- Нам нужно выбрать эффективный метод генерации векторов. Мы использовали кодировщик от OpenAI или multilingual-e5 модель. Обе они эффективны благодаря их обучению на параллельных корпусах текстов на нескольких языках.
3. Программирование: настройка сервиса FAQ
Сам сервис FAQ реализует простой API. API получает запрос пользователя, преобразует его в вектор и выполняет векторный поиск в Qdrant. Возвращает самые релевантные вектора вместе с заголовками и текстами статей.
4. Программирование: настройка чат-бот ассистента
Нам нужен чат-бот, чтобы получать вопросы от пользователей и отправлять ответы.
Для создания базового чат-бота мы используем Rasa, фреймворк с открытым исходным кодом, и Botfront, визуальный интерфейс.
Когда пользователь пишет чат-боту, RASA пытается определить интент в запросе пользователя. Если интент пользователя — задать FAQ-вопрос, RASA перенаправляет запрос в сервис FAQ.
А сервис FAQ возвращает список связанных статей.
5. Опционально: ответы в свободной форме с помощью LLM (используя RAG, Retrieval-augmented Generation)
Когда мы извлекли наиболее релевантные статьи из базы знаний, мы можем попросить LLM прочесть извлеченные статьи и сгенерировать точный ответ на вопрос пользователя.
У этого подхода есть серьезный недостаток: лучшие LLM, такие как GPT-4, довольно дорогие, и если у вас большое количество запросов на поддержку, использование LLM может обойтись в крупную сумму.
У нашего клиента был ровно этот случай, поэтому мы отключили генерацию ответов, оставив только ответы списком статей из базы знаний. Такой подход не используют дорогие LLM для каждого запроса.
6. Программирование: обеспечение актуальности всего
У нас есть регулярные задачи, которые мы должны выполнять, чтобы все данные оставались актуальными.
Мы должны обновлять векторное представление статей в Qdrant, если появляются новые статьи или меняются старые. Для этого мы используем ETL-фреймворк Datapipe, который автоматически отслеживает обновления, удаления и добавления контента. Мы запускаем процесс ETL каждые 15 минут. И если какое-либо содержимое в базе знаний меняется, Datapipe фиксирует изменения и пересчитывает вектора в Qdrant. Таким образом, новая информация становится доступной чат-боту через 15 минут после добавления в базу знаний.
Мы должны убедиться, что RASA правильно идентифицирует интент FAQ. Когда чат-бот переобучается, RASA фиксирует максимально разнообразный набор данных для охвата всего поля поиска с минимальным количеством примеров и добавляет в обучение.



3. Результаты сотрудничества
В результате проекта у нас есть форк Chatwoot, который поддерживает работу ИИ-ассистента на основе базы знаний Chatwoot «из коробки», без дополнительной разработки.
Если вы используете на своих проектах Chatwoot, особенно без чат-бот-автоматизации, возможно, стоит перейти на наш форк Chatwoot, чтобы включить функциональность ИИ-ассистента.
После внедрения доля обращений, обрабатываемых ботом, выросла с 30% до 70%. Команда контента продолжает расширять базу знаний, чтобы чат-бот мог обрабатывать всё больше и больше запросов.

4. Заключение
Интеграция ИИ-ассистента с базой знаний в Chatwoot позволила автоматизировать поддержку без внедрения сложных систем и переработки инфраструктуры.
Это решение показало, как можно усилить даже простую систему поддержки, если дать ей возможность понимать смысл, а не только слова.