GenAIOps con flujo de avisos y Azure DevOps
A medida que aumenta la demanda de aplicaciones basadas en LLM, las organizaciones necesitan un proceso cohesivo y optimizado para administrar el ciclo de vida completo de estas aplicaciones. Las operaciones de inteligencia artificial generativa (GenAIOps), a veces denominadas LLMOps, son la piedra angular de la ingeniería de solicitudes eficiente y el desarrollo e implementación de aplicaciones basadas en LLM.
En este artículo se muestra cómo Azure Machine Learning le permite integrarse con Azure DevOps para automatizar el ciclo de vida del desarrollo de aplicaciones basadas en LLM con el flujo de avisos. El flujo de avisos proporciona un enfoque simplificado y estructurado para desarrollar aplicaciones basadas en LLM. Su proceso y ciclo de vida bien definidos le guían a través del proceso de creación, prueba, optimización e implementación de flujos, que culminan en la creación de soluciones basadas en LLM totalmente funcionales.
Características del flujo de avisos de GenAIOps
GenAIOps con flujo de avisos usa una plantilla de GenAIOps e instrucciones para ayudarle a compilar aplicaciones basadas en LLM mediante el flujo de avisos. GenAIOps con flujo de avisos tiene funcionalidades para aplicaciones LLM sencillas o complejas y es personalizable para las necesidades de la aplicación.
La plataforma de flujo de avisos de GenAIOps proporciona las siguientes características:
Hospedaje de código centralizado. El repositorio admite el hospedaje de código para varios flujos de avisos, lo que proporciona un único repositorio para todos los flujos. Este repositorio es como una biblioteca para los flujos, lo que facilita la búsqueda, el acceso y la colaboración en diferentes proyectos.
Administración del ciclo de vida. Cada flujo tiene su propio ciclo de vida, lo que proporciona una transición fluida de la experimentación local a la implementación de producción.
Experimentación de hiperparámetros y variantes. Las variantes y los hiperparámetros son como ingredientes en una receta. La plataforma permite experimentar con diferentes combinaciones de variantes en varios nodos de un flujo. Puede experimentar con múltiples variantes e hiperparámetros para evaluar fácilmente las variantes de flujo.
Varios destinos de implementación. La plataforma genera imágenes de Docker fusionadas con el flujo y la sesión de proceso para la implementación en cualquier plataforma de destino y sistema operativo que admita Docker. Puede implementar flujos en Azure App Services, Kubernetes y procesos administrados de Azure y configurarlos para escalar según sea necesario.
Implementación A/B. GenAIOps con flujo de avisos aplica sin problemas las implementaciones de A/B, lo que permite comparar fácilmente las diferentes versiones de flujo. Esta plataforma facilita la implementación de A/B para el flujo de avisos de la misma manera que en las pruebas A/B de un sitio web tradicional. Puede comparar fácilmente diferentes versiones de un flujo en una configuración real para determinar qué versión funciona mejor.
Relaciones entre varios conjuntos de datos y flujos. GenAIOps con flujo de avisos admite varios conjuntos de datos para cada flujo de evaluación y estándar, lo que permite la versatilidad en la prueba y evaluación del flujo.
Datos condicionales y registro de modelos. La plataforma registra una nueva versión del conjunto de datos para el recurso de datos de Azure Machine Learning y los flujos en el registro de modelos solo cuando se produce un cambio en el conjunto de datos.
Informes completos. GenAIOps con flujo de avisos genera informes detallados para cada configuración de variante, lo que le permite tomar decisiones fundamentadas. La plataforma proporciona una recopilación de métricas detallada, experimentos y ejecuciones masivas variantes para todas las ejecuciones y experimentos, lo que permite tomar decisiones controladas por datos para archivos CSV y HTML.
GenAIOps con flujo de avisos proporciona las siguientes características adicionales de personalización:
- Bring-your-own-flows (BYOF) proporciona una plataforma completa para desarrollar varios casos de uso relacionados con aplicaciones basadas en LLM.
- El desarrollo basado en configuración significa que no es necesario escribir código reutilizable extenso.
- La experimentación y la evaluación de avisos se ejecutan localmente y en la nube.
- Los cuadernos para la evaluación de avisos locales proporcionan una biblioteca de funciones para la experimentación local.
- Las pruebas de puntos de conexión dentro de la canalización después de la implementación comprueban la disponibilidad y la preparación del punto de conexión.
- La revisión humana en bucle opcional valida las métricas de solicitud antes de la implementación.
Fases de GenAIOps
El ciclo de vida de GenAIOps consta de cuatro fases distintas:
Inicialización. Defina claramente el objetivo empresarial, recopile ejemplos de datos relevantes, establezca una estructura básica de solicitud y cree un flujo que mejore sus capacidades.
Experimentación. Aplique el flujo a los datos de ejemplo, evalúe el rendimiento del mensaje y afine el flujo según sea necesario. Iterar continuamente hasta estar satisfecho con los resultados.
Evaluación y refinamiento. Realice pruebas comparativas del rendimiento del flujo mediante un conjunto de datos más grande, evalúe la eficacia del mensaje y realice refinamientos consecuentes. Avance a la siguiente fase si los resultados cumplen los estándares deseados.
Implementación. Optimice el flujo para lograr efectividad y eficacia, impleméntelo en un entorno de producción, incluida la implementación de A/B, supervise su rendimiento, recopile comentarios de los usuarios y use esta información para mejorar aún más el flujo.
Al adherirse a esta metodología estructurada, el flujo de avisos le permite desarrollar con confianza, probar rigurosamente, ajustar e implementar flujos, lo que conduce a la creación de aplicaciones de inteligencia artificial sólidas y sofisticadas.
La plantilla del flujo de avisos de GenAIOps formaliza esta metodología estructurada mediante un enfoque de código primero y le ayuda a compilar aplicaciones basadas en LLM mediante herramientas y procesos de flujo de avisos y características de flujo de avisos de GenAIOps. Esta plantilla está disponible en GenAIOps con la plantilla del flujo de avisos.
Flujo de proceso de GenAIOps
- En la fase de inicialización, desarrolla flujos, prepara y conserva datos y actualiza los archivos de configuración relacionados con GenAIOps.
- Después del desarrollo local mediante Visual Studio Code con la extensión de flujo de avisos, se genera una solicitud de incorporación de cambios (PR) desde la rama de características a la rama de desarrollo, que ejecuta la canalización de validación de compilación y los flujos de experimentación.
- La solicitud de cambios se aprueba manualmente y el código se combina con la rama de desarrollo.
- Una vez que la solicitud de cambios se combina con la rama de desarrollo, se ejecuta la canalización de integración continua (CI) para el entorno de desarrollo. La canalización de CI ejecuta los flujos de experimentación y evaluación en secuencia y registra los flujos en el Registro de Azure Machine Learning, aparte de otros pasos de la canalización.
- Después de que haya finalizado la ejecución de la canalización de CI, un desencadenador de implementación continua (CD) ejecuta la canalización de CD, que implementa el flujo estándar desde el Registro de Azure Machine Learning como un punto de conexión en línea de Azure Machine Learning. A continuación, la canalización ejecuta pruebas de integración y de humo en el flujo implementado.
- Se crea una rama de versión a partir de la rama de desarrollo o se genera una solicitud de cambios desde la rama de desarrollo a la rama de versión.
- La solicitud de cambios se aprueba manualmente y el código se combina con la rama de versión. Una vez que la solicitud de cambios se combina con la rama de versión, se ejecuta la canalización de CI para el entorno de producción. La canalización ejecuta los flujos de experimentación y evaluación en secuencia y registra los flujos en el Registro de Azure Machine Learning aparte de otros pasos de la canalización.
- Una vez completada la ejecución de la canalización de CI, un desencadenador de CD ejecuta la canalización de CD, que implementa el flujo estándar desde el Registro de Azure Machine Learning como un punto de conexión en línea de Azure Machine Learning. A continuación, la canalización ejecuta pruebas de integración y de humo en el flujo implementado.
Creación de un flujo de avisos de GenAIOps
En el resto de este artículo se muestra cómo usar GenAIOps con el flujo de avisos siguiendo el ejemplo de un extremo a otro en GenAIOps con el repositorio de plantillas del flujo de avisos, lo que le ayuda a compilar aplicaciones basadas en LLM mediante el flujo de avisos y Azure DevOps. El objetivo principal es proporcionar asistencia en el desarrollo de estas aplicaciones mediante las funcionalidades del flujo de avisos y GenAIOps.
Requisitos previos
- Una suscripción de Azure con la Versión gratuita o de pago de Azure Machine Learning.
- Un área de trabajo de Azure Machine Learning.
- Git versión 2.27 o posterior que se ejecute en el equipo local.
- Una organización de Azure DevOps donde tenga la capacidad de crear un proyecto, un repositorio de control de código fuente de Azure Repos y canalizaciones de Azure Pipelines. Una organización de Azure DevOps le ayuda a colaborar, planear y realizar un seguimiento del trabajo, el código y los problemas, y configurar CI y CD.
- Conocimientos sobre cómo integrar GenAIOps con el flujo de avisos.
Nota:
Si usa Azure DevOps y Terraform para poner en marcha la infraestructura, necesita la extensión de Terraform para Azure DevOps instalada.
Configuración de una conexión de flujo de avisos
El flujo de avisos usa un recurso de conexión para conectarse a los puntos de conexión de Azure OpenAI, OpenAI o Búsqueda de Azure AI. Puede crear una conexión a través de la interfaz de usuario del portal del flujo de avisos o mediante la API de REST. Para obtener más información, consulte Conexiones en el flujo de avisos.
Para crear la conexión, siga las instrucciones de Configuración de conexiones para el flujo de avisos. Los flujos de ejemplo usan una conexión denominada aoai
, por lo que debe asignar ese nombre a la conexión.
Configuración de una sesión de proceso
El flujo de avisos usa una sesión de proceso para ejecutar el flujo. Cree e inicie la sesión de proceso antes de que ejecute el flujo de avisos.
Configuración del repositorio de Azure Repos
Para crear un repositorio bifurcado en la organización de Azure DevOps, siga las instrucciones de Configuración del repositorio de GitHub. Este repositorio usa dos ramas, main
y development
, para promociones de código y ejecución de canalización.
Para crear un nuevo repositorio local, siga las instrucciones de Clonación del repositorio. Este clon le ayuda a crear una nueva rama de características desde la rama de desarrollo e incorporar cambios.
Configuración de una entidad de servicio de Azure
Una entidad de servicio de Azure es una identidad de seguridad que las aplicaciones, los servicios y las herramientas de automatización usan para acceder a los recursos de Azure. La aplicación o el servicio se autentican con Azure para acceder a los recursos en su nombre.
Cree una entidad de servicio siguiendo las instrucciones de Creación de una entidad de servicio de Azure. Esta entidad de servicio se usa para configurar la conexión de Azure DevOps Services y para permitir que Azure DevOps Services se autentique y se conecte a los servicios de Azure. Los trabajos de experimento y evaluación del flujo de avisos se ejecutan en la identidad de la entidad de servicio.
La configuración le proporciona a la entidad de servicio permisos de Propietario para que la canalización de CD pueda proporcionar automáticamente al punto de conexión de Azure Machine Learning recién aprovisionado acceso al área de trabajo de Azure Machine Learning para leer información de conexión. La canalización también agrega el punto de conexión a la directiva del almacén de claves asociada al área de trabajo de Azure Machine Learning con los permisos de secretos get
y list
. Puede cambiar los permisos de Propietario a permisos de nivel de Colaborador cambiando el código YAML de la canalización para quitar el paso relacionado con los permisos.
Crear un proyecto de Azure DevOps
Para crear un proyecto en la interfaz de usuario de Azure DevOps, siga las instrucciones de Creación de un proyecto de Azure DevOps.
Configuración de la autenticación entre Azure DevOps y Azure
Este paso configura una nueva conexión de servicio de Azure DevOps que almacena la información de la entidad de servicio. Las canalizaciones del proyecto pueden leer la información de conexión mediante el nombre de conexión para conectarse automáticamente a Azure. Para usar la entidad de servicio que creó para configurar la autenticación entre Azure DevOps y los servicios de Azure, siga las instrucciones de Configuración de la autenticación con Azure y Azure DevOps.
Creación de un grupo de variables de Azure DevOps
Para crear un nuevo grupo de variables y agregar una variable relacionada con la conexión de servicio de Azure DevOps, siga las instrucciones de Creación de un grupo de variables de Azure DevOps. Luego, el nombre de la entidad de seguridad de servicio estará disponible automáticamente para las canalizaciones como variable de entorno.
Configuración de Azure Repos y Azure Pipelines
El repositorio de ejemplo usa dos ramas, main
y development
, para promociones de código y ejecución de canalización. Para configurar sus propios repositorios locales y remotos de manera que usen el código del repositorio de ejemplo, siga las instrucciones de Configuración de repositorios locales y remotos de Azure DevOps.
Clone las ramas main
y development
del repositorio de ejemplo y asocie el código para hacer referencia al nuevo repositorio de Azure Repos. Las canalizaciones de solicitud de cambios y de desarrollo se configuran para que se ejecuten automáticamente en función de los desencadenadores de creación y combinación de solicitud de cambios.
La directiva de rama de la rama development
está configurada para ejecutar la canalización de solicitud de cambios para cualquier solicitud de incorporación de cambios generada en la rama de desarrollo desde una rama de características. La canalización dev
se ejecuta cuando la solicitud de cambios se combina con la rama de desarrollo y consta de fases de CI y CD.
La revisión humana en bucle también se implementa dentro de las canalizaciones. Una vez ejecutada la fase de CI de la canalización dev
, sigue la fase de CD después de que se proporcione la aprobación manual en la interfaz de usuario de ejecución de compilación de Azure Pipelines.
El tiempo predeterminado para esperar aprobación es de 60 minutos, después de lo cual se rechaza la canalización y la fase de CD no se ejecuta. La aprobación manual de la ejecución ejecuta los pasos de CD de la canalización.
La aprobación manual de la canalización de ejemplo está configurada para enviar notificaciones a replace@youremail.com
. Reemplace el marcador de posición por una dirección de correo electrónico adecuada.
Probar la canalización
Para probar las canalizaciones, siga las instrucciones que se indican en Probar las canalizaciones. El proceso completo implica los pasos siguientes:
- Se genera una solicitud de cambios de una rama de características a la rama de desarrollo.
- La canalización de solicitud de cambios se ejecuta automáticamente debido a la configuración de la directiva de rama.
- La solicitud de cambios se combina con la rama de desarrollo.
- La canalización asociada de
dev
se ejecuta, lo que da como resultado la ejecución completa de CI y CD y el aprovisionamiento o la actualización de los puntos de conexión de Azure Machine Learning.
Las salidas deben tener un aspecto similar a los ejemplos de Escenario de ejecución, evaluación e implementación de mensaje de ejemplo.
Usar la ejecución local
Para usar funcionalidades de ejecución local, siga estos pasos.
Clone el repositorio de la siguiente manera:
git clone https://github.com/microsoft/genaiops-promptflow-template.git
Cree un archivo .env en el nivel de carpeta superior. Agregue líneas para cada conexión y actualice los valores de los marcadores de posición. Los ejemplos del repositorio de ejemplo usan la conexión de AzureOpenAI denominada
aoai
y la versión de API2024-02-01
.aoai={ "api_key": "<api key>","api_base": "<api base or endpoint>","api_type": "azure","api_version": "2024-02-01"} <connection2>={ "api_key": "<api key>","api_base": "<api base or endpoint>","api_type": "<api type>","api_version": "<api_version>"}
Prepare la conda local o el entorno virtual para instalar las dependencias.
python -m pip install promptflow promptflow-tools promptflow-sdk jinja2 promptflow[azure] openai promptflow-sdk[builtins] python-dotenv
Incorpore o escriba los flujos en la plantilla según las instrucciones de Incorporación de nuevos flujos.
Escriba scripts de Python en la carpeta local_execution similar a los ejemplos proporcionados.