2024-07-02
ПРАКТИЧЕСКИЙ ОПЫТ.
Если вы следите за внедрением искусственного интеллекта на предприятиях, вы, несомненно, слышали термин «RAG».
Эта технология, сокращенно обозначающая технологию дополненной генерации, была провозглашена всеми, от Дженсена Хуанга из Nvidia до главного спасителя Intel Пэта Гелсингера, как технология, которая сделает модели ИИ достаточно полезными, чтобы оправдать инвестиции в относительно дорогие графические процессоры и ускорители.
Идея RAG проста: вместо того чтобы полагаться на модель, предварительно обученную на ограниченном объеме общедоступной информации, вы можете воспользоваться способностью LLM анализировать человеческий язык для интерпретации и преобразования информации, хранящейся во внешней базе данных.
Что особенно важно, эту базу данных можно обновлять независимо от модели, что позволяет вам улучшать или обновлять ваше приложение на основе LLM без необходимости переобучения или тонкой настройки модели каждый раз при добавлении новой информации или удалении старых данных.
Но прежде чем мы продемонстрируем, как можно использовать RAG для повышения полезности и возможностей предварительно обученных LLM, таких как Llama3 или Mistral, давайте немного подробнее поговорим о том, как они работают.
На очень высоком уровне RAG использует модель встраивания для преобразования подсказки пользователя в числовой формат. Это так называемое встраивание затем сопоставляется с информацией, хранящейся в векторной базе данных. Эта база данных может содержать всевозможную информацию, например, внутренние процессы, процедуры или документы поддержки компании. Если совпадение найдено, подсказка и соответствующая информация затем передаются в большую языковую модель (LLM), которая использует их для генерации ответа.
По сути, это делает вывод LLM гораздо более сфокусированным на конкретном контексте данной базы данных, в отличие от того, чтобы модель полагалась исключительно на то, чему она научилась во время своего общего обучения. Это должно, в идеале, привести к более релевантным и точным ответам, делая все это более полезным.
Но главный вывод заключается в том, что RAG позволяет предварительно обученным LLM генерировать ответы, выходящие за рамки их обучающих данных.
Существует несколько способов дополнения предварительно обученных моделей с помощью RAG в зависимости от вашего варианта использования и конечной цели. Не каждое приложение ИИ должно быть чат-ботом. Однако в целях этого руководства мы рассмотрим, как можно использовать RAG для превращения готового LLM в персонального помощника ИИ, способного просматривать наши внутренние документы поддержки и искать в Интернете.
Для этого мы будем использовать комбинацию инструмента Ollama LLM runner, и проекта Open WebUI.
Как следует из названия, Open WebUI — это самостоятельный веб-графический интерфейс для взаимодействия с различными LLM-работами, такими как Ollama, или любым количеством совместимых с OpenAI API. Его также можно развернуть как контейнер Docker, что означает, что он должен нормально работать на любой системе, поддерживающей эту популярную среду выполнения контейнера.
Что еще более важно для наших целей, Open WebUI — одна из самых простых платформ для демонстрации RAG на таких LLM, как Mistral, Llama3 от Meta, Gemma от Google или на любой другой предпочитаемой вами модели.
Предпосылки
Самый простой способ запустить Open WebUI на вашей машине — использовать Docker. Это позволяет избежать необходимости разбираться с широким спектром зависимостей, необходимых для разных систем, поэтому мы можем приступить к работе немного быстрее.
Если на вашей системе установлен Docker Engine или Desktop (для тестирования мы используем Ubuntu Linux 24.04, но Windows и macOS также должны работать), вы можете развернуть новый контейнер Open WebUI, выполнив следующую команду:
docker run -d —network=host -v open-webui:/app/backend/data -e OLLAMA_BASE_URL=http://127.0.0.1:11434 —name open-webui —restart always ghcr.io/open-webui/open-webui:main
В зависимости от вашей системы вам может потребоваться запустить эту команду с повышенными привилегиями. Для Linux box вы можете использовать sudo docker runили в некоторых случаях doas docker run.
Если вы планируете использовать Open-WebUI в открытой для публики производственной среде, мы рекомендуем вам более подробно ознакомиться с документацией по развертыванию проекта здесь , поскольку вы можете захотеть развернуть как Ollama, так и Open-WebUI в качестве контейнеров. Однако для этого потребуется передать ваш GPU в контейнер Docker, что выходит за рамки этого руководства.
Примечание: пользователям Windows и macOS необходимо включить сетевое взаимодействие на вкладке «Функции в разработке» на панели настроек Docker Desktop.
Пользователям Mac и Windows необходимо включить сетевое подключение хоста в Docker Desktop перед запуском контейнера Open-WebUI
Примерно через минуту контейнер должен запуститься, и вы сможете получить доступ к панели управления, посетив http://localhost:8080 . Если вы используете Open WebUI на другой машине или сервере, вам нужно будет заменить localhost на его IP-адрес или имя хоста и убедиться, что порт 8080 открыт на его брандмауэре или иным образом доступен вашему браузеру.
Если все работает правильно, вас должна поприветствовать страница входа Open WebUI, где вы можете нажать кнопку регистрации, чтобы создать учетную запись. Первая созданная вами учетная запись будет автоматически повышена до администратора.
Первый пользователь, которого вы создадите в Open WebUI, автоматически станет администратором.
Open WebUI — это только интерфейс, и ему необходимо подключиться через API локально с Ollama или удаленно с помощью OpenAI, чтобы функционировать как чат-бот. Когда мы создали наш контейнер Open WebUI, он должен был настроить себя на поиск веб-сервера Ollama по адресу http://127.0.0.1:11434 . Однако, если Ollama работает на другом порту или машине, вы можете настроить это в разделе подключений в меню настроек.
Open WebUI должен автоматически подключаться к Ollama через порт по умолчанию, а если этого не происходит, вы можете вручную указать его адрес API в настройках.
Теперь, когда Open WebUI взаимодействует с Ollama, мы можем протестировать и убедиться, что он действительно работает, загрузив модель и задав ей вопрос.
На домашней странице WebUI нажмите «Выбрать модель», затем введите название и тег модели, которую вы хотите использовать, и нажмите «Извлечь», чтобы загрузить ее в свою систему.
Загрузка модели довольно проста. Просто введите имя нужного вам LLM и нажмите «pull»
Полный список моделей, доступных на сайте Ollama, можно найти здесь , но для целей этого руководства мы будем использовать 4-битную квантованную версию недавно анонсированной модели Meta Llama3 8B. В зависимости от скорости вашего соединения и выбранной вами модели, это может занять несколько минут.
Если у вас возникли проблемы с запуском LLama3-8B, возможно, у вашего GPU недостаточно vRAM. Попробуйте использовать модель меньшего размера, например Gemma:2B.
Далее давайте зададим чат-боту случайный вопрос, чтобы убедиться, что Open WebUI и Ollama действительно общаются друг с другом.
Если все настроено правильно, модель должна выдать ответ на ваши запросы сразу после загрузки в виртуальную оперативную память.
Теперь, когда у нас есть работающий чат-бот, мы можем начать добавлять документы в вашу базу данных векторов RAG. Для этого перейдите на вкладку «Рабочая область» и откройте «Документы». Оттуда вы можете загружать всевозможные документы, включая PDF-файлы.
Вы можете загрузить свои документы на странице «Документы» на вкладке «Рабочее место».
В этом примере мы загрузили PDF-документ поддержки, содержащий инструкции по установке и настройке среды выполнения контейнера Podman в различных сценариях.
По умолчанию Open WebUI использует модель Sentence-Transformers/all-MiniLM-L6-v6 для преобразования ваших документов во вложения, которые Llama3 или любой другой используемый вами LLM может понять. В «Настройках документа» (расположенных в «Настройках администратора» в последней версии Open WebUI) вы можете изменить это, чтобы использовать одну из моделей вложений Ollama или OpenAI. Однако для этого руководства мы собираемся придерживаться значения по умолчанию.
Вы также можете изменить модель встраивания в разделе «Настройки документа», если хотите попробовать что-то другое.
Теперь, когда мы загрузили наши документы, WebUI может использовать Llama3 или любую другую предпочитаемую вами модель для ответа на запросы об информации, на которой нейронная сеть, возможно, не была обучена.
Чтобы проверить это, мы сначала зададим чат-боту вопрос, относящийся к документу, который мы загрузили ранее. В этом случае мы спросим Llama3: «Как установить Podman на дистрибутив на базе RHEL, например, Rocky Linux?»
Если мы не скажем модели ссылаться на наш документ, она придумает что-нибудь сама.
В этом случае Llama3 быстро отвечает общим ответом, который, по большей части, выглядит точным. Это показывает, насколько широко обучен Llama3, но на самом деле он пока не использует RAG для генерации ответов.
Для этого нам нужно указать модели, в каких документах мы хотим выполнить поиск, введя «#» в начале запроса и выбрав файл из раскрывающегося списка.
Чтобы запросить документ, начните запрос с символа «#» и выберите файл из раскрывающегося списка.
Теперь, когда мы задаем тот же вопрос, мы получаем гораздо более сжатую версию инструкций, которая не только точнее отражает содержание нашего документа поддержки Podman, но и включает в себя дополнительные сведения, которые мы сочли полезными, например, установку, podman-compose чтобы мы могли использовать файлы docker-compose для запуска контейнеров Podman.
При выборе документа модель ответа основывается на имеющейся в нем информации.
Вы можете сказать, что модель использует RAG для генерации этого ответа, потому что Open WebUI показывает документ, на котором она основывала свой ответ. И если мы нажмем на него, мы сможем посмотреть на конкретные используемые вложения.
Естественно, необходимость называть конкретный файл, который вы ищете, каждый раз, когда вы задаете вопрос, не так уж и полезна, если вы еще не знаете, какой документ искать. Чтобы обойти это, мы можем фактически сказать Open WebUI, что мы можем запрашивать все документы с определенным тегом, например, «Podman» или «Support».
Мы применяем эти теги, открывая панель «Документы» на вкладке «Рабочая область». Оттуда нажмите кнопку редактирования рядом с документом, который мы хотим пометить, затем добавьте тег в диалоговом окне, прежде чем нажать «Сохранить».
Если вы хотите запросить несколько документов, вы можете пометить их общей фразой, например «поддержка».
Теперь мы можем запросить все документы с этим тегом, введя «#» и затем тег в начале нашего приглашения. Например, поскольку мы пометили документ Podman как «Support», мы начнем наше приглашение с «#Support».
Реализация RAG в Open WebUI не ограничивается загруженными документами. С помощью нескольких настроек вы можете использовать комбинацию RAG и больших языковых моделей для поиска и резюмирования веб-страниц, подобно сервису Perplexity AI.
Perplexity работает, преобразуя ваш запрос в поисковый запрос, а затем суммируя то, что он считает наиболее релевантными результатами, со сносками, ссылающимися на его источники. Мы можем сделать что-то невероятно похожее, используя Ollama и Open WebUI для поиска в Google или каком-либо другом поисковом провайдере, и взять три его лучших результата и использовать их для генерации цитируемого ответа на наш запрос.
В этом руководстве мы будем использовать API программируемой поисковой системы (PSE) Google для создания веб-системы RAG для поиска статей El Reg , но вы можете настроить свою для поиска по всему Интернету или определенным сайтам. Для этого нам понадобится ключ PSE API и идентификатор двигателя. Вы можете найти документацию Google о том, как сгенерировать и то, и другое, здесь .
Далее мы возьмем ключ API PSE и идентификатор движка, включим веб-поиск в разделе «Веб-поиск» на странице «Настройки администратора» Open WebUI, выберем «google_pse» в качестве поисковой системы, введем идентификаторы API и движка в соответствующие формы и нажмем «Сохранить».
Чтобы воспользоваться преимуществами RAG на основе веб-поиска, вам необходимо получить API и Engine ID для вашего поискового провайдера.
В этом разделе мы также можем настроить количество сайтов для проверки информации, релевантной нашему запросу.
Как только мы это сделаем, все, что нам нужно сделать, чтобы использовать наше личное Perplexity, — это сказать Open WebUI, чтобы он поискал в Интернете для нас. В новом чате нажмите кнопку «+» и отметьте «search web», затем введите свой запрос, как вы это обычно делаете.
Функция веб-поиска Open WebUI по умолчанию не включена, поэтому обязательно включите ее перед вводом запроса.
В этом примере мы задаем Llama3 вопрос о событии, которое произошло после обучения модели, и, таким образом, не будет знать о нем. Однако, поскольку модель только резюмирует онлайн-статью, она может ответить.
Источники, использованные для генерации ответа модели, перечислены внизу.
Теперь важно помнить, что это все еще LLM, интерпретирующий эти результаты, и поэтому он все еще может и будет делать ошибки или потенциально галлюцинировать. В этом примере Llama3, похоже, извлекла соответствующие детали, но, как вы можете видеть, его поиск не исключил сообщения на форуме, которые также индексируются Google.
Он мог бы так же легко вытащить и обобщить комментарий или мнение с неверной, вводящей в заблуждение или предвзятой информацией, так что вам все равно придется проверять свои источники. Это или заблокировать список URL, которые вы не хотите включать в свои запросы.
■
ООО "ВЕЕРАТ ГРУПП"
ИНН 7714464829
ОГРН 1207700369733
Телефон:
E-mail:
Адрес:
Москва, Ходынский бульвар 2, офис 232
Сообщество Вконтакте:
■
УСЛУГИ