De cero a experto: Agentes AI

Nos han dicho que la inteligencia artificial es el presente y el futuro de la automatización y ha llegado para “impulsar” nuestra productividad e incluso sustituirnos. La realidad es muy distinta a lo que nos cuentan y la inteligencia artificial ha resultado ser bastante parecida al alumno más vago del curso: muchas veces alucina, no hace bien sus tareas porque ni siquiera entiende en qué consiste su trabajo. , es terrible en matemáticas, tiene dificultades para usar herramientas y no comunica sus respuestas. Entonces, ¿existe alguna manera de hacer que la IA sea realmente útil en el lugar de trabajo? La respuesta es sí, y para lograrlo debes dominar los sistemas multiagente, y al final de este vídeo serás un experto en ellos.

Los Large Language Models, o Large Language Models, son el principal exponente de la inteligencia artificial moderna. Y la industria está utilizando estas herramientas para llevar la productividad y la automatización al siguiente nivel. Desafortunadamente, en su caso de uso más común, los chatbots, no son muy capaces ni efectivos y esta herramienta conversacional es en realidad muy limitada. Y es aquí donde surge el concepto de agentes, un software capaz de utilizar LLM como motor de razonamiento y que, dependiendo del resultado del modelo, es capaz de ejecutar acciones por sí solo, ya sea recogiendo datos o interactuando con herramientas, es decir. , , funciones de código o servicios externos, realizando tareas complejas de principio a fin. Puede programar un agente para recibir los últimos informes financieros de la empresa, iniciar una rutina estadística que actualice los pronósticos fiscales, comunicar los resultados a los ejecutivos y cambiar los objetivos corporativos.

¿ Y cómo puedo crear un agente así? Esta es una tarea muy sencilla. Para lograr esto, puede utilizar herramientas o bibliotecas que le faciliten interactuar con el LLM y orquestar todas las tareas y herramientas que el agente puede ejecutar. Las bibliotecas más famosas son llama-index, LangChain y muchas otras, y para los propósitos de este video, nos centraremos en la implementación usando LangChain. ¡No es magia, pero casi! Realicemos entonces la implementación a través de dos pasos: primero plasmamos en un aviso el rol del agente o su personalidad y las metas u objetivos que debe cumplir. En nuestro caso estamos creando un agente encargado de ejecutar cálculos matemáticos, ya que bien sabemos que los LLM son pésimos en este campo. Y creamos nuestro mensaje usando la abstracción `ChatPromptTemplate` de LangChain , y especificamos que además de nuestra entrada, puede recibir un historial de chat o `chat_history`, y un `agent_scratchpad`. ¿ Qué es este bloc de notas? Es un texto generado automáticamente por la biblioteca, donde se transmite al LLM la información necesaria para la ejecución del agente.

Pueden ser razonamientos previos o la descripción de las herramientas disponibles para su uso. Piense en ello como un cuaderno que se actualiza durante la ejecución. Y segundo, se debe implementar el código de estas herramientas, poniéndolas a disposición del agente. Por ejemplo, herramientas de consulta de bases de datos, herramientas de envío de correo electrónico o herramientas de extracción de datos web, entre muchas otras. En nuestro caso, crearemos una herramienta para realizar cálculos matemáticos. Como puede ver, las herramientas no son más que clases o funciones que especifican y documentan bien sus argumentos de entrada y salida. Luego, nuestra herramienta espera una operación matemática escrita en código Python, y del método `eval` obtiene el resultado esperado. Con nuestra herramienta implementada, creamos una `StructuredTool`, una abstracción de LangChain, que encapsula las funciones y las documenta bien, para que los agentes puedan utilizarlas, simulando un manual de usuario. Y listo, ahora tenemos los ingredientes necesarios para hacer realidad nuestro agente. Ahora solo es cuestión de juntar las piezas usando las abstracciones proporcionadas por LangChain para este propósito.

En este caso, usamos la función `create_openai_functions_agent` y especificamos qué modelo LLM será el motor de razonamiento, qué herramientas están disponibles y cuál es el indicador del sistema. En nuestro caso, utilizaremos el modelo GPT-4 de OpenAI como centro de nuestra pequeña implementación. Finalmente, creamos un `AgentExecutor`, una clase que sirve como motor de ejecución del agente y coordina las entradas, salidas, herramientas y tareas que el agente debe realizar para cumplir su objetivo. Y listo, en tan solo unas pocas líneas de código, hemos creado nuestro primer agente, capaz por fin de realizar operaciones matemáticas precisas.

Pongámoslo a prueba, será capaz de calcular el área de un círculo de radio 3. Y como vemos, según su respuesta, hizo el producto de pi por el radio al cuadrado, dándonos un valor de 28,26 unidades cuadradas, y mostrándonos que funciona correctamente. Siguiendo estos mismos pasos, podrás agregar más funciones para que el agente pueda automatizar procesos más complejos y podrás mejorar enormemente su efectividad con la ayuda de la IA. Desafortunadamente, a medida que aumentan los roles, se llegará a un punto en el que los agentes no podrán continuar y la complejidad asociada con el logro de sus objetivos se volverá inmanejable para los LLM. Es posible que el LLM no pueda seleccionar la herramienta precisa para el caso de uso, puede confundir qué datos enviar a la herramienta o la cantidad de tokens enviados en cada paso puede volverse enorme.

Y el agente puede entrar en un ciclo infinito de prueba y error, lo que resultará en sobrecostos y, al final, posiblemente no alcance una ejecución exitosa. Recordemos que el costo de LLM está asociado a la cantidad de tokens utilizados, y bajo estas condiciones, seguramente estarías desperdiciando montañas de dinero. ¿ Cómo podemos entonces superar estas limitaciones? La respuesta es sencilla y tiene nombre propio: modernos sistemas multiagente. Un sistema multiagente es un conjunto de agentes especializados que trabajan juntos para la ejecución exitosa de una tarea compleja, a menudo simulando cómo los humanos dividimos el trabajo. Al igual que en un equipo de desarrollo, un miembro del equipo hace el diseño, otro gestiona los procesos, otro hace el despliegue del código, otro hace las pruebas, etc, etc, etc.

De esta forma, cada agente tiene una misión específica que cumplir, y un número pequeño y limitado de herramientas a utilizar. La especialización limita el dominio en el que cada agente tiene que trabajar, reduciendo en gran medida no sólo la cantidad de tokens que el agente debe procesar, sino también la probabilidad de error. Luego programemos un sistema multiagente y llevemos las capacidades de nuestra demostración al siguiente nivel: crearemos un sistema capaz de explicar conceptos matemáticos complejos por escrito y gráficamente.

Para conseguirlo, también existen innumerables bibliotecas, entre las que destacan CrewAI, AutoGen y LangGraph. Para nuestra demostración, utilizaremos LangGraph. Entonces tendremos tres agentes: El primero es un profesor, que buscará en sus datos de formación y en la web los conceptos detrás de un tema matemático que queremos explicar. En segundo lugar, contamos con un desarrollador que implementará el código Python para simular el concepto matemático solicitado. Y finalmente, el tercer agente es un supervisor encargado de orquestar los esfuerzos de los especialistas y lograr el objetivo. Empecemos con nuestro primer agente: creamos el aviso, estableciendo su personalidad y objetivos. En este caso se trata de un profesor encargado de explicar conceptos matemáticos complejos. Y al igual que en nuestro ejemplo anterior, nuestro agente tendrá acceso al historial de chat y al bloc de notas que se agregarán en la entrada enviada al LLM. El profesor tendrá acceso a una herramienta prediseñadas disponible dentro de las capacidades de LangChain.

Esta herramienta utiliza "TavilySearch", un motor de búsqueda que permite a los agentes explorar la web y llenar cualquier vacío que tengan en sus datos de capacitación. Ahora con estos dos elementos, podemos proceder a crear el Agente, de la misma forma que en nuestro último año. Posteriormente, creamos la personalidad y objetivos de nuestro agente desarrollador, especialista en crear código Python capaz de simular e ilustrar los complejos conceptos matemáticos solicitados. Luego creamos una instancia de nuestro `ChatPromptTemplate` con los mismos parámetros que nuestros agentes anteriores. Procedemos ahora a implementar las herramientas, en este caso un método en Python que permitirá al agente ejecutar código y mostrar gráficos con la ayuda de `NumPy` y `Matplotlib`, dos bibliotecas para análisis estadístico y matemático, sumamente populares en Pitón.

Y nuevamente creamos una instancia del agente junto con sus herramientas y su `AgentExecutor`. Y llegó el momento de crear nuestro supervisor, un agente cuyo trabajo es bastante simple: definir a qué miembro del equipo llamar para resolver el problema dado. En nuestro caso, podrás llamar al profesor para que te explique los conceptos, y una vez claros, al desarrollador para que los demuestre desde una perspectiva gráfica. Es tu trabajo también decidir cuándo el trabajo se ha completado con éxito y finalizar la acción del equipo. Al crear el supervisor, aprovechamos la funcionalidad de OpenAI llamada "llamada a función". Esta capacidad le permite especificar funciones que el LLM puede ejecutar de forma remota y devolverá una respuesta estructurada, en este caso, un JSON con un atributo "siguiente", que especifica la decisión del supervisor sobre a quién se debe llamar ahora para ejecutar la siguiente paso.

En el mensaje del supervisor, especificamos a qué miembros del equipo se puede llamar y les pedimos que cuando consideren que han completado la tarea, devuelvan un mensaje "FINALIZAR". El supervisor se ejecutará a través de una cadena LangChain, que especifica su aviso, el LLM junto con su configuración, en este caso, la ejecución de la función definida, y finalmente el procesamiento de la respuesta generada en formato JSON. Ahora debemos juntar todas las piezas mediante un gráfico LangGraph, es decir, una estructura que a base de nodos y aristas especifica cómo interactúan nuestros agentes. Cada nodo corresponde a un agente disponible y cada borde representa la función de activación de los nodos, en este caso, la decisión del supervisor. LangGraph permite implementar gráficos con estado, es decir, conserva en memoria el historial de cada salto entre nodos, además de la salida de cada paso ejecutado. Permitiendo la reejecución de pasos independientes del gráfico, y ayudándonos a comprender cómo se transformaron los datos a lo largo del viaje entre aristas y nodos.

Lo logra creando una instancia de una clase de estado, un objeto compartido y modificado durante la ejecución, que en caso de error conserva los datos del último paso exitoso. Implementemos entonces el estado de nuestra aplicación, en este caso una clase que se asemeja a un diccionario, y que preserva el historial de mensajes, y el siguiente paso a ejecutar. Todos los mensajes, es decir, interacciones humanas y mensajes generados por agentes, se agregarán al historial de chat y servirán como entrada para que se ejecute el siguiente nodo. Y ya casi tenemos todo listo para construir nuestro gráfico, sólo nos falta un pequeño detalle: Debemos crear una función que especifique cómo se verán los nodos del gráfico, y que se encargue de convertir la respuesta del agente en un `AIMessage`, que es decir, una entrada agregada al historial de chat que forma parte del estado del gráfico. Esta función espera el objeto con el estado actual, el agente a ejecutar y el nombre que recibirá el nodo.

Y ahora podemos juntar todas nuestras piezas y crear el famoso gráfico. Creamos los nodos de nuestros agentes "profesor" y "desarrollador" con la ayuda de la función "agent_node" creada. Agregamos los nodos al gráfico: el supervisor vinculado a la cadena que creamos para su ejecución, y el profesor y el desarrollador vinculados a sus respectivos nodos. Y agregamos los bordes, que especifican que el supervisor puede comunicarse con el profesor y también con el desarrollador. Para navegar por los bordes del gráfico se crea un mapa condicional y los `conditional_edges`, es decir, lógica que le indica a LangGraph, que a través del atributo `next` de la respuesta del supervisor se realizará un salto. al siguiente nodo. Y por último especificamos cuál es el nodo inicial del grafo, en nuestro caso, el `supervisor`. Con esto ya tenemos todo listo, compilamos nuestra gráfica, y si queremos comprobar que es correcta podemos graficarla para validar su configuración. En nuestro caso, podemos visualizar cómo el "supervisor" se comunica con el "maestro" y el "desarrollador", y podemos decidir cuándo finalizar la ejecución.

Y ahora podemos invocar nuestro sistema multiagente. Esto también incluye algo de magia de LangGraph: debe crear una configuración de ejecución y asignar a la nueva conversación un identificador único. Y a través del método `stream()` de nuestro sistema multiagente, podremos ver en tiempo real, cada respuesta e interacción del `supervisor` con el `profesor` y el `desarrollador`. En este método enviamos el mensaje inicial de la conversación. En este caso le pedimos a nuestro sistema que nos explique de forma sencilla la tangente de un ángulo. Y aquí es donde ocurre la magia, y veremos a cada agente asumir la responsabilidad de su tarea y trabajar en conjunto para ofrecer resultados completos e impresionantes. Este es solo un ejemplo simple de un sistema multiagente, el tipo de software que está en el centro del progreso de las herramientas más interesantes que utilizan la IA.

Los robots, la conducción autónoma, asistentes como Google Assistant y el nuevo Siri son ejemplos impresionantes de sistemas multiagente. Donde hay piezas de código o software, especializadas en alguna tarea, y trabajan en conjunto con otros agentes, para lograr objetivos más complejos. En el caso de la conducción autónoma, hay agentes encargados de la velocidad, otros encargados de frenar, algunos realizan la visualización a través de fotografías y otros se encargan de los sensores. O en casos más a nuestro alcance, tenemos `ChatDev`, una herramienta de código abierto que, a través de agentes con diferentes responsabilidades, simula una empresa de desarrollo de software, donde unos agentes se encargan de la documentación, otros de la implementación y otros de pruebas y calidad. garantía. Y juntos, pueden ofrecer software funcional que cumpla con los requisitos del usuario. Pero ojo, esto no significa que nosotros, los desarrolladores, perdamos nuestro trabajo. Pues bien, como he demostrado en otro de mis vídeos, la inteligencia artificial todavía está bastante limitada, y sobre todo en tareas de desarrollo, y no hay un cronograma claro de ¿Cuándo puede cambiar esto? Entonces, por ahora, sus habilidades de depuración aún no están obsoletas.

Se ha demostrado científicamente que los sistemas multiagente generan menos errores al realizar razonamientos complejos, lo que refuerza la idea de lo poderosos que son estos sistemas y abre las puertas a una infinidad de posibilidades de automatización y extensión de sistemas basados ​​en LLM. A partir de este tipo de aplicaciones de IA se pueden crear largas jerarquías de agentes supervisores, o grandes equipos especializados, automatizando tareas más complejas. Y potenciar con éxito el trabajo de los humanos que hacen uso de estas herramientas. Imagine un sistema que lee sus correos electrónicos, toma medidas en su calendario, se comunica con sus contactos y organiza su agenda semanal sin ninguna intervención humana.

O un sistema que, en base a tu currículum actual, y las ofertas de trabajo disponibles en LinkedIn, sea capaz de generar cartas de presentación a medida, actualizar tu CV enfatizando las palabras clave de la oferta, Y pueda comunicarse con los reclutadores directa y automáticamente a través del chat de dicho plataforma. En un vídeo futuro les mostraré cómo estos sistemas multiagente pueden lograr capacidades increíbles en robótica, así que no dude en suscribirse. Pero no todo es color de rosa, y los agentes están limitados a las capacidades intrínsecas de los modelos, y pueden fallar repetidamente al intentar completar una tarea. El ejemplo aquí, cuando se usa con `GPT-4o`, no puede usar las herramientas de ejecución de código Python correctamente y entra en un ciclo de prueba y error, lo que puede resultar muy costoso y no alcanzará una solución.

resultado exitoso. Las oportunidades asociadas con esta arquitectura de aplicaciones de IA son infinitas y no puedo imaginar la infinita cantidad de soluciones que llegarán en el futuro cercano. El enorme poder de este enfoque, junto con los cientos de miles de millones invertidos en la industria de la IA, generará un auge de aplicaciones que harán nuestro trabajo y nuestra vida más fácil. Y lo declaro oficialmente, eres un experto en sistemas multiagente y ahora formarás parte del club de desarrolladores más codiciado del mercado. ¿ Crees que es fácil implementar sistemas multiagente? ¿Y tú para qué los usarías? Si tienes dudas o preguntas conceptuales o técnicas, escríbeme un comentario, estoy para ayudarte.

No olvides dejarme un me gusta si este conocimiento te resultó útil y no dudes en suscribirte y activar las notificaciones. Finalmente, y como hago en todos los videos, quiero asegurarte que eres valioso, que tu enorme esfuerzo te ha traído hasta aquí y que eres digno del universo de éxitos que te esperan. Ahora mira este vídeo si quieres conocer las preguntas más comunes que me ha dejado la audiencia respecto a carrera y experiencia. Porque ya sabes, no soy el único que comete errores pero al menos yo grabo los míos en vídeo..

As found on YouTube

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *