Compartir a través de


Escalado del chat de Azure OpenAI para .NET mediante RAG con Azure Container Apps

Aprenda a agregar equilibrio de carga a la aplicación para ampliar la aplicación de chat más allá de los límites de cuota de modelo y token de Azure OpenAI. Este enfoque usa Azure Container Apps para crear tres puntos de conexión de Azure OpenAI, así como un contenedor principal para dirigir el tráfico entrante a uno de los tres puntos de conexión.

Este artículo requiere que implemente dos ejemplos independientes:

  • Aplicación de chat

    • Si aún no ha implementado la aplicación de chat, espere hasta que se implemente el ejemplo del equilibrador de carga.

    • Si ya ha implementado la aplicación de chat una vez, cambiará la variable de entorno para admitir un punto de conexión personalizado para el equilibrador de carga y volver a implementarla.

    • Aplicación de chat disponible en estos idiomas:

  • Aplicación del equilibrador de carga

Nota

En este artículo se usan una o varias plantillas de IA de aplicaciones como base para los ejemplos e instrucciones en el artículo. Las plantillas de aplicación de IA proporcionan implementaciones de referencia bien mantenidas y fáciles de implementar que ayudan a garantizar un punto de partida de alta calidad para las aplicaciones de IA.

Arquitectura para el equilibrio de carga de Azure OpenAI con Azure Container Apps

Dado que el recurso de Azure OpenAI tiene límites específicos de cuota de tokens y modelos, una aplicación de chat que usa un único recurso de Azure OpenAI es propenso a tener errores de conversación debido a esos límites.

Diagrama en el que se muestra la arquitectura de la aplicación de chat con el recurso de Azure OpenAI resaltado.

Para usar la aplicación de chat sin alcanzar esos límites, use una solución de carga equilibrada con Azure Container Apps. Esta solución expone sin problemas un único punto de conexión de Azure Container Apps al servidor de aplicaciones de chat.

Diagrama en el que se muestra la arquitectura de aplicaciones de chat con Azure Container Apps delante de tres recursos de Azure OpenAI.

La aplicación Azure Container se encuentra delante de un conjunto de recursos de Azure OpenAI. La aplicación de Container resuelve dos escenarios: normal y limitado. Durante un escenario normal donde está disponible la cuota de tokens y modelos, el recurso de Azure OpenAI devuelve un valor de 200 a través de Container App y App Server.

Diagrama que muestra un escenario normal. En el escenario normal se muestran tres grupos de puntos de conexión de Azure OpenAI con el primer grupo de dos puntos de conexión que obtienen un tráfico correcto.

Cuando un recurso está en un escenario limitado, por ejemplo, debido a los límites de cuota, la aplicación de Azure Container puede reintentar un recurso de Azure OpenAI diferente inmediatamente para completar la solicitud de aplicación de chat original.

Diagrama que muestra un escenario de limitación con un código de respuesta 429 de error y un encabezado de respuesta que indica cuántos segundos tiene que esperar el cliente para volver a intentarlo.

Prerrequisitos

  • Suscripción de Azure. Crear uno gratis

  • Acceso concedido a Azure OpenAI en la suscripción de Azure deseada.

    Actualmente, la aplicación solo concede acceso a este servicio. Debe solicitar acceso a Azure OpenAI.

  • Los contenedores de desarrollo están disponibles para ambos ejemplos, con todas las dependencias necesarias para completar este artículo. Puede ejecutar los contenedores de desarrollo en GitHub Codespaces (en un explorador) o localmente mediante Visual Studio Code.

  • Solo se requiere una cuenta de GitHub para usar CodeSpaces

Apertura de la aplicación de ejemplo del equilibrador local de aplicaciones de contenedor

GitHub Codespaces ejecuta un contenedor de desarrollo administrado por GitHub con Visual Studio Code para web como interfaz de usuario. Para el entorno de desarrollo más sencillo, use GitHub Codespaces para que tenga las herramientas de desarrollo y las dependencias correctas preinstaladas para completar este artículo.

Abrir este proyecto en GitHub Codespaces

Importante

Todas las cuentas de GitHub pueden usar Codespaces durante un máximo de 60 horas gratis cada mes con 2 instancias principales. Para obtener más información, consulte Almacenamiento y horas de núcleo incluidas mensualmente en GitHub Codespaces.

Implementación del equilibrador de carga de Azure Container Apps

  1. Inicie sesión en la CLI para desarrolladores de Azure para proporcionar autenticación a los pasos de aprovisionamiento e implementación.

    azd auth login --use-device-code
    
  2. Establezca una variable de entorno para usar la autenticación de la CLI de Azure en el paso posterior al aprovisionamiento.

    azd config set auth.useAzCliAuth "true"
    
  3. Implemente la aplicación del equilibrador de carga.

    azd up
    

    Deberá seleccionar una suscripción y una región para la implementación. No es necesario que sean la misma suscripción y región que la aplicación de chat.

  4. Espere a que se complete la implementación antes de continuar.

Obtener el extremo de implementación

  1. Use el comando siguiente para mostrar el punto de conexión implementado para la aplicación Contenedor de Azure.

    azd env get-values
    
  2. Copie el valor CONTAINER_APP_URL. Lo utilizarás en la siguiente sección.

Reimplementación de la aplicación de chat con el punto de chat del equilibrador de carga

Estos se completan en el ejemplo de la aplicación de chat.

  1. Abra el contenedor de desarrollo de la muestra de la aplicación de chat usando una de las siguientes opciones.

    Idioma Codespaces Visual Studio Code
    .NET Abrir en GitHub Codespaces Abrir en Contenedores de desarrollo
    JavaScript Abrir en GitHub Codespaces Abrir en Contenedores de desarrollo
    Pitón Abrir en GitHub Codespaces Abrir en Contenedores de desarrollo
  2. Inicie sesión en la CLI para desarrolladores de Azure (AZD).

    azd auth login
    

    Finalice las instrucciones de inicio de sesión.

  3. Cree un entorno de AZD con un nombre, por ejemplo, chat-app.

    azd env new <name>
    
  4. Agregue la siguiente variable de entorno, que indica al back-end de la aplicación chat que use una dirección URL personalizada para las solicitudes de OpenAI.

    azd env set OPENAI_HOST azure_custom
    
  5. Agregue la siguiente variable de entorno, sustituyendo <CONTAINER_APP_URL> por la dirección URL de la sección anterior. Esta acción indica al back-end de la aplicación chat cuál es el valor de la dirección URL personalizada para la solicitud openAI.

    azd env set AZURE_OPENAI_CUSTOM_URL <CONTAINER_APP_URL>
    
  6. Implemente la aplicación de chat.

    azd up
    

Ahora puede usar la aplicación de mensajería con la confianza de que está diseñada para escalar entre muchos usuarios sin agotar su cuota.

Transmitir registros para ver los resultados del equilibrador de carga

  1. En Azure Portal, busque el grupo de recursos.

  2. En la lista de recursos del grupo, seleccione el recurso Container App.

  3. Seleccione Supervisión -> Flujo de registro para ver el registro.

  4. Use la aplicación de chat para generar tráfico en el registro.

  5. Busque los registros, que hacen referencia a los recursos de Azure OpenAI. Cada uno de los tres recursos tiene su identidad numérica en el comentario de registro a partir de Proxying to https://openai3, donde 3 indica el tercer recurso de Azure OpenAI.

    Captura de pantalla en la que se muestran los registros de streaming de Azure Container App con dos líneas de registro alta iluminadas que muestran el comentario del registro.

  6. Al usar la aplicación de chat, cuando el equilibrador de carga recibe el estado de que la solicitud ha superado la cuota, el equilibrador de carga gira automáticamente a otro recurso.

Configuración de la cuota de TPM

De forma predeterminada, cada una de las instancias de Azure OpenAI del equilibrador de carga se implementa con una capacidad de 30 000 tokens por minuto (TPM). Puedes usar la aplicación de chat con la confianza de que se ha creado para escalar horizontalmente entre muchos usuarios sin quedarse sin cuota. Cambie este valor cuando:

  • Obtiene errores de capacidad de implementación: menor que ese valor.
  • Necesita una capacidad más alta: aumente el valor.
  1. Use el siguiente comando para cambiar el valor:

    azd env set OPENAI_CAPACITY 50
    
  2. Vuelva a implementar el equilibrador de carga:

    azd up
    

Limpieza de recursos

Cuando haya terminado con la aplicación de chat y el equilibrador de carga, limpie los recursos. Los recursos de Azure creados en este artículo se facturan a su suscripción de Azure. Si no espera necesitar estos recursos en el futuro, elimínelos para evitar incurrir en más cargos.

Limpieza de los recursos de la aplicación de chat

Regrese al artículo sobre la aplicación de chat para limpiar esos recursos.

Limpieza de los recursos del equilibrador de carga

Ejecute el siguiente comando de la CLI para desarrolladores de Azure para eliminar los recursos de Azure y quite el código fuente:

azd down --purge --force

Los interruptores proporcionan:

  • purge: Los recursos eliminados se purgan inmediatamente. Esto le permite reutilizar el TPM de Azure OpenAI.
  • force: la eliminación se produce de forma silenciosa, sin necesidad de consentimiento del usuario.

Limpieza de GitHub Codespaces

La eliminación del entorno de GitHub Codespaces garantiza que pueda maximizar la cantidad de derechos de horas gratuitas por núcleo que obtiene para su cuenta.

Importante

Para obtener más información sobre los derechos de la cuenta de GitHub, consulte Almacenamiento y horas de núcleo incluidas mensualmente en GitHub Codespaces.

  1. Inicie sesión en el panel de GitHub Codespaces (https://github.com/codespaces).

  2. Busque los espacios de código que se ejecutan actualmente procedentes del repositorio de GitHub azure-samples/openai-aca-lb.

    Captura de pantalla de todos los espacios de código en ejecución, incluido su estado y plantillas.

  3. Abra el menú contextual del espacio de código y seleccione Eliminar.

    Captura de pantalla del menú contextual de un solo espacio de código con la opción eliminar resaltada.

Obtener ayuda

Si tiene problemas para implementar el equilibrador de carga de Gestión de API de Azure, registre su problema en la sección de problemas del repositorio .

Código de ejemplo

Entre los ejemplos usados en este artículo se incluyen:

Paso siguiente