Авторизация
Забыли пароль?
Сброс пароля
Вернуться к авторизации

ИИ-ассистент, отвечающий на вопросы пользователей по базе знаний

10 апреля ‘25

Заказчик: NL International

Мы разработали ИИ-ассистента для NL International, который ищет ответы не просто по ключевым словам, а по смыслу. Он понимает суть запроса, даже если формулировка неточная, и находит подходящие статьи из базы знаний компании.

Агентство-исполнитель кейса

Эпоха Восемь (Epoch8)

Epoch8 создаёт ассистентов, которые понимают смысл, а не только текст. Мы внедряем AI-решения, способные отвечать на живые вопросы, находить релевантные ответы и действительно помогать пользователям.

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 позволила автоматизировать поддержку без внедрения сложных систем и переработки инфраструктуры.

Это решение показало, как можно усилить даже простую систему поддержки, если дать ей возможность понимать смысл, а не только слова.

Агентство-исполнитель кейса

Эпоха Восемь (Epoch8)

Epoch8 создаёт ассистентов, которые понимают смысл, а не только текст. Мы внедряем AI-решения, способные отвечать на живые вопросы, находить релевантные ответы и действительно помогать пользователям.