Estamos en una era donde se anuncia que los Modelos de Lenguaje (LLMs) alcanzarán la AGI (Inteligencia Artificial General) o incluso que reemplazarán al ser humano. Sin embargo, a pesar de su impresionante inteligencia, estos modelos enfrentan un problema fundamental: son incapaces de recordar nada de sus conversaciones.
Da igual lo inteligente que parezca ser un modelo; si cierras la conversación, la próxima vez que la abras, todo lo que dijiste antes se habrá olvidado.
El Problema de Aprender Cosas Nuevas
Sé que algunos pensaréis: «A mí Chat GPT me llama por mi nombre, algo deben recordar». Esta es una simulación de familiaridad que vamos a desgranar.
En principio, un modelo de lenguaje sí puede aprender cosas nuevas. El ejemplo más claro es el Fine-tuning. El problema es la escala: el Fine-tuning necesita una gran cantidad de ejemplos para que el modelo memorice.
No es un mecanismo útil para el uso cotidiano si queremos que recuerde nuestro nombre una sola vez; no podemos repetírselo miles de veces para que lo memorice. Entonces, ¿cómo resolvemos la falta de memoria a corto y medio plazo?
Mecanismo Básico de Memoria: El Bloc de Notas
Para dotar al modelo de una forma de recordar, se le proporciona un mecanismo simple que actúa como una «libretita» o un bloc de notas.
El Proceso es el siguiente:
- Una vez finalizada una conversación, se le pide al modelo de lenguaje que la revise y extraiga los elementos que considere importantes.
- Alternativamente, tú mismo puedes indicar qué elementos son cruciales (como el nombre, la profesión o los gustos del usuario).
- Con esta información, se crean pequeñas notas. Estas notas deben ser breves porque la idea es inyectar este bloque de texto en el contexto de cada nueva conversación.
De esta manera, el modelo simula ser capaz de recordar tu nombre, tu profesión o tus gustos. Este truco es efectivo para hacer que un chatbot con el que hablas habitualmente simule cierta familiaridad contigo.
Sin embargo, esto no es suficiente para aplicaciones más serias donde se requiere recordar una mayor cantidad de datos y es vital que se recuerden con precisión.
RAG: Memoria de Precisión
Para manejar un volumen de datos superior con mayor precisión, existe una solución sencilla y más robusta:
- La conversación que has tenido con el modelo se resume.
- Ese resumen se guarda en una base de conocimiento.
- Accedemos a esta base de conocimiento utilizando la técnica RAG (Retrieval-Augmented Generation).
Cuando estás hablando con tu modelo de lenguaje favorito, este ahora comprueba si existe información extra en esa base de conocimiento relativa a la pregunta que acabas de hacer, para incluirla en el contexto.
Lo ventajoso de este enfoque es que podemos combinar ambos tipos de memoria (el bloc de notas y RAG).
La Memoria para la Autorreflexión (El Paper de Google)
Si ya tenemos una memoria funcional, surge la siguiente pregunta: ¿Por qué usarla solo para recordar cosas del usuario?. ¿Por qué el modelo de lenguaje no puede usarla para recordar cosas de sí mismo? En concreto, ¿Por qué no puede recordar la forma en que ha enfrentado diversos problemas?.
Aquí es donde entra en juego el interesante paper de Google. El sistema se centra en tomar un agente dedicado a cumplir tareas en Internet.
El Mecanismo de Aprendizaje y Reflexión:
- Cada vez que el agente termina de cumplir una tarea, se evalúa si la ha completado correctamente o no, utilizando un modelo de lenguaje como juez.
- Finalmente, se resumen las acciones tomadas por el agente y el resultado obtenido.
- Esta información se utiliza como memoria para la próxima vez que se le pida una consulta similar (para ello usa un RAG)
Básicamente, el sistema utiliza la nueva consulta para realizar una búsqueda por similitud semántica (un RAG) en todas sus entradas de memoria. Recupera las entradas que más se parezcan al problema actual y elige las ‘n’ mejores para pasárselas al contexto del modelo de lenguaje.
Al pasarle a un modelo de lenguaje un listado de ideas que han funcionado y de ideas que no han funcionado, le estás proporcionando una pista importantísima sobre cómo cumplir su tarea.
Este sistema ha logrado mejorar los resultados del modelo de lenguaje en los benchmark. Además, han integrado el sistema con el concepto de Test Time Scaling, es decir, dedicar más tiempo a reflexionar sobre un problema. Esto se logra integrando dos estrategias:
- La búsqueda en paralelo de diferentes soluciones.
- El refinamiento secuencial de una misma solución (mejorándola paso a paso).
Todo esto puede sonar complejo, pero la idea central es sencilla: se busca crear una entrada de memoria que contenga los planes que funcionan y no funcionan, resumidos y esquematizados, para poder pasárselos al modelo o agente cada vez que se le encargue una tarea parecida.
El Dilema de la Memoria: ¿Cuándo Olvidar?
No todo es positivo. Ahora que podemos recordar cosas, surge un problema fundamental: ¿Cuándo deberíamos olvidarlas?.
Imaginemos un agente que realiza tareas de compra en una web. Con el tiempo, acumula muchísimas memorias. Si el dueño de la web decide cambiar su diseño, lo que antes era un buen plan ahora puede llevar al fracaso del intento de compra.
La ironía es que, para que el sistema de memoria funcione correctamente, tendremos que implementar algún mecanismo de olvido y decidir cuándo aplicarlo. Es un reto que, con suerte, exploraremos en profundidad más adelante.