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.
Цели проекта:
Нашей первоначальной попыткой было просто загрузить существующую документацию в исходном формате Markdown и использовать модель llama3 без каких-либо изменений. Результаты, мягко говоря, разочаровали:
Во-первых: наши файлы Markdown содержат различные элементы, такие как теги изображений, сноски, блоки кода, жирное и курсивное форматирование, внутренние и внешние ссылки, значки и даже конструкции « ** » для кнопок. Весь этот дополнительный «шум» создает проблемы при разбиении документации на куски для обработки.
Во-вторых: модель «трансформеры предложений/все-MiniLM-L6-v2», которую OpenWebUI использует по умолчанию для представления предложений и абзацев в 384-мерном векторном пространстве (важна для задач RAG, таких как кластеризация и семантический поиск), в основном обучена на английском языке. . Мы бы хотели, чтобы наш бот со временем стал поддерживать и другие языки.
В-третьих: хотя llama3 является моделью инструкций, ее все равно можно направить на дискуссии не по теме, а не сосредоточиться на ответах на запросы пользователей. Модель 70b может быть более подходящей, но для нее требуется графический процессор с 40 ГБ видеопамяти, тогда как llama3-8b может работать на графическом процессоре всего с 8 ГБ.
Хотя третью проблему потенциально можно решить путем создания собственной модели (агента в терминологии OpenAI), первые две требуют более серьезных обходных решений. Вот что у нас получилось на данный момент.
Сначала мы преобразуем документацию в формат, подходящий для загрузки в нашу систему RAG (Retrival Augmented Generation). Мы создали мощный bash-скрипт под названием ai_text_generator для автоматизации этого процесса.
Сценарий просматривает все каталоги документации и использует регулярные выражения в sed, awk и perl для удаления и замены разметки Markdown, которая не нужна RAG. Наконец, в конце каждого документа добавляется ссылка на исходную документацию, размещенную по адресу https://hostkey.com/documentation .
Этот сценарий тщательно подготавливает вашу документацию для использования с системой RAG в OpenWebUI. Вот пошаговое изложение его действий:
После запуска сценария каталог ai_data будет содержать набор файлов, готовых для загрузки в систему RAG OpenWebUI.
Далее нам нужно добавить в OpenWebUI новую модель для работы с нашей базой данных векторов документов и Ollama LLM. Эта модель должна поддерживать более непринужденный тон «ты» (ты), не только в английском языке. В будущем мы планируем добавить поддержку других языков, например турецкого.
Для начала зайдем в Панель администратора — Настройки — Документы . В поле «Модель внедрения» мы выберем предложение-трансформеры/all-MiniLM-L12-v2 . Мы протестировали все рекомендуемые модели из этого списка (https://www.sbert.net/docs/sentence_transformer/pretrained_models.html) и пришли к выводу, что эта подходит лучше всего.
Мы щелкнем значок загрузки рядом с полем «Внедренная модель» , чтобы загрузить и установить ее.
Сразу настроим параметры 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.
Наконец, мы нажимаем « Сохранить и обновить» , чтобы создать собственную модель чат-бота службы технической поддержки.
И вот оно! Наш чат-бот готов работать и обрабатывать запросы пользователей. Он вежливый, терпеливый и доступен круглосуточно и без выходных.
Вот несколько важных советов, которые следует иметь в виду:
Теперь, когда мы протестировали чат-бота, следующим шагом будет его интеграция в существующую чат-систему нашей компании. OpenWebUI предлагает API и может работать как прокси-сервер для Ollama, добавляя свои уникальные функции. Однако документация по-прежнему отсутствует, что затрудняет интеграцию.
Изучая код и историю коммитов, мы получили некоторое представление о том, как структурировать запросы API, но пока это работает не совсем так, как ожидалось. Нам удалось вызвать кастомную модель, но без функционала RAG.
Мы с нетерпением ждем обещанных разработчиками функций в будущих выпусках, включая RAG, веб-поиск, а также подробные примеры и описания.
В процессе тестирования также были выявлены некоторые несоответствия и дублирования в нашей документации. Это дает возможность как повысить производительность чат-бота, так и улучшить общую ясность и точность нашей документации.
Арендуйте GPU-серверы с мгновенным развертыванием или сервер с индивидуальной конфигурацией с картами NVIDIA Tesla A100/H100 80Gb или A5000/A4000 профессионального уровня. Также доступны графические серверы с игровыми картами RTX4090.