Vivimos en un momento en el que la digitalización de todos los procesos de nuestro negocio es crucial si queremos tener un control sobre los mismos y saber qué partes podemos mejorar de forma más efectiva, pudiendo medirlos mediante la monitorización e implementar soluciones de inteligencia artificial que de otra manera sería imposible. Para ello, implementamos plataformas y aplicaciones web que sirven como vía para que tanto miembros de la empresa como clientes puedan interactuar entre sí. Pero claro, si estas herramientas fallan, es crucial que podamos saberlo con la mayor brevedad posible, ya que cada minuto que no estén operativas o funcionen de forma errática, impacta tanto en el tiempo de trabajo como en posibles ventas perdidas.
Para lograr que este tiempo se reduzca al mínimo, entran a jugar las sondas sintéticas, herramientas que interactúan con estas plataformas imitando el comportamiento humano. Y claro, en Datadope, como buenos adictos a la monitorización y a los datos, hemos desarrollado nuestra propia herramienta: Synthetix SaaS, un producto del que estamos muy orgullosos y del que nos gusta sacar pecho. Pero como nos gusta detectar problemas y adelantarnos a ellos, sabemos de buena mano que de nada te sirve tener al niño más alto, más guapo, con los ojos más azules y que trabaje con la mejor relación calidad/precio si posibles clientes potenciales ya tienen una solución implementada y no se quieren arriesgar a los problemas que conlleva una migración, como son los tiempos (punto más crucial tratándose de una solución encargada de monitorizar la disponibilidad) y los costes de la misma. Así que para solucionar este problema, hemos creado a un Super Becario capaz de bajar los tiempos de migración en un 80% y los costes a un hecho anecdótico gracias a la potencia de los LLMs.
Pero antes que nada, toca dar un poco de contexto y explicar, para aquellos que anden un poco perdidos, qué es cada cosa y cómo funciona.
Qué es una sonda
Las sondas son programas automáticos que imitan el comportamiento de los usuarios reales al interactuar con sistemas o aplicaciones. Pueden ser configuradas para que sigan pasos, rellenen campos, hagan clicks en zonas de una web, hagan login, se desconecten, y en resumen, todo aquello lo que haría cualquier usuario. Ayudan a asegurar que el servicio esté en buen estado desde el punto de vista del usuario, aportando valor al negocio y tranquilidad al jefe. En Datadope, diferenciamos entre dos tipos de sondas sintéticas: API y BROWSER.
Tipos de sondas
Sondas API
Sondas BROWSER
Sondas API
Las sondas API simulan la interacción de una aplicación con una API. Envían solicitudes a la API y miden cuánto tarda y cómo responde, controlando así la disponibilidad. Permiten la recolección de datos aportados en la respuesta de pasos anteriores (tokens, usuarios…) para usarlos en los pasos posteriores. Además, permiten comprobar que las respuestas son lo que se espera mediante el uso de assertions.
Por ejemplo, supongamos que estamos usando una API a la que le enviamos fotos de perritos y de gatitos y la API nos dice si la foto que ha recibido es un gatito o un perrito. Antes de poder enviar la foto, debemos obtener un token, que recibimos al enviar el usuario y la contraseña al endpoint habilitado para esto. Entonces, una sonda API que confirma el correcto funcionamiento de la API seguiría los siguientes pasos:
- Envío usuario y contraseña al endpoint de login
- Recibo token y lo paso al siguiente paso.
- Envío foto de perrito a la API pasándole el token de autenticación capturado por el paso anterior, y espero respuesta.
- Si la respuesta es “perrito”, todo ha funcionado correctamente. Si la respuesta es diferente o se ha detectado algún fallo, hago saltar una alarma.
De esta forma no solo nos aseguramos que la API está disponible, si no que funciona como esperamos.
Sondas BROWSER
Las sondas BROWSER simulan el comportamiento de los usuarios en una aplicación web (hacer una compra, rellenar un formulario, hacer login, etc). Estas sondas ayudan a detectar problemas en la aplicación en diferentes navegadores y dispositivos, asegurando una experiencia de usuario consistente y satisfactoria. Para poder detectar con mayor claridad dónde ha ocurrido el error, durante la ejecución se graba un video que permite identificar puntos débiles o fallos en la misma.
Qué es un LLM
Los LLM (Large Language Model) son modelos de IA generativa que reciben una entrada y, a partir de la misma, generan un texto como output. Para resolver nuestro problema, hemos hecho uso de las capacidades que brinda un modelo tan potente como es GPT-4o de OpenAI. Este modelo está basado en la tecnología de Transformers, una tecnología encuadrada dentro del campo de Deep Learning.
Eso suena muy bien…Pero ¿Cómo funciona?
Llegados a este punto, me sería muy sencillo darte la chapa con terminología que sólo unos apasionados de este campo estarían dispuestos a tragarse, así que voy a intentar hacerlo más asimilable para aquellos que quizás no dispongan de un perfil técnico avanzado. Para ello, compararé el funcionamiento de GTP-4o con el del protagonistas de una de las películas más originales jamás creadas: Memento. Si no la has visto, de nada por el plan para el finde ;-).
Para aquellos que no la hayáis visto este peliculón de Christopher Nolan, os dejo un enlace a filmaffinity para que leáis la sinopsis y entendáis a qué hago referencia para comprar al protagonista con el modelo: Memento.
A grandes rasgos, GPT-4o recibe un input, que puede ser un texto o una imagen, y genera un texto de salida. Pero para que esto ocurra, ha tenido que haber sido previamente entrenado. Pero, ¿con qué?.
Datos de entrenamiento
Los LLMs aprenden a generar texto coherente y relevante a partir de un corpus masivo de datos de entrenamiento. Estos datos son colecciones de texto que el modelo utiliza para identificar patrones, estructuras lingüísticas y significados.
Características de los datos de entrenamiento
Al igual que los humanos tenemos interiorizada la expresión “somos lo que comemos” (aunque la mayoría de los mortales no le hagamos el más mínimo caso), los LLMs se comportan en función de los datos con los que son entrenados. Por eso, al igual que si queremos tener buena salud debemos tener una dieta equilibrada, si queremos un buen modelo es imprescindible que los datos de entrenamiento cumplan con estas 4 características:
Diversidad
Deben incluir una amplia variedad de textos (libros, artículos, sitios web) para cubrir múltiples dominios del conocimiento.
Volumen
Deben ser extremadamente masivos, con trillones de palabras (o tokens), para garantizar que el modelo pueda generalizar de manera efectiva.
Representatividad
Deben reflejar la complejidad del lenguaje humano en diferentes contextos y estilos.
Curación
Se filtran y procesan para garantizar que los datos sean relevantes y de calidad.
Si conseguimos que nuestro datos de entrenamiento cumplan con estas características, tendremos muchas posibilidades de obtener un modelo que tenga un buen rendimiento en términos generales. Y sé que llegados a este punto te estarás preguntando con qué datos ha sido entrenado GPT-4o, y lamento decirte que,al igual que en los últimos modelos anteriores, OpenAI no ha liberado la información sobre el proceso de entrenamiento seguido para entrenar a este modelo, pero sí podemos confirmar que ha usado datos públicos tales como:
- Sitios web públicos:
- Wikipedia, blogs, foros como Reddit.
- Sitios de referencia técnica y tutoriales.
- Libros y literatura:
- Obras de dominio público.
- Libros disponibles bajo licencias abiertas.
- Documentación técnica:
- Manuales, guías de programación y documentación de software.
- Artículos académicos:
- Textos científicos y de investigación accesibles en la web abierta.
- Diálogos simulados:
- Colecciones sintéticas diseñadas para representar conversaciones humanas.
- Noticias y artículos de actualidad:
- Reportajes y análisis accesibles públicamente.
Estos datos, como es lógico, tienen que ser limitados, y una vez el modelo ha sido entrenado con esos datos, ya no puede seguir aprendiendo, por lo que a partir de una fecha límite, el modelo lo desconoce absolutamente todo (como el protagonista de nuestra película). Los datos de entrenamiento de GPT-4o tienen como fecha límite octubre de 2023.
Y sé que ahora me diréis “pero vamos a ver, si ayer le pedí que me diera una lista con las 10 mejores películas de este año.. ¿cómo puede saberlo si solo tiene datos hasta octubre de 2023?”. Pues bien, aquí es donde entra a jugar “la venta de contexto”.
Ventana de contexto
La ventana de contexto es la cantidad de tokens que el modelo puede procesar y considerar simultáneamente para generar su salida. Un token puede ser una palabra, un fragmento de palabra o un carácter especial dependiendo de la tokenización utilizada (tokenización = convertir texto de entrada en tokens). Cuando el modelo genera una respuesta o realiza una tarea, analiza los tokens dentro de esta ventana para identificar patrones, contexto y relaciones que determinan el contenido de su salida.
¿Qué capacidades puede otorgar esta ventana de contexto?
- Capacidad de análisis: Cuanto mayor es la ventana de contexto, más texto previo puede considerar el modelo para entender mejor la conversación o la tarea. En GPT-4, la ventana de contexto es de 128.000 tokens (aprox. un libro de 350 páginas).
- Memoria a corto plazo: El modelo utiliza la ventana de contexto para «recordar» información de las interacciones previas dentro de un solo bloque de texto. Por ejemplo, cuando tenemos una conversación con ChatGPT, cada vez que enviamos un mensaje, se le envía al modelo toda la conversación, permitiéndole saber qué se ha dicho previamente. De la misma forma, cuando le preguntas algo que es posterior a sus datos de entrenamiento, de actualidad o información que ha podido ser actualizada, la aplicación realiza una búsqueda en internet y se le pasa la información actualizada como parte del contexto que debe analizar para que sepa qué debe responderte (como ese amigo que tenemos todos que si te oye decir algo de lo que no tiene ni idea, hace una búsqueda en google para poder darte la razón o llevarte la contraria).
Por desgracia, esto tiene unos límites prácticos, ya que si sobrepasas la ventana de contexto, los tokens más antiguos (el principio del texto) se descartan, lo que puede llevar a pérdidas de información relevante.
Al igual que GPT, nuestro protagonista tan solo tiene una ventana de contexto de entre 5 a 15 minutos. Toda aquella información que pasa ese umbral de tiempo, es información que no puede recordar debido a su amnesia anterógrada. Por este motivo, la información que recibe en los primeros minutos es esencial y determina su comportamiento futuro. En el caso de GPT, esa información la llamamos “prompt”. Pero, ¿qué es un prompt?
Prompt
Un prompt es la entrada inicial que se proporciona para que genere una respuesta. Es, en esencia, la instrucción o contexto que guía al modelo en la tarea que debe realizar. El prompt es parte del contenido que ocupa la ventana de contexto del modelo. Esto significa que:
- Cuanto más detallado sea el prompt, mayor será la cantidad de tokens consumidos en la ventana.
- Un prompt bien diseñado puede maximizar la eficiencia de la ventana de contexto, proporcionando toda la información relevante sin desperdiciar espacio.
Un buen prompt debe tener estas 3 características:
- Precisión: Reduce la ambigüedad, mejorando la calidad de las respuestas.
- Eficiencia: Minimiza el uso innecesario de tokens dentro de la ventana de contexto.
- Control: Permite al usuario guiar el tono, estilo y enfoque del modelo.
Técnicas de Prompt Engineering
Existen muchas técnicas que permiten mejorar nuestros prompts, y el objetivo de este artículo no es que las conozcas todas. Tan solo pondré unos ejemplos para que puedas comprobar cómo haciendo ciertos cambios en nuestros prompts, podemos tener mejores resultados de nuestros modelos.
Por ejemplo, no vamos a tener el mismo resultado diciendole esto:
Que diciendoselo de esta forma, donde le damos un rol, un contexto y una tarea clara y específica:
Thinking Step by Step
Esta es un técnica de Prompt Engineering que altera la forma en la que el modelo razona. En lugar de dar una respuesta directa, aplica un razonamiento paso a paso de la tarea, lo que puede llevar a una respuesta más precisa.
Vamos a ver cómo cambia la respuesta del modelo tan sólo incorporando esta frase:
Y con la frase mágica:
Few-shot
Esta técnica consiste en dar unos cuantos ejemplos de qué es lo que esperamos como respuesta en función de lo solicitado.
One-shot
Esta técnica consiste en dar un único ejemplo de qué es lo que esperamos como respuesta en función de lo solicitado
Existen más técnicas de prompt engineering, pero espero que con estos ejemplos comprendas la importancia que tiene el prompt en los resultados obtenidos. En el caso de GPT-4o podemos pasarle como prompt tanto imágenes como textos.
Pero esta no es la única forma de modificar el comportamiento de un modelo. Existe una forma de modificarlo de forma permanente para que se ajuste a lo que estamos buscando: el Fine-Tuning.
Fine-Tuning
El Fine-Tuning consiste en coger un modelo previamente entrenado y volverlo a entrenar ajustándose a un nuevo conjunto de datos. De esta forma, alteramos el comportamiento del modelo de forma permanente. Gracias a esto, no haría falta hacer uso de técnicas de prompting, ya que habríamos ajustado el modelo a nuestro caso de uso, pero esta técnica requiere una enorme cantidad de datos, incrementando tanto los costes de generar un dataset lo suficientemente rico como para que el modelo se ajuste al caso que queremos como los costes que supondría reentrenar alguno de estos modelos (pudiendo alcanzar cifras millonarias debido al hardware y energía necesarios).
No voy a entrar en mayor profundidad en esta parte porque OpenAI no da la opción de poder reentrenar a GPT-4o. Digamos que al igual que los tatuajes que el protagonista de Memento se va haciendo en el cuerpo hace que cambie su actitud de forma permanente, ocurre lo mismo con el Fine-Tuning en los LLMs.
Todo esto está muy bien, pero ¿cómo interactúo con un LLM?
Existen bibliotecas con las que podrás interactuar con distintos LLMs, algunas oficiales de las propias compañías, pero en este caso, he usado LangChain por los siguientes motivos:
- Integración con múltiples herramientas y modelos: LangChain facilita la integración de modelos de lenguaje con una variedad de servicios y herramientas, como bases de datos, APIs de terceros, o incluso con otros modelos de IA, permitiendo construir flujos de trabajo más complejos y personalizados sin tener que gestionar manualmente cada componente.
- Facilidad para manejar el estado de la conversación: Una de las principales características de LangChain es su capacidad para mantener contextos largos y gestionar el estado de una conversación a lo largo de múltiples interacciones, lo cual no es fácil de manejar con la librería oficial de un modelo de lenguaje por sí sola.
- Facilidad de creación de agentes y flujos automatizados: LangChain tiene abstracciones para crear agentes conversacionales que pueden interactuar con otras APIs o bases de datos, tomar decisiones en función de los datos recibidos y adaptarse a diferentes entornos, lo que simplifica la creación de aplicaciones más robustas sin tener que implementar toda la lógica por cuenta propia.
Vale, pero ¿qué habéis hecho con todo esto?
Pues hemos usado toda esta tecnología que os acabo de contar para reducir tanto tiempos como costes en los procesos de migración de sondas sintéticas de diferentes orígenes, a uno de nuestros productos estrella: Synthetix SaaS. En Datadope, somos conscientes de lo valioso que es que no haya fallos durante una migración y que ésta dure lo mínimo e imprescindible. Por eso, hemos usado todo esto para reducir el impacto y los costes de migración a lo mínimo posible.
Además, sabemos lo importante que es evitar desperdiciar talento en tareas repetitivas, y queremos que nuestro personal especializado esté donde de verdad puede aportar valor. Creemos que nadie pasa años formándose y labrándose una carrera profesional para acabar convertido en el robot de Rick y Morty que pasa la mantequilla.
Espero que con esta breve entrada de blog haya despertado vuestra curiosidad sobre los LLMs y que os pongáis a investigar sobre cómo podéis aplicar esta tecnología a vuestro caso de uso. Muchas gracias por vuestro tiempo y no olvidéis echar un vistazo a nuestro blog de vez en cuando, mis compañeros tienen muchas cosas interesantes de las que hablaros.