Planificación y algoritmos de planificación
Intuitivamente todos tenemos una idea de lo que es la planificación: ante un problema o una labor, definimos las acciones a realizar y establecemos de alguna manera la secuencia lógica de esa realización.
En la vida corriente, o también en el ámbito de la dirección de proyectos, la planificación implica también otros aspectos como la asignación de recursos, estimación de presupuestos y el establecimiento de plazos temporales.
En el caso de los agentes inteligentes, prescindimos, al menos habitualmente, de lo que tiene que ver con presupuestación y con el marco temporal.
La planificación, en el mundo de la inteligencia artificial y la robótica, tiene mucho más que ver con la decisión de las tareas a realizar y su secuenciación. En cierto sentido, se trata más de definir una estrategia de actuación para resolver un problema o conseguir un objetivo que de una verdadera planificación y, por tanto, tiene tiene una estrecha relación con la resolución de problemas, el razonamiento y la 'inteligencia'.
Los algoritmos de planificación son esenciales desde hace muchos años en la inteligencia artificial, quizá la inteligencia artificial más clásica y, por ejemplo, ocupa numerosos capítulos del famosísimo libro de texto: 'Artificial Intelligence: a modern approach' de Stuart Russell y Peter Norvig.
En lo que sigue, vamos a revisar una panorámica de los algoritmos o estrategias de planificación orientados hacia los nuevos agentes de la 'Agentic AI' en cuyo núcleo se encuentra un gran modelo de lenguaje (LLM, 'Large Language Model').
Y seguimos principalmente, como en toda esta serie de posts sobre agentes, el contenido del libro 'Building Agentic AI systems' de Anjanava Biswas y Wrick Talukdar. En dicho libro, los autores nos presentan siete algoritmos / estrategias, estructurados conforme a una clasificación un poco paradójica de 'practicidad'. A falta de una mejor clasificación, también los revisaremos aquí de esa forma, por orden creciente de practicidad.
Algunos algoritmos no muy prácticos
En esta no muy lucida categoría de algoritmos poco prácticos, los autores nos presentan bastante brevemente, cuatro algoritmos, en general muy famosos.
- STRIPS ('Stanford Research Institute Problem Solver'): Un algoritmos que se remonta ya a 1971 y que está respaldado por un lenguaje formal del mismo nombre. En STRIPS se trabaja con estados y acciones definidas mediante predicados lógicos. Hay un estado inicial y varios posibles estados objetivo. Además están definidas la serie de acciones con las precondiciones para que se puedan llevar a cabo y las poscondiciones tras su aplicación. En él, una plan es una secuencia de operadores que deben conducir a un estado final. Este algoritmo resulta poco adecuado para trabajar con los LLMs de los modernos agentes, ya que las interacciones en lenguaje natural no se reducen fácilmente a las condiciones cierto/falso que precisa STRIPS.
- A*: Un algoritmo muy habitual en robótica para definición de caminos en el caso de robots móviles. Se apoya en grafos, existiendo un nodo inicial y un nodo objetivo. Asociado a los diferentes arcos existe un peso (o coste) y el algoritmo se ocupa de encontrar el recorrido en el grafo que representa el menor coste (donde, con frecuencia, el coste es la distancia y, por tanto, lo que hace es calcular el camino más corto). Estos algoritmos necesitan esa estimación clara del coste de una acción y una heurística para estimar el resto del coste en un punto dado (el uso de heurísticas es para hacer más eficiente computacionalmente el algoritmo). Esa estimación de costes, muy numérica, resulta problemática en el caso de interacciones basadas en lenguaje natural.
- GraphPlan: Otro algoritmo basado en grafos donde se representan en capas las acciones y sus efectos en el tiempo. En el caso de uso de modelos basados en lenguaje, no es fácil encajar las interacciones en capas ni establecer relaciones causa-efecto claras.
- MCTS ('Monte Carlo Tree Search'): Un método donde el árbol de planificación se va creando y expandiendo mediante muestreo aleatorio en el espacio de búsqueda y tomando las ramas más prometedoras. No resulta práctico para su uso en agentes basados en LLMs por dos motivos: porque cada simulación requeriría invocaciones al LLM, haciéndolo muy costoso computacionalmente, y porque en el caso de interacciones en modelos de lenguaje el espacio de estados es tan enorme que no resulta eficiente su exploración aleatoria.
Algunos algoritmos moderadamente prácticos
Se trata de un algoritmo que hereda algunas ideas de otros como STRIPS o GraphPlan. Utiliza una búsqueda heurística en una versión simplificada del problema.
Los autores estiman que su orientación a objetivos pudiera ser usada en el caso de agentes basados en LLM, aunque requeriría adaptaciones para un manejo efectivo del lenguaje natural. De todas formas, también presenta dificultades ya que las heurísticas que utiliza son de tipo numérico que, como ya hemos comentado en otros algoritmos, no se adaptan bien al tratamiento mediante lenguaje natural.
Resumiendo bastante, los autores entienden que FF planning se puede utilizar en agentes basados en LLM pero sometiéndolo a una serie de modificaciones.
Los algoritmos más prácticos
Y llega el momento de ver las opciones mejores o más prácticas. En este caso se nos habla de dos opciones: una planificación basada en LLMs y HTN. Veámoslas brevemente
Cuando planificamos con grandes modelos de lenguaje, estamos asumiendo que estos modelos son capaces de entender objetivos complejos, generar los pasos adecuados para conseguirlos y adaptar esos pasos según cambia el entorno o la situación.
Aunque hace un tiempo esta posibilidad hubiera podido parecer poco creíble, lo cierto es que si se atiende a lo ya conseguido en modelos razonadores, parece un opción muy válida, al menos para ciertas situaciones o tipos de problemas.
De todas formas hay que tener en cuenta que también tiene sus limitaciones de las que nos advierten los autores: los LLMs no acaban de adaptarse bien a planes en que hay elementos o restricciones numéricas o temporales y tienden a ser demasiado optimistas y poco prácticos si no se establecen las debidas restricciones.
A cambio se desenvuelven bien, o al menos mejor que los tradicionales, en situaciones con incertidumbre, información incompleta o estados nuevos.
Es una estrategia de planificación que trabaja mediante la descomposición jerárquica de tareas en subtareas aunque, eso si, a diferencia de algoritmos clásicos como STRIPS que trabaja con unas acciones primitivas muy claramente definidas, HTN trabaja con tareas más abstractas y luego va descomponiendo en otras más concretas.
Se trata de un enfoque flexible, que tiende a reflejar el modo de planificar humano y que escala y se adapta bien a problemas complejos
La asignación de recursos: las herramientas, de nuevo
Al inicio de este post, al comparar el concepto de planificación del ámbito de la dirección de proyectos con el significado de planificación en inteligencia artificial, decíamos que no se tenía en cuenta ni tiempos ni costes y sólo parcialmente recursos. Estrictamente hablando, no es imposible incluir de alguna forma tiempos y costes en una planificación de inteligencia artificial, pero no es lo más habitual ni definitorio.
¿Y los recursos? Bueno, no suelen usarlos tanto en el sentido, por ejemplo, de las personas, equipos o empresas necesarias para realizar una tarea. Pero sí hay otros recursos que hay que tener en cuenta: las herramientas.
En efecto, hemos visto los mecanismos de planificación que son, en cierto sentido, mecanismos de pensamiento y razonamiento. Pero para que esto resulte útil en la mayoría de los casos, y para que el agente sea realmente un agente, debe poder actuar, cosa que, como explicábamos en el post anterior, lo hacen a través de las denominadas herramientas ('tools') que, de esta forma, se constituyen en los recursos necesarios para realizar una tarea.
Así que los agentes, también deben de ser capaces de conocer y razonar sobre las herramientas que tienen a su disposición, sabiendo de alguna forma lo que pueden y no pueden hacer. Y la propia planificación debe utilizar ese conocimiento sobre las capacidades disponibles para definir las acciones a llevar a cambo.
La planificación en la práctica de desarrollo
¿Y cómo se lleva todo esto a cabo en tiempo de desarrollo? ¿Cómo se construyen este tipo de soluciones?
Bien, en la obra citada, los autores ejemplifican casi todos los aspectos usando el framework CrewAI.
Además, y para aumentar un poco el abanico de posibilidades, también dan como opciones el uso del conocido LangGraph (parte de LangChain) o AutoGen.
O sea, que no sólo disponemos de grandes modelos de lenguaje, también existen ya frameworks que permiten construir el resto de elementos de un agente, incluyendo la planificación.
Conclusiones
Hemos visto cómo una parte nuclear de un agente es la planificación, algo ya tradicional en el campo de la inteligencia artificial pero que es necesario revisar, aportar nuevos algoritmos y estrategias, para realizar una planificación expresada en lenguaje natural y que se crea con el apoyo de un gran modelo de lenguaje.
Artículos de este blog relacionados
- Hablemos de agentes (VI): herramientas
- Hablemos de agentes (V): reflexión e introspección
- Hablemos de agentes (IV): sistemas multi-agente
- Hablemos de agentes (III): arquitecturas reactivas, deliberativas e híbridas
- Hablemos de agentes (II): auto-gobierno, agencia y autonomía
- Hablemos de agentes (I): concepto, contexto y tres características esenciales