Si comparamos a grandes rasgos los flujos de trabajo del aprendizaje automático clásico y de la IA generativa, observamos que los pasos generales del flujo de trabajo son similares en ambos casos. Ambos requieren recopilación de datos, ingeniería de características, optimización del modelo, despliegue, evaluación, etc., pero los detalles de ejecución y la asignación de tiempo son fundamentalmente diferentes. Lo que es más importante, la IA generativa introduce fuentes únicas de deuda técnica que pueden acumularse rápidamente si no se gestionan adecuadamente, entre ellas:
En este blog, abordaremos cada forma de deuda técnica una por una. En última instancia, los equipos que hacen la transición del ML clásico a la IA generativa deben ser conscientes de estas nuevas fuentes de deuda y adaptar sus prácticas de desarrollo en consecuencia, dedicando más tiempo a la evaluación, la gestión de las partes interesadas, el seguimiento de la calidad subjetiva y la instrumentación en lugar de la limpieza de datos y la ingeniería de características que dominaban los proyectos de ML clásico.
Para apreciar dónde se encuentra el campo ahora, es útil comparar cómo nuestros flujos de trabajo para la IA generativa se comparan con lo que usamos para los problemas clásicos de machine learning. A continuación, se presenta una descripción general. Como revela esta comparación, los pasos generales del flujo de trabajo siguen siendo los mismos, pero hay diferencias en los detalles de ejecución que hacen que se enfaticen diferentes pasos. Como veremos, la IA generativa también introduce nuevas formas de deuda técnica, lo que tiene implicaciones en cómo mantenemos nuestros sistemas en producción.
| Paso del flujo de trabajo | ML clásico | IA generativa |
|---|---|---|
| Recopilación de datos | Los datos recopilados representan eventos del mundo real, como ventas minoristas o fallas de equipos. A menudo se utilizan formatos estructurados, como CSV y JSON. | Los datos recopilados representan conocimiento contextual que ayuda a un modelo de lenguaje a proporcionar respuestas relevantes. Se pueden utilizar tanto datos estructurados (a menudo en tablas en tiempo real) como datos no estructurados (imágenes, videos, archivos de texto). |
| Ingeniería de características/ Transformación de datos | Los pasos de transformación de datos implican la creación de nuevas características para reflejar mejor el espacio del problema (p. ej., la creación de características de días de semana y de fin de semana a partir de datos de marca de tiempo) o la realización de transformaciones estadísticas para que los modelos se ajusten mejor a los datos (p. ej., la estandarización de variables continuas para la agrupación de k-medias y la realización de una transformación logarítmica de los datos sesgados para que sigan una distribución normal). | Para los datos no estructurados, la transformación implica la fragmentación, la creación de representaciones de *embedding* y (posiblemente) la adición de metadatos, como encabezados y etiquetas, a los fragmentos. Para los datos estructurados, podría implicar la desnormalización de tablas para que los modelos de lenguaje grandes (LLM) no tengan que considerar uniones de tablas. Agregar descripciones de metadatos de tablas y columnas también es importante. |
| Diseño de la canalización del modelo | Generalmente cubierto por un pipeline básico de tres pasos:
| Generalmente, implica un paso de reescritura de consultas, alguna forma de recuperación de información, posiblemente llamadas a herramientas y verificaciones de seguridad al final. Las canalizaciones son mucho más complejas, implican una infraestructura más compleja, como bases de datos e integraciones de API, y a veces se gestionan con estructuras similares a grafos. |
| Optimización del modelo | La optimización del modelo implica el ajuste de hiperparámetros mediante métodos como la validación cruzada, la búsqueda en cuadrícula y la búsqueda aleatoria. | Aunque se pueden cambiar algunos hiperparámetros, como la temperatura, top-k y top-p, la mayor parte del esfuerzo se dedica a ajustar las instrucciones para guiar el comportamiento del modelo. Dado que una cadena de LLM puede implicar muchos pasos, un ingeniero de IA también puede experimentar con la descomposición de una operación compleja en componentes más pequeños. |
| Implementación | Los modelos son mucho más pequeños que los modelos fundacionales, como los LLM. Las aplicaciones de ML completas se pueden alojar en una CPU sin necesidad de GPU. El versionado, el monitoreo y el linaje de los modelos son consideraciones importantes. Las predicciones del modelo rara vez requieren cadenas o grafos complejos, por lo que no se suelen utilizar trazas. | Debido a que los modelos fundacionales son muy grandes, pueden alojarse en una GPU central y exponerse como una API a varias aplicaciones de IA orientadas al usuario. Esas aplicaciones actúan como “wrappers” en torno a la API del modelo fundacional y se alojan en CPU más pequeñas. La gestión de versiones de la aplicación, el monitoreo y el linaje son consideraciones importantes. Además, debido a que las cadenas y los grafos de los LLM pueden ser complejos, se necesita un seguimiento adecuado para identificar los cuellos de botella y los errores de las consultas. |
| Evaluación | Para el rendimiento del modelo, los científicos de datos pueden usar métricas cuantitativas definidas, como la puntuación F1 para la clasificación o el error cuadrático medio para la regresión. | La corrección del resultado de un LLM depende de juicios subjetivos; por ejemplo, de la calidad de un resumen o una traducción. Por lo tanto, la calidad de la respuesta generalmente se juzga con directrices en lugar de métricas cuantitativas. |
A partir de la experiencia de primera mano, equilibrando un proyecto de pronóstico de precios con un proyecto que crea un agente de llamada a herramientas, descubrimos que existen algunas diferencias importantes en los pasos de desarrollo e implementación del modelo.
El ciclo de desarrollo interno generalmente se refiere al proceso iterativo por el que pasan los desarrolladores de aprendizaje automático al crear y perfeccionar las canalizaciones de sus modelos. Generalmente, ocurre antes de las pruebas de producción y la implementación del modelo.
Así es como los profesionales de ML clásico e IA generativa invierten su tiempo de manera diferente en este paso:
Pérdidas de tiempo en el desarrollo de modelos de ML clásico
Pérdidas de tiempo en el desarrollo de modelos y pipelines de IA generativa
Los siguientes diagramas comparan las asignaciones de tiempo del ML clásico y la IA generativa para el ciclo de desarrollo del modelo.
A diferencia del ciclo de desarrollo del modelo, el ciclo de despliegue del modelo no se centra en optimizar el rendimiento del modelo. En cambio, los ingenieros se centran en las pruebas sistemáticas, el despliegue y la supervisión en entornos de producción.
Aquí, los desarrolladores pueden mover las configuraciones a archivos YAML para facilitar las actualizaciones del proyecto. También podrían refactorizar las canalizaciones de procesamiento de datos estáticos para que se ejecuten en modo de streaming, utilizando un marco de trabajo más robusto como PySpark en lugar de Pandas. Finalmente, deben considerar cómo configurar los procesos de prueba, supervisión y retroalimentación para mantener la calidad del modelo.
En este punto, la automatización es esencial, y la integración y entrega continuas es un requisito no negociable. Para gestionar la CI/CD para proyectos de datos e IA en Databricks, los Paquetes de activos de Databricks suelen ser la herramienta elegida. Permiten describir los recursos de Databricks (como trabajos y pipelines) como archivos de origen y proporcionan una forma de incluir metadatos junto con los archivos de origen de su proyecto.
Al igual que en la etapa de desarrollo del modelo, las actividades que llevan más tiempo en los proyectos de IA generativa frente a los de ML clásico en esta etapa no son las mismas.
Pérdidas de tiempo en la implementación del modelo de ML clásico
for anidados) Pérdidas de tiempo en la implementación de modelos de IA generativa
trace decorator se puede usar en cualquier función para capturar sus entradas y salidas. Al mismo tiempo, se pueden crear spans personalizados de MLflow Traces dentro de bloques de código específicos para registrar operaciones más granulares. Solo después de usar la instrumentación para agregar una fuente de verdad confiable de las salidas del agente, los desarrolladores pueden comenzar a identificar los modos de fallo y diseñar las pruebas correspondientes.make_judge de MLflow o el SIMBAAlignmentOptimizer.La deuda técnica se acumula cuando los desarrolladores implementan una solución rápida y poco elegante a expensas de la mantenibilidad a largo plazo.
Deuda técnica del ML clásico
Dan Sculley et al. han proporcionado un gran resumen de los tipos de deuda técnica que estos sistemas pueden acumular. En su artículo “Aprendizaje automático: la tarjeta de crédito de alto interés de la deuda técnica”, las desglosan en tres grandes áreas:
La IA generativa introduce nuevas formas de deuda técnica, muchas de las cuales pueden no ser evidentes. En esta sección se exploran las fuentes de esta deuda técnica oculta.
Las herramientas son una forma poderosa de ampliar las capacidades de un LLM. Sin embargo, a medida que aumenta el número de herramientas utilizadas, pueden volverse difíciles de gestionar.
La proliferación de herramientas no solo presenta un problema de detectabilidad y reutilización, sino que también puede afectar negativamente la calidad de un sistema de IA generativa. Cuando las herramientas proliferan, surgen dos puntos de falla clave:
La solución más limpia para la proliferación de herramientas es ser estratégico y minimalista con las herramientas que utiliza un equipo.
Sin embargo, la estrategia de gobernanza correcta puede ayudar a que la administración de múltiples herramientas y accesos sea escalable a medida que más y más equipos integran la GenAI en sus proyectos y sistemas. Los productos de Databricks, Unity Catalog y AI Gateway, están diseñados para este tipo de escala.
Aunque los modelos de última generación pueden manejar páginas de instrucciones, las instrucciones demasiado complejas pueden introducir problemas como instrucciones contradictorias o información desactualizada. Este es el caso, especialmente, cuando las instrucciones no se editan, sino que simplemente diferentes expertos de dominio o desarrolladores las agregan con el tiempo.
A medida que surgen diferentes modos de falla o se agregan nuevas consultas al alcance, es tentador seguir agregando más y más instrucciones a un prompt de LLM. Por ejemplo, un prompt podría comenzar proporcionando instrucciones para manejar preguntas relacionadas con las finanzas, y luego extenderse a preguntas relacionadas con productos, ingeniería y recursos humanos.
Así como una “clase dios” en ingeniería de software no es una buena idea y debe dividirse, los megaprompts deben separarse en otros más pequeños. De hecho, Anthropic lo menciona en su guía de ingeniería de prompts, y, como regla general, tener varios prompts más pequeños en lugar de uno largo y complejo ayuda con la claridad, la precisión y la resolución de problemas.
Los frameworks pueden ayudar a que los prompts sean manejables mediante el seguimiento de sus versiones y la aplicación de las entradas y salidas esperadas. Un ejemplo de una herramienta de control de versiones de prompts es el Registro de prompts de MLflow, mientras que los optimizadores de prompts como DSPy se pueden ejecutar en Databricks para descomponer un prompt en módulos autónomos que se pueden optimizar de forma individual o en conjunto.
Hay una razón por la que el rastreo (tracing) ha estado recibiendo atención últimamente, y es que la mayoría de las bibliotecas de LLM y herramientas de seguimiento ofrecen la capacidad de rastrear las entradas y salidas de una cadena de LLM. Cuando una respuesta devuelve un error (el temido “Lo siento, no puedo responder a tu pregunta”), examinar las entradas y salidas de las llamadas intermedias del LLM es crucial para identificar la causa raíz.
Una vez trabajé en una aplicación en la que inicialmente supuse que la generación de SQL sería el paso más problemático del flujo de trabajo. Sin embargo, la inspección de mis trazas contó una historia diferente: la mayor fuente de errores era en realidad un paso de reescritura de consultas donde actualizábamos las entidades en la pregunta del usuario a entidades que coincidían con los valores de nuestra base de datos. El LLM reescribía consultas que no necesitaban reescritura o empezaba a llenar la consulta original con todo tipo de información extra. Esto solía estropear el proceso de generación de SQL posterior. El rastreo ayudó en este caso a identificar rápidamente el problema.
Rastrear las llamadas correctas del LLM puede llevar tiempo. No basta con implementar el rastreo listo para usar. Instrumentar adecuadamente una aplicación con observabilidad, utilizando un framework como MLflow Traces, es un primer paso para que las interacciones de los agentes sean más transparentes.
Los LLM son extraordinarios porque se les pueden pasar unos cuantos prompts sencillos, encadenar los resultados y terminar con algo que parece entender muy bien los matices y las instrucciones. Pero si se avanza demasiado por este camino sin basar las respuestas en los comentarios de los usuarios, la deuda de calidad puede acumularse rápidamente. Aquí es donde puede ayudar crear un “volante de inercia de datos” lo antes posible, que consta de tres pasos:
Recordé la importancia de los comentarios humanos al desarrollar una aplicación de texto a SQL para consultar estadísticas deportivas. El experto en el dominio pudo explicar cómo un aficionado a los deportes querría interactuar con los datos, aclarando qué le importaría y proporcionando otras perspectivas que yo, como alguien que rara vez ve deportes, nunca habría podido imaginar. Sin sus aportes, la aplicación que creé probablemente no habría satisfecho las necesidades de los usuarios.
Aunque capturar la retroalimentación humana es invaluable, generalmente consume muchísimo tiempo. Primero, es necesario programar tiempo con los expertos en el dominio, luego crear rúbricas para conciliar las diferencias entre los expertos y, después, evaluar los comentarios para realizar mejoras. Si la IU de retroalimentación está alojada en un entorno al que los usuarios de negocio no pueden acceder, ponerse en contacto con los administradores de TI para proporcionar el nivel de acceso correcto puede parecer un proceso interminable.
Consultar regularmente con los usuarios finales, los patrocinadores del negocio y los equipos adyacentes para ver si se está construyendo lo correcto es fundamental para todo tipo de proyectos. Sin embargo, con los proyectos de IA generativa, la comunicación con las partes interesadas es más crucial que nunca.
Por qué es importante la comunicación frecuente y de alto contacto:
Existen muchas otras formas de deuda técnica que pueden necesitar ser abordadas en proyectos de IA generativa, incluyendo la aplicación de controles de acceso a datos adecuados, la implementación de barreras de protección para gestionar la seguridad y prevenir las inyecciones de prompts, evitar que los costos se disparen, y más. Solo he incluido los que parecen más importantes aquí y que podrían pasarse por alto fácilmente.
El ML clásico y la IA generativa son diferentes variantes del mismo dominio técnico. Si bien es importante ser consciente de las diferencias entre ellos y considerar el impacto de estas diferencias en cómo construimos y mantenemos nuestras soluciones, ciertas verdades permanecen constantes: la comunicación sigue cerrando brechas, el monitoreo sigue previniendo catástrofes y los sistemas limpios y mantenibles siguen superando a los caóticos a largo plazo.
¿Quiere evaluar la madurez de su propia organización en materia de IA? Lea nuestra guía: Desbloquee el valor de la IA: la guía empresarial para la preparación para la IA.
(Esta entrada del blog ha sido traducida utilizando herramientas basadas en inteligencia artificial) Publicación original
IA generativa
January 7, 2025/8 min de leitura

