Multi-agent systems, the path to AGI?

Multi-agent systems, the path to AGI?

May 17, 2024

Los grandes modelos de lenguaje (LLMs) pueden ser mucho más que un chatbot, que una interfaz conversacional. Con la tecnología existente actualmente (mayo de 2024), hay gran cantidad de tareas que pueden ser automatizadas o mejoradas a partir de su implementación. Sin embargo, para lograr estos resultados, todavía existen varios desafíos técnicos a resolver. Si pensamos en la versión más simple de un LLM (una interfaz conversacional tipo Chat GPT) podemos decir que carece de memoria, que muchas veces alucina y que no puede realizar ninguna acción más allá de la comunicación a través del lenguaje.


Agentes

Para superar estas barreras se fueron (y están) desarrollando distintas herramientas y paradigmas. En nuestra opinión, uno de los más prometedores son los sistemas multiagente. Pero ¿qué es un agente? Podríamos decir que es un ente autónomo, capaz de desarrollar interacciones más complejas que la conversación, capaz también de automatizar tareas y hacerlo de manera tal que el resultado sea igual o mejor al de un ser humano. Para poder construir algo así son necesarios distintos componentes que veremos a continuación.


RAG

Los RAG (Retrieval Augmented Systems) fueron una de las primeras mejoras que recibieron los LLMs. Su aplicación original tenía que ver con que los modelos que aparecieron estaban entrenados con información hasta una determinada fecha, por lo cual para tener data más actualizada había que proveerla explícitamente. Otro de los casos más comunes de utilización de los RAG tiene que ver con dotar al LLM de acceso a información privada, ya sea de una persona o una empresa, que tampoco haya sido parte del entrenamiento del modelo.

Los RAGs consisten en distintas técnicas para procesar, indexar y facilitar la búsqueda de texto a partir de una base de datos. Como vimos, es una manera de proveer al LLM de acceso a más información de la que posee por su propio entrenamiento. Básicamente lo que hacemos es a través de distintos mecanismos buscar en la base de datos la información relevante para cada interacción y pasarla al modelo como contexto. Si te interesa saber más, en esta nota tenemos una visión general de los distintos componentes de un sistema RAG y en esta otra vemos más en profundidad algunas de las técnicas que existen para desarrollarlos. 

Sin embargo, aun con una buena implementación, un RAG no es más que una manera de sumar información no presente en el entrenamiento sin aumentar cualitativamente las capacidades del LLM.


Funciones

En algún momento (más temprano en OpenAI, más recientemente en el resto) los LLMs fueron dotados de la capacidad de llamar a funciones externas. Estas funciones pueden ser cualquier cosa, desde código Python a llamados a APIs externas. Pensemos en algo tan sencillo como saber qué hora y qué día es actualmente. Esa información no fue parte del entrenamiento, con lo cual sin el uso de una herramienta externa el modelo nunca podría contestar correctamente.

Agregar funciones externas es posible gracias a dos virtudes de estos modelos. Por un lado, que funcionan naturalmente bien con formatos tipo JSON, por lo cual la comunicación desde y hacia el LLM se vuelve muy sencilla. Pero por otro lado, los LLMs también son bastante eficientes a la hora de entender las intenciones del usuario. Esto implica que si definimos precisamente con lenguaje natural el objetivo de una función, es probable que estos modelos puedan interpretar en qué casos usarla y transformar nuestro pedido en un JSON con el cual llamar a una API o función.

Sin embargo, un escenario es cuando tenemos un LLM con 1 o 2 funciones auxiliares (por ejemplo un buscador web y un intérprete de código) y otro muy distinto es cuando queremos montar un sistema con una variedad de funciones y llamados a APIs. El diseño de sistemas de este estilo es bastante más complejo y ahí es donde entran en consideración los enfoques multiagente que veremos más adelante.


Memoria

Otro de los desafíos que aparecieron con la expansión en el uso de los LLMs tiene que ver con la memoria. Lo que buscamos es que el modelo recuerde nuestras preferencias o detalles importantes de conversaciones anteriores sin tener que estar repitiendo a cada paso.

Memoria, atención y ventana de contexto son conceptos que están estrechamente relacionados. Si un LLM tuviera una ventana de contexto infinita (como es la promesa o el horizonte que nos propone Google a mayo de 2024) eso implicaría dos cosas. Por un lado, podríamos pasar la totalidad de las conversaciones, interacciones y preferencias del usuario dentro de cada mensaje. Pero también querría decir que los mecanismos de atención alcanzaron un nivel de precisión que en toda esa maraña (casi) infinita de texto, el LLM va a saber a qué prestar atención en cada caso y para cada interacción.

Sin llegar a este escenario, existen distintas implementaciones que tratan de simular una memoria para el LLM. La más sencilla consiste en que el usuario explicite qué elementos de la conversación quiere que el modelo recuerde. Un paso más consiste en establecer mecanismos para que el propio LLM vaya resumiendo tramos de la conversación, destilando tópicos y almacenando eso en la memoria, o bien que trate de recordar detalles que le parezcan relevantes. De esta manera, iríamos construyendo una base de datos de información del usuario que estaría disponible en todo momento como contexto de cada interacción. 

Estas técnicas no son perfectas y requieren del uso de funciones auxiliares y de mecanismos similares a los RAGs a medida que esta base de datos va creciendo y se sofistica. A su vez, empiezan a aparecer otros desafíos como la dimensión temporal. ¿Qué pasa si algo que estaba grabado en la memoria como una preferencia cambió en el tiempo? Al momento de escribir esta nota (mayo de 2024), OpenAI acaba de anunciar la incorporación de memoria para la versión paga de Chat GPT 4 y el modelo con mayor ventana de contexto tiene 1 millón de tokens (Gemini Pro 1.5).


Planificación

Sin embargo, una de las herramientas que más estrechamente se vincula a la idea de los agentes tiene que ver con la planificación. Por planificación nos referimos a todos los paradigmas que tratan de introducir modelos o algoritmos de pensamiento o razonamiento para los LLMs.

Los primeros casos de paradigmas de planificación aparecieron tempranamente, con las técnicas derivadas del prompt engineering. Uno de los más famosos consistía en pedirle a un LLM que pensara paso a paso antes de dar una respuesta. La sola introducción de esa instrucción en el prompt mejoraba notablemente el rendimiento del modelo.

La formalización de ese mecanismo derivó en lo que se llamó cadenas de pensamiento (chain of thoughts).  A partir de este, aparecieron una serie consecutiva de paradigmas como árboles de pensamiento, grafos de pensamiento, algoritmos de pensamiento, etcétera. En todos los casos, el proceso consiste en subdividir la tarea original en tareas más pequeñas e ir explorando distintos caminos para alcanzar una solución.

Para que esto sea posible, hubo que desarrollar otra rama paralela que tiene que ver con la autorreflexión de los modelos. Es decir, la capacidad de que un LLM observe el resultado que produjo y pueda ser crítico con el mismo. El primer paradigma que surgió para esto (todavía bastante vigente a mayo de 2024) fue el de ReAct, por Reason and Act. Consiste sencillamente en la instrucción de dividir una tarea en partes, ejecutar cada una de ellas e inmediatamente después evaluar si cumplió con el objetivo inicial y, en caso de que no, volver a dividir la tarea en partes más pequeñas y ejecutarla con el feedback del primer paso.

A partir de la introducción de estas técnicas de planificación es que empezamos a hablar de agentes. Sin embargo, para que estos agentes puedan lograr mayores grados de autonomía, no solo tenemos que combinar todas las técnicas precedentes sino que aparecen nuevos desafíos a resolver. Ahí es cuando surgen los enfoques multiagente.


Multiagentes

Partiendo del esquema anterior, podemos pensar que tenemos un LLM al que dotamos de herramientas (llamados a funciones o conexiones con APIs externas), de memoria (que puede ser de corto plazo para recordar lo más relevante de una interacción en particular o de largo plazo tipo RAG para conectarse con el historial de conversaciones y preferencias) y paradigmas de planificación (con subdivisión de tareas y autorreflexión sobre los resultados). Al sumar todas estas partes, podemos construir agentes con un grado de autonomía considerablemente alto.

Sin embargo, a medida que vamos complejizando las tareas que le pedimos al agente, vemos que aparecen algunos problemas:

  • La definición de cuándo usar cada herramienta ya no es tan clara

  • Puede haber superposición de llamados a funciones

  • Esto puede resultar en la necesidad de definir dependencias entre las funciones o establecer mecanismos de paralelización para optimizar los tiempos de respuesta

  • Lo almacenado en la memoria empieza a ser cada vez más grande

  • Para algunas tareas o llamados a funciones podemos requerir de ciertos elementos de esa memoria mientras que en otros no

  • Esto puede generar confusiones o ineficiencias a la hora de buscar dentro de esa memoria lo relevante para cada paso

  • Tenemos definido un solo mecanismo de planificación para todas las tareas

  • Algunas tareas funcionan mejor con ciertos paradigmas de planificación resultando en la pérdida de eficiencia del mismo

Teniendo esto en cuenta es que surge el enfoque multiagente. En este caso definimos un agente para cada una de las tareas que necesitamos cumplir. Cada agente tendrá sus propias herramientas, memoria y paradigma de planificación. Algunos serán más complejos, otros serán más sencillos. Unos tendrán modelos más avanzados, otros modelos más sencillos pero con mejores mecanismos RAG. La interacción con el usuario final la podemos pensar como otra tarea, con su agente específico que no solo interactúa con el usuario y traduce los pedidos sino que también tiene capacidad de verificar los resultados del resto de los agentes y ser crítico con los mismos.


El futuro

En esta nota hicimos un repaso por los distintos componentes que se fueron agregando a los modelos para avanzar en el camino hacia entes autónomos basados en LLMs, que puedan automatizar tareas con un nivel de eficiencia similar o mayor al de un humano. Todavía hay muchos desafíos a superar pero la velocidad a la que se viene avanzando, creando nuevas herramientas y superando obstáculos, es muy alta.

A la par de los desafíos técnicos se encuentra la necesidad de bajar tanto los costos de entrada y salida de los modelos como la velocidad a la que responden. Este proceso también se encuentra avanzando a pasos agigantados, ya sea por desarrollo de hardware como por optimización de las distintas etapas de los modelos.

La complejidad de desarrollar agentes o sistemas multiagente sumado a su costo y su imprecisión hacen que todavía los casos de uso en la industria donde esto es rentable sean muy pocos. Sin embargo, de continuar esta curva de progreso tecnológico y baja de costos, podemos esperar que en los próximos meses eso empiece a cambiar aceleradamente.



Contact us to start the
Discovery phase

Designed by jln__studio

Contact us to start the
Discovery phase

Contact us to start the
Discovery phase

Babarogic © 2023. Designed by Goran Babarogic