Масштабирование Azure OpenAI для чата .NET с помощью RAG с приложениями контейнеров Azure

Узнайте, как добавить балансировку нагрузки в ваше приложение, чтобы расширить функциональность чат-приложения, превышающую ограничения по токенам и квотам на модели Azure OpenAI в Microsoft Foundry. Этот подход использует приложения контейнеров Azure для создания трех конечных точек Azure OpenAI и основного контейнера для направления входящего трафика к одной из трех конечных точек.

В этой статье требуется развернуть два отдельных примера:

  • Приложение чата

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

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

    • Приложение чата доступно на следующих языках:

  • Приложение подсистемы балансировки нагрузки

Заметка

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

Архитектура балансировки нагрузки Azure OpenAI с помощью приложений контейнеров Azure

Так как модели Azure OpenAI в ресурсе Microsoft Foundry имеют определенные ограничения на маркер и квоту модели, приложение чата, использующее одну модель Azure OpenAI в ресурсе Microsoft Foundry, подвержено сбоям диалога из-за этих ограничений.

Схема, на котором показана архитектура приложения чата с выделенными моделями Azure OpenAI в ресурсе Microsoft Foundry.

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

Диаграмма, где показана архитектура приложения чата с Azure Container Apps перед тремя ресурсами Azure OpenAI.

Приложение-контейнер находится перед набором ресурсов Azure OpenAI. Приложение-контейнер решает два сценария: обычный и ограниченный. В обычном сценарии, где доступна квота маркера и модели, ресурс Azure OpenAI возвращает 200 обратно через приложение контейнера и сервер приложений.

схема, показывающая обычный сценарий. Обычный сценарий показывает три группы конечных точек Azure OpenAI с первой группой двух конечных точек, получая успешный трафик.

Если ресурс находится в сценарии ограниченного использования из-за ограничений квоты, приложение контейнера может попробовать использовать другой ресурс Azure OpenAI для выполнения исходного запроса чат-приложения.

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

Необходимые условия

контейнеры разработки доступны для обоих примеров, со всеми зависимостями, необходимыми для выполнения этой статьи. Контейнеры разработки можно запускать в GitHub Codespaces (в браузере) или локально с помощью Visual Studio Code.

Откройте приложение-пример балансировщика нагрузки для контейнерных приложений

GitHub Codespaces запускает контейнер разработки, управляемый GitHub, с Visual Studio Code в веб-версии в качестве пользовательского интерфейса. Для наиболее простой среды разработки используйте GitHub Codespaces, чтобы у вас были правильные средства разработчика и зависимости, предварительно установленные для выполнения этой статьи.

Открыть в GitHub Codespaces.

Важный

Все учетные записи GitHub могут использовать GitHub Codespaces бесплатно до 60 часов в месяц, используя два экземпляра с двумя процессорными ядрами. Для получения дополнительной информации обратитесь к статье о ежемесячном включении хранилища и основных часов в GitHub Codespaces.

Развертывание подсистемы балансировки нагрузки для приложений контейнеров Azure

  1. Войдите в интерфейс командной строки разработчика Azure, чтобы обеспечить проверку подлинности для шагов подготовки и развертывания:

    azd auth login --use-device-code
    
  2. Задайте переменную среды для использования аутентификации Azure CLI на этапе после развертывания.

    azd config set auth.useAzCliAuth "true"
    
  3. Разверните приложение подсистемы балансировки нагрузки:

    azd up
    

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

  4. Дождитесь завершения развертывания, прежде чем продолжить.

Получите конечную точку развертывания

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

    azd env get-values
    
  2. Скопируйте значение CONTAINER_APP_URL. Вы используете его в следующем разделе.

Повторное развертывание приложения чата при помощи конечной точки балансировщика нагрузки

Эти примеры завершены в примере приложения чата.

  1. Откройте контейнер разработки для приложения чата с помощью одного из следующих вариантов.

    Язык Пространства GitHub для кода Visual Studio Code
    .СЕТЬ Открыть в GitHub Codespaces Открыть в контейнерах разработки
    JavaScript Открыть в GitHub Codespaces Открыть в контейнерах разработки
    Питон Открыть в GitHub Codespaces Открыть в контейнерах разработки
  2. Войдите в интерфейс командной строки разработчика Azure (AZD):

    azd auth login
    

    Завершите инструкцию по входу в систему.

  3. Создайте среду AZD с именем, например chat-app:

    azd env new <name>
    
  4. Добавьте следующую переменную среды, которая сообщает серверной части приложения чата использовать настраиваемый URL-адрес для запросов Azure OpenAI:

    azd env set OPENAI_HOST azure_custom
    
  5. Добавьте следующую переменную среды. Замените <CONTAINER_APP_URL> URL-адресом из предыдущего раздела. Это действие сообщает серверной части приложения чата, что такое значение настраиваемого URL-адреса для запроса Azure OpenAI.

    azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
    
  6. Разверните приложение чата:

    azd up
    

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

Трансляция журналов для просмотра результатов балансировщика нагрузки

  1. На портале Azureвыполните поиск по группе ресурсов.

  2. В списке ресурсов в группе выберите ресурс "Приложения контейнеров Azure".

  3. Выберите «Мониторинг»>и «Поток журнала», чтобы просмотреть журнал.

  4. Используйте приложение чата для создания трафика в журнале.

  5. Поищите журналы, которые ссылаются на ресурсы Azure OpenAI. Каждый из трех ресурсов имеет свое числовое удостоверение в примечании журнала, которое начинается с Proxying to https://openai3, где 3 указывает третий ресурс Azure OpenAI.

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

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

Настроить квоту TPM

По умолчанию каждая из моделей Azure OpenAI в экземплярах Microsoft Foundry в подсистеме балансировки нагрузки развертывается с пропускной способностью 30 000 токенов в минуту (TPM). Вы можете использовать приложение чата с уверенностью в том, что оно масштабируется на большое количество пользователей без превышения квоты. Измените это значение, если:

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

    azd env set OPENAI_CAPACITY 50
    
  2. Повторно разверните подсистему балансировки нагрузки:

    azd up
    

Очистка ресурсов

Завершив работу с приложением чата и подсистемой балансировки нагрузки, очистите ресурсы. Ресурсы Azure, созданные в этой статье, списываются с вашей подписки Azure. Если вы не ожидаете, что эти ресурсы потребуются в будущем, удалите их, чтобы избежать дополнительных расходов.

Очистка ресурсов приложения чата

Вернитесь в статью о приложении чата, чтобы очистить ресурсы:

Очистка ресурсов подсистемы балансировки нагрузки

Удалите ресурсы Azure и удалите исходный код:

azd down --purge --force

Переключатели предоставляют:

  • purge: удаленные ресурсы немедленно очищаются, чтобы можно было повторно использовать модели Azure OpenAI в токенах Microsoft Foundry в минуту.
  • force. Удаление выполняется автоматически, не требуя согласия пользователя.

Очистка GitHub Codespaces и Visual Studio Code

Удаление среды GitHub Codespaces гарантирует, что вы можете максимально использовать объем бесплатных часовых квот на ядро, предоставляемых для учетной записи.

Важный

Дополнительные сведения о правах вашей учетной записи GitHub см. в ежемесячно включаемом объеме хранилища и основных часах для GitHub Codespaces.

  1. Войдите в панель мониторинга GitHub Codespaces.

  2. Найдите в настоящее время работающие пространства кода, полученные из репозитория azure-samples/openai-aca-lb на GitHub.

    снимок экрана, на котором показаны все выполняемые пространства кода, включая их состояние и шаблоны.

  3. Откройте контекстное меню для пространства кода, а затем выберите Удалить.

    снимок экрана, показывающий контекстное меню для одного пространства кода с выделенным параметром

Получите помощь

Если у вас возникли проблемы с развертыванием подсистемы балансировки нагрузки для приложений контейнеров Azure, добавьте проблему на веб-страницу "Проблемы репозитория".

Пример кода

Примеры, используемые в этой статье, включают:

Следующий шаг

  • Используйте Azure Load Testing для нагрузочного тестирования вашего приложения чата