Manipula la respuesta de un chatbot

¿No estáis hartos de los modelos de lenguaje se nieguen a seguir ciertas ordenes? ¿Y si hubiera alguna forma de «sugerirle» que respuesta debe de dar?

Haz click para ver el vídeo en Youtube

Estamos acostumbrados a interaccionar con los chatbots a través de una interfaces de este estilo:

Sin embargo realmente el texto que se pasa al modelo de lenguaje tiene este aspecto (si usamos Llama 3, dependiendo del LLM se usan formatos diferentes):

Se puede ver que hay etiquetas que indican donde termina el texto del usuario y donde empieza su respuesta.

El modelo de lenguaje comienza a rellenar la respuesta token a token (si no sabes que es un token puede cambiar el termino «token» por «palabra», no es una explicación exacta pero sirve para entender el texto). Para generar cada token lo que hace es analizar todo el texto completo. Es decir, analiza el texto, genera el primer token. Analiza todo el texto junto con ese primer token y genera el segundo. Ahora analiza otra vez el texto junto con los nuevos token para generar el tercero….así hasta llegar al final del texto que genera que lo indicara con <|eot_id|>.
Tras eso el sistema que ejecuta la IA esperará la siguiente texto que introduzca el usuario y al que añadirá delante una etiqueta de usuario (<|start_header_id|>user<|end_header_id|>, en nuestro ejemplo) y al final una etiqueta de asistente (<|start_header_id|>assistant<|end_header_id|>) para que el modelo pueda seguir completando a partir de ahí.

Pero si trabajamos con el modelo de lenguaje desde una API, en lugar de desde la interface gráfica, nada nos impide «engañarle» manipulando su respuesta. Podemos añadir nosotros la etiqueta de asistente y poner lo que queramos detrás de ella:

Y el modelo de lenguaje se verá «obligado» a continuar esa respuesta:

Este truco es útil cuando necesitas que el modelo se pliegue a alguna condición que por algún motivo se niega cumplir. Por ejemplo a mi me pasa con algunos modelos que les pides que creen solo código y se empeñan en añadir texto delante. En el vídeo podéis ver un ejemplo en mayor detalle.