paint-brush
Давайте создадим чат-бота поддержки клиентов, используя RAG и документацию вашей компании в OpenWebUI.к@hostkey
1,648 чтения
1,648 чтения

Давайте создадим чат-бота поддержки клиентов, используя RAG и документацию вашей компании в OpenWebUI.

к Hostkey.com8m2024/07/09
Read on Terminal Reader

Слишком долго; Читать

OpenWebUI предлагает уникальную возможность создавать увлекательных и полезных чат-ботов даже без обширного опыта программирования. В этой статье мы поделимся своим опытом создания чат-бота технической поддержки, призванного помогать нашей команде, отвечая на вопросы пользователей. Вот пошаговое изложение его действий.
featured image - Давайте создадим чат-бота поддержки клиентов, используя RAG и документацию вашей компании в OpenWebUI.
Hostkey.com HackerNoon profile picture
0-item

OpenWebUI — это комплексная медиа-платформа, включающая набор инструментов искусственного интеллекта: OpenAI, Ollama, Automatic1111, ComfyUI, Whisper API, обучение настраиваемых моделей, RAG на основе Langchain с ChromaDB, гибридный BM25/веб-поиск и многое другое.


Несмотря на то, что все это уже некоторое время доступно, задокументировано и реализуемо при наличии знаний в области программирования на Python, OpenWebUI предлагает уникальную возможность создавать увлекательные и полезные чат-боты даже без обширного опыта программирования.


В этой статье мы поделимся своим опытом создания чат-бота технической поддержки, предназначенного для помощи нашей команде, отвечая на вопросы пользователей (и, в конечном итоге, становясь частью нашей команды).


Арендуйте GPU-серверы с мгновенным развертыванием или сервер с индивидуальной конфигурацией с картами NVIDIA Tesla A100/H100 80Gb или A5000/A4000 профессионального уровня. Также доступны графические серверы с игровыми картами RTX4090.


Отправная точка

У нас есть пользовательская документация, созданная с использованием Material for MkDocs. В результате получается структура каталогов, содержащая файлы .md в формате Markdown. У нас также есть развернутая установка OpenWebUI и Ollama с загруженной моделью инструкций llama3-8b.


Цели проекта:


  1. Разработайте собственного чат-бота. Этот чат-бот будет взаимодействовать с пользователями и предоставлять информацию на основе нашей документации.
  2. Преобразование документации в формат, подходящий для LLM. Нам необходимо преобразовать нашу документацию Markdown в формат, который может быть эффективно обработан LLM для поисковой дополненной генерации (RAG).
  3. Включить обновление и дополнение данных. Система должна позволять постоянные обновления и дополнения к базе данных векторов, содержащей нашу документацию.
  4. Сосредоточьтесь на ответах на вопросы: чат-бот должен в первую очередь функционировать как система ответов на вопросы и избегать участия в разговорах, не связанных с ИТ.
  5. Предоставьте ссылки на источники: по возможности чат-бот должен ссылаться на исходные источники документации для предоставленной информации.
  6. Внедрить фильтрацию вопросов: нам нужна возможность настраивать ограничения вопросов для чат-бота. Например, мы можем захотеть запретить ему отвечать на вопросы, основанные на географическом местоположении.

Наивная реализация

Нашей первоначальной попыткой было просто загрузить существующую документацию в исходном формате Markdown и использовать модель llama3 без каких-либо изменений. Результаты, мягко говоря, разочаровали:


Во-первых: наши файлы Markdown содержат различные элементы, такие как теги изображений, сноски, блоки кода, жирное и курсивное форматирование, внутренние и внешние ссылки, значки и даже конструкции « ** » для кнопок. Весь этот дополнительный «шум» создает проблемы при разбиении документации на куски для обработки.


Во-вторых: модель «трансформеры предложений/все-MiniLM-L6-v2», которую OpenWebUI использует по умолчанию для представления предложений и абзацев в 384-мерном векторном пространстве (важна для задач RAG, таких как кластеризация и семантический поиск), в основном обучена на английском языке. . Мы бы хотели, чтобы наш бот со временем стал поддерживать и другие языки.


В-третьих: хотя llama3 является моделью инструкций, ее все равно можно направить на дискуссии не по теме, а не сосредоточиться на ответах на запросы пользователей. Модель 70b может быть более подходящей, но для нее требуется графический процессор с 40 ГБ видеопамяти, тогда как llama3-8b может работать на графическом процессоре всего с 8 ГБ.

Хотя третью проблему потенциально можно решить путем создания собственной модели (агента в терминологии OpenAI), первые две требуют более серьезных обходных решений. Вот что у нас получилось на данный момент.

Шаг за шагом: настройка чат-бота технической поддержки в OpenWebUI

Сначала мы преобразуем документацию в формат, подходящий для загрузки в нашу систему RAG (Retrival Augmented Generation). Мы создали мощный bash-скрипт под названием ai_text_generator для автоматизации этого процесса.


Сценарий просматривает все каталоги документации и использует регулярные выражения в sed, awk и perl для удаления и замены разметки Markdown, которая не нужна RAG. Наконец, в конце каждого документа добавляется ссылка на исходную документацию, размещенную по адресу https://hostkey.com/documentation .



Этот сценарий тщательно подготавливает вашу документацию для использования с системой RAG в OpenWebUI. Вот пошаговое изложение его действий:


  • Генерация URL-адресов: генерирует полный URL-адрес для каждого файла документации.
  • Удаление разметки изображения: удаляет всю разметку Markdown, связанную с изображениями.
  • Удаление аннотаций: удаляет все аннотации из текста. Форматирование кнопок: преобразует синтаксис ** и ** Markdown в [ ], эффективно форматируя их как кнопки.
  • Удаление заголовка: удаляет строки, начинающиеся с «>», которые, вероятно, используются для создания структуры или оглавления.
  • Удаление значков: удаляет любую разметку Markdown или код, представляющий значки.
  • Форматирование полужирного текста: удаляет полужирное форматирование текста Markdown.
  • Модификация ссылок: удаляет внутренние ссылки, сохраняя внешние ссылки.
  • Форматирование ссылок электронной почты: переформатирует ссылки на адреса электронной почты.
  • Нормализация пробелов: удаляет лишние пробелы в начале каждой строки до первого символа.
  • Преобразование окончания строки: преобразует CRLF (окончание строки Windows) в формат UNIX (LF).
  • Уменьшение пустых строк: удаляет последовательные пустые строки, превышающие одну.
  • Добавление URL-адреса: добавляет сгенерированный URL-адрес в конец каждого обработанного файла.


После запуска сценария каталог ai_data будет содержать набор файлов, готовых для загрузки в систему RAG OpenWebUI.



Далее нам нужно добавить в OpenWebUI новую модель для работы с нашей базой данных векторов документов и Ollama LLM. Эта модель должна поддерживать более непринужденный тон «ты» (ты), не только в английском языке. В будущем мы планируем добавить поддержку других языков, например турецкого.


  1. Для начала зайдем в Панель администратора — Настройки — Документы . В поле «Модель внедрения» мы выберем предложение-трансформеры/all-MiniLM-L12-v2 . Мы протестировали все рекомендуемые модели из этого списка (https://www.sbert.net/docs/sentence_transformer/pretrained_models.html) и пришли к выводу, что эта подходит лучше всего.

  2. Мы щелкнем значок загрузки рядом с полем «Внедренная модель» , чтобы загрузить и установить ее.

  3. Сразу настроим параметры RAG:

    • Top K = 10: это означает, что при формировании ответа система будет учитывать 10 наиболее релевантных документов.

    • Размер фрагмента = 1024: для обработки документы будут разбиты на фрагменты по 1024 токена.

    • Перекрытие блоков = 100: между последовательными фрагментами будет перекрытие в 100 токенов.



После этого вы можете перейти в раздел «Рабочая область — Документы» и загрузить нашу документацию. Рекомендуется присвоить ему определенный тег коллекции (в нашем случае, hostkey_en), чтобы упростить подключение к модели или запросам API в дальнейшем.



Далее мы создадим собственную модель для нашего чат-бота. Для этого вернемся в «Рабочая область» — «Модели» и щелкните значок «плюс».


Дадим нашему чат-боту имя и выберем базовую модель (в нашем случае llama3-latest).


Затем мы определим системную подсказку. Это то, что говорит чат-боту, как себя видеть и вести себя. В нем описываются его роль, ограничения и желаемые результаты.


Вот системная подсказка, которую мы разработали для нашего чат-бота службы технической поддержки:


You are HOSTKEY an IT Support Assistant Bot, focused on providing users with IT support based on the content from knowledge base. Stay in character and maintain your focus on IT support, avoiding unrelated activities such as creative writing or engaging in non-IT discussions.


If you cannot find relevant information in the knowledge base or if the user asks non-related questions that are not part of the knowledge base, do not attempt to answer and inform the user that you are unable to assist and print text "Visit https://hostkey.com/documentation for more information" at the end.


Provide short step-by-step instructions and external links


Provide a link to relevant doc page about user question started with 'See more information here:'Add text "Visit https://hostkey.com/documentation for more information" at the end.


Example of answer: " User: How can I cancel my server?


Bot:


You can cancel your server at any time. To do this, you need to access the Invapi control panel and follow these steps:

- Go to the "Billing" tab in the specific server management menu.

- Click the [Cancel service] button.

- Describe the reason for the cancellation and select its type.

- Click the [Confirm termination] button.


Please note that for immediate cancellation, we will not refund the hours of actual server usage, including the time to provision the server itself, order software, and process the cancellation request (up to 12 hours). The unused balance will be returned to your credit balance. Withdrawal of funds from the credit balance will be made in accordance with our refund policy.


You can cancel the service cancellation request in the Billing tab using the [Revoke] button.

Additionally, if you need to cancel a service that includes an OS/software license or has a customized/non-standard configuration, please contact us via a ticketing system for manual refund processing.


See more information here: https://hostkey.com/documentation/billing/services_cancellation/ "


Далее подключим необходимый сборник документов. В разделе «Знания» нажмем кнопку «Выбрать документы» и выберем нужную нам коллекцию по ее тегу.


Арендуйте GPU-серверы с мгновенным развертыванием или сервер с индивидуальной конфигурацией с картами NVIDIA Tesla A100/H100 80Gb или A5000/A4000 профессионального уровня. Также доступны графические серверы с игровыми картами RTX4090.



Нам также необходимо настроить некоторые дополнительные параметры, скрытые на вкладке «Дополнительные параметры» . Нажатие кнопки «Показать» покажет эти настройки. Мы установим температуру 0,3 и длину контекста 4089.



Наконец, мы нажимаем « Сохранить и обновить» , чтобы создать собственную модель чат-бота службы технической поддержки.


И вот оно! Наш чат-бот готов работать и обрабатывать запросы пользователей. Он вежливый, терпеливый и доступен круглосуточно и без выходных.

Советы по работе с RAG в OpenWebUI

Вот несколько важных советов, которые следует иметь в виду:

  1. Если вы работаете с большим количеством документов в RAG, настоятельно рекомендуется установить OpenWebUI с поддержкой GPU (ветка open-webui:cuda).
  2. Любые изменения модели внедрения (переключение, загрузка и т. д.) потребуют от вас повторной индексации ваших документов в векторной базе данных. Изменение параметров RAG не требует этого.
  3. При добавлении или удалении документов всегда заходите в свою пользовательскую модель, удаляйте коллекцию этих документов и добавляйте их обратно. В противном случае ваш поиск может работать неправильно или будет значительно менее эффективным. Если ваш бот дает неправильные ответы, но документация с необходимой информацией появляется в списке внизу, скорее всего, проблема в этом.
  4. Хотя OpenWebUI распознает различные форматы для создания RAG (pdf, csv, rst, xml, md, epub, doc, docx, xls, xlsx, ppt, ppt, txt), для оптимальной производительности рекомендуется загружать документы в виде обычного текста.
  5. Хотя гибридный поиск может улучшить результаты, он ресурсоемок и может значительно увеличить время отклика (20–30–40 секунд и более) даже на мощном графическом процессоре. Это известная проблема, над решением которой работают разработчики.



Теперь, когда мы протестировали чат-бота, следующим шагом будет его интеграция в существующую чат-систему нашей компании. OpenWebUI предлагает API и может работать как прокси-сервер для Ollama, добавляя свои уникальные функции. Однако документация по-прежнему отсутствует, что затрудняет интеграцию.


Изучая код и историю коммитов, мы получили некоторое представление о том, как структурировать запросы API, но пока это работает не совсем так, как ожидалось. Нам удалось вызвать кастомную модель, но без функционала RAG.

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


В процессе тестирования также были выявлены некоторые несоответствия и дублирования в нашей документации. Это дает возможность как повысить производительность чат-бота, так и улучшить общую ясность и точность нашей документации.


Арендуйте GPU-серверы с мгновенным развертыванием или сервер с индивидуальной конфигурацией с картами NVIDIA Tesla A100/H100 80Gb или A5000/A4000 профессионального уровня. Также доступны графические серверы с игровыми картами RTX4090.