4 способа создать и донести чат-бота LLM до клиентов

Доступны многочисленные библиотеки для перехода вашего чат-бота LLM от разработки к производству.

В этой статье я расскажу о некоторых популярных методах достижения этой цели, исходя из текущих тенденций на момент написания статьи.

Вариант 1. Добавление бота для контроля качества на сервер Discord вашей компании.

Этот подход полезен для внутренней обратной связи, а также для случаев, когда ваши клиенты также находятся в экосистеме Discord.

Более того, элементы этого решения также можно адаптировать для стандартного чат-бота на вашем сайте. Просто вызовите API-шлюз из своего веб-приложения вместо Discord.

Вариант 2. Использование ChatUI для решения «подключи и работай».

Принесите свою собственную модель или используйте конечную точку sagemaker и начните общаться с помощью ChatUI.

Вариант 3 — Использование градиента

Несмотря на то, что он обеспечивает более быструю разработку, перед его внедрением в производственную среду необходимо тщательное рассмотрение.

Вариант 4 — плагин Streamlit HugChat

Рекомендуется только в том случае, если вы уже работаете со Streamlit; в противном случае это не оптимальное решение исключительно для чат-бота.

В производственной среде решение обычно состоит из трех основных компонентов:

  1. Преобразование базы знаний вашей компании во встраивания и их хранение.
  2. Преобразование входных вопросов во вложения и эффективное извлечение вложений ближайших соседей из векторного хранилища.
  3. Предоставление контекста и вопросов LLM и предоставление результатов пользователю.

В этой статье основное внимание уделяется обсуждению того, как представить выходные данные пользователю. Для первых двух шагов я предоставил более подробную статью, которую вы можете изучить здесь: https://mrmaheshrajput.medium.com/how-to-build-an-intelligent-qa-chatbot-on-your-data -with-llm-or-chatgpt-d0009d256dce.

Вариант 1 — Добавление бота QA на базе LLM в Discord

1. Создание бота в Discord и добавление на свой сервер

В другой статье я более подробно расскажу о создании бота и его интеграции в сервер. Статью можно найти здесь: https://mrmaheshrajput.medium.com/automating-ad-hoc-reports-with-discord-bot-aws-lambda-and-sagemaker-25d40e371a8a

а. Перейдите по адресу https://discord.com/developers/applications.

б. Нажмите «Новое приложение»

в. Дайте подходящее имя и нажмите кнопку «Создать».

После создания приложения скопируйте «ИДЕНТИФИКАТОР ПРИЛОЖЕНИЯ» APP_ID «ПУБЛИЧНЫЙ КЛЮЧ» PUBLIC_KEY для дальнейшего использования.

В пункте меню «Бот» нажмите кнопку «СБРОСИТЬ ТОКЕН» и скопируйте токен. Сохраните это BOT_TOKEN для дальнейшего использования.

В пункте родительского меню «OAuth2» выберите пункт дочернего меню «Генератор URL-адресов», установите флажок application.commands и скопируйте «СОЗДАННЫЙ URL-адрес» с помощью кнопки «Копировать».

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

2. Регистрация команд

Мы будем использовать слэш-команды. Если вы хорошо разбираетесь в Discord API, не стесняйтесь изучать альтернативы этому подходу.

Запустите следующий код из любой среды, в которой установлены пакеты python и requests.

Мы используем более быстрые команды гильдии, и команда будет вызываться через ввод /qa в Discord.

Не забудьте заменить APP_ID, BOT_TOKEN, SERVER_ID (щелкните правой кнопкой мыши по серверу и выберите «Копировать идентификатор сервера») своими значениями.

Зарегистрируйте эту команду через:

python register_command_qa_bot.py

Ответ:

3. Создайте лямбду для обработки взаимодействия (и триггера шлюза API)

а. Создайте новую лямбда-функцию во время выполнения Python3.9, выберите правильную архитектуру в соответствии с вашей системой, потому что мы добавим уровень к этой функции.

б. Лямбда-код:

Код прост, если вы раньше работали с косыми командами ботов Discord. Некоторые функции могут показаться избыточными, но они могут быть полезны, если вы планируете расширять этот проект в будущем.

В функции lambda_handler t==1 отвечает на команду ping.

В функции command_handler мы просто вызываем конечную точку sagemaker после анализа вопроса из тела объекта.

Этот код похож на код, который мы использовали в: https://mrmaheshrajput.medium.com/automating-ad-hoc-reports-with-discord-bot-aws-lambda-and-sagemaker-25d40e371a8a

в. Добавьте к этой лямбде разрешение `sagemaker:InvokeEndpoint`.

д. Перейдите к настройкам конфигурации лямбды и добавьте две переменные среды:

я. PUBLIC_KEY — скопировано при создании бота Discord
ii. ENDPOINT_NAME — еще не создано

е. Добавьте триггер шлюза REST API в лямбду:

Для простоты «Безопасность» настроена на открытие.

ф. Добавьте слой PyNACL к этой лямбде:

!rm -rf layer/python
!mkdir -p layer/python
!pip install -q --target layer/python PyNaCl
!cd layer && zip -q --recurse-paths layer.zip .

Загрузите этот слой вручную или добавьте его через S3, а затем прикрепите к своей лямбде.

4. Добавьте URL-адрес конечной точки взаимодействия.

Скопируйте конечную точку API из триггеров,

и вставьте его в параметр INTERACTION ENDPOINT URL в разделе «Общая информация» на портале разработчиков Discord вашего приложения.

Если шлюз API работает

5. Тестовая фиктивная команда

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

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

6. Разверните LLM на конечной точке Sagemaker.

В этом примере я создам конечную точку, используя Модели Sagemaker Jumpstart Foundation. Альтернативно вы можете использовать любую другую базовую модель или точно настроенную модель на основе вашего набора данных и развернуть ее в конечной точке.

Если вы еще не запрашивали экземпляры g5, начните с запроса на увеличение квоты для ml.g5.2xlarge for endpoint usage через сервисные квоты. Обратите внимание, что обработка заявки может занять до 24 часов.

Затем перейдите в свою студию Sagemaker и в разделе «Sagemaker Jumpstart» выберите «Llama-2–7b-chat».

Измените конфигурацию развертывания по своему усмотрению, обратите внимание на переменную «Имя конечной точки» ENDPOINT_NAME и нажмите кнопку «Развернуть».

Эта модель недоступна для точной настройки. Для точной настройки вашего набора данных используйте «Llama 2 7b».

Через пару минут статус конечной точки должен быть в рабочем состоянии.

Вы также можете проверить статус конечной точки в пункте меню «Конечные точки», который находится в разделе «Развертывания» в Sagemaker Studio.

Мы будем использовать имя конечной точки для ее вызова в лямбда-выражении.

7. Измените лямбду, чтобы вызвать конечную точку sagemaker и вернуть ответ.

Обновите имя переменной среды ENDPOINT_NAME в лямбда-выражении.

Также удалите или раскомментируйте тестовый код.

Теперь, когда вы используете команду /qacommand в Discord, она вызывает конечную точку Sagemaker и возвращает ответ от LLM.

Обратите внимание, что я НЕ ускорил гифку; Lambda способна среагировать в течение 3 секунд.

После завершения взаимодействия с конечной точкой удалите ее, чтобы освободить ресурсы и прекратить выставление счетов.

Вариант 2 — HuggingFace ChatUI для Plug-and-Play.

В своем видео Абхишек Тхакур (https://www.youtube.com/watch?v=o1BCq1KJULM) использует обнимающееся лицо text-generation-inference ( https://github.com/huggingface/text-generation-inference) вместе с chat-ui (https://github.com/huggingface/chat-ui) для решения чат-бота .

Если у вас есть конечная точка вывода обнимающегося лица или вы собираетесь использовать LLM со своего локального компьютера, начните с настройки и создания конечной точки с помощью пакета вывода текста.

Этот процесс выполнит LLM с открытым исходным кодом на вашем компьютере, и конечная точка будет выглядеть следующим образом: 127.0.0.1:8080

Вы можете использовать это в качестве конечной точки или выбрать конечную точку SageMaker при условии, что вы создадите новую Lambda, способную вызывать эту конечную точку и присоединять новый триггер API-шлюза к функции Lambda.

1. Создайте новую лямбду в среде Python.

2. Код функции:

3. Дайте sagemaker:InvokeEndpoint разрешение на эту лямбда-политику.

4. Добавьте ENDPOINT_NAME в переменную среды.

5. Добавьте новый триггер шлюза REST API и запишите конечную точку API.

6. Клонируйте репозиторий https://github.com/huggingface/chat-ui.

7. ChatUI требует работающего экземпляра MongoDB для хранения истории чата. Вы можете использовать контейнер MongoDB, как описано в репозитории:

docker run -d -p 27017:27017 --name mongo-chatui mongo:latest

8. Создайте новый файл .env.local в корневом каталоге ChatUI и добавьте два новых объекта: MONDODB_URL и MODELS .

Объект Models аналогичен файлу .env, за исключением того, что мы добавляем новый ключ endpoints.

MONGODB_URL=mongodb://localhost:27017
MODELS=`[
  {
    "name": "LLAMA 2 7B Chat, running on sagemaker endpoint",
    "endpoints": [{"url": "API_ENDPOINT"}],
    "datasetName": "Llama2-7b-chat/qa-sm",
    "description": "A good alternative to ChatGPT",
    "websiteUrl": "https://mrmaheshrajput.github.io",
    "userMessageToken": "<|prompter|>",
    "assistantMessageToken": "<|assistant|>",
    "messageEndToken": "</s>",
    "preprompt": "Below are a series of dialogues between various people and an AI assistant. The AI tries to be helpful, polite, honest, sophisticated, emotionally aware, and humble-but-knowledgeable. The assistant is happy to help with almost anything, and will do its best to understand exactly what is needed. It also tries to avoid giving false or misleading information, and it caveats when it isn't entirely sure about the right answer. That said, the assistant is practical and really does its best, and doesn't let caution get too much in the way of being useful.\n-----\n",
    ...
  }
]`

Замените url конечной точкой API, созданной выше.

8. Выполните обе следующие команды:

npm install
npm run dev

По URL-адресу, указанному npm run dev, будет запущено приложение ChatUI.

Поскольку я не мог понять синтаксис ответа, ChatUI всегда выдавал мне эту ошибку:

Но конечная точка и лямбда смогли успешно вернуть выходные данные согласно журналам CloudWatch.

Вариант 3 — Чат-бот Gradio

Gradio — мощный инструмент для создания пользовательских интерфейсов для моделей машинного обучения. Всего с помощью нескольких строк кода вы можете легко настроить демо-версию практически для любой модели машинного обучения.

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

В этом примере мы будем использовать конечную точку Hugging Face в сочетании с интерфейсом генерации текста для установления конечной точки.

Код приложения Gradio:

Мы будем использовать функцию gr.Chatbot в режиме потоковой передачи.

Вариант 4 — Чат-бот Streamlit

Статья Как создать чат-бот на базе LLM с помощью Streamlit — хорошее место для начала вашего путешествия по этой теме.

1. Клонируйте этот репозиторий: https://github.com/streamlit/app-starter-kit.

2. Измените код файла streamlit_app.py следующим образом:

3. Создайте файл secrets.toml в каталоге .streamlit.

У вас есть возможность добавить EMAIL и PASS в сам файл, чтобы предотвратить ввод ваших учетных данных HF.

Вы также можете пропустить и ввести их во время загрузки.

Если все правильно, вы сможете общаться с LLM, выбранным в интерфейсе генерации текста.

Производственная установка

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

В другой своей статье (https://mrmaheshrajput.medium.com/how-to-build-an-intelligent-qa-chatbot-on-your-data-with-llm-or-chatgpt-d0009d256dce) я обсудить, как этого добиться. Вы также можете использовать RDS или другую базу данных для хранения контекста и передачи его вместе с каждым вводом.

Для хранения вложений вашей базы знаний вы можете выбрать «pgvector» или базу данных встраивания или рассмотреть возможность использования библиотеки ANN, если ваше дерево поиска относительно небольшое.

CDK от AWS

AWS предлагает подробный пример развертывания чат-бота на базе нескольких LLM с использованием AWS CDK в инфраструктуре AWS.

Вы можете получить к нему доступ здесь: https://github.com/aws-samples/aws-genai-llm-chatbot

Он развертывает комплексный пользовательский интерфейс, созданный с помощью React, который взаимодействует с развернутыми LLM как чат-боты, поддерживает запросы синхронизации и режимы потоковой передачи для достижения конечных точек LLM, управляет историей разговоров, останавливает генерацию модели в потоковом режиме и переключается между всеми развернутыми моделями для экспериментов.

Лично если у вас есть необходимые ресурсы, это одно из самых надежных решений, которые вы можете реализовать в своей производственной среде.

Этот стек содержит необходимые ресурсы для настройки системы чат-бота, в том числе:

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

  • Развертывание моделей из моделей SageMaker Foundation путем указания ARN конкретной модели.
  • Развертывание моделей, поддерживаемых контейнером HuggingFace TGI.
  • Развертывание всех остальных моделей из Hugging Face с помощью специального кода вывода.

б. Внутренние ресурсы для пользовательского интерфейса, включая внутренние действия чата и пул пользователей Cognito для аутентификации.

в. Система на базе DynamoDB для управления историей разговоров.

Этот стек также включает в себя «адаптеры моделей», позволяющие настраивать различные параметры и функции для конкретных моделей без изменения базовой логики для выполнения запросов и получения ответов от конечных точек SageMaker для разных LLM.

Вы можете связаться со мной в LinkedIn: https://www.linkedin.com/in/maheshrajput/

Мой сайт на GitHub: https://mrmaheshrajput.github.io/