044_reason_and_act_react_coding - IUGO-Studio/tech-ia GitHub Wiki
Resumen general:
El video explica el patrón ReAct (Reason and Act), considerado el primer framework para agentes de IA. ReAct combina el razonamiento ("Reason") y la acción ("Act") permitiendo que un modelo de lenguaje (LLM) razone sobre una tarea y decida qué acciones tomar, utilizando herramientas externas. Se presenta una implementación basada en un artículo de Simon Willison, adaptada a las bibliotecas más recientes de OpenAI. El ejemplo demuestra cómo un LLM puede usar herramientas como Wikipedia y una calculadora para responder preguntas, siguiendo un ciclo de Pensamiento (Thought), Acción (Action), Pausa (PAUSE), Observación (Observation).
Conceptos clave:
- ReAct (Reason and Act): Un patrón para agentes de IA que combina el razonamiento y la acción.
- Agente de IA (AI Agent): Un sistema que puede percibir su entorno, razonar, tomar decisiones y actuar para lograr objetivos.
- Framework: Un conjunto de conceptos, herramientas y prácticas que sirven como base para construir algo (en este caso, un agente de IA).
- Thought (Pensamiento): El LLM razona sobre la tarea o pregunta.
- Action (Acción): El LLM decide qué herramienta utilizar.
- PAUSE: El sistema espera a que se complete la acción y se obtenga una observación.
- Observation (Observación): El resultado de la acción realizada.
- Herramientas (Tools): Funciones o APIs externas que el LLM puede utilizar (ej: búsqueda en Wikipedia, calculadora).
- Few-Shot Prompting: Proporcionar ejemplos al LLM para guiar su comportamiento.
- Expresiones regulares (Regex): Se utilizan para extraer la acción decidida por el LLM del texto generado.
- GPT-4o: El modelo de lenguaje de OpenAI utilizado en el ejemplo.
- Prompt Engineering: El arte de crear prompts.
- LLM: Modelo de lenguaje extenso.
Ejemplos prácticos:
-
Pregunta sobre la capital de Inglaterra:
- Thought: El LLM decide buscar información sobre Inglaterra en Wikipedia.
-
Action:
search Wikipedia: England
- Observation: Se obtiene información de Wikipedia sobre Inglaterra.
- Answer: El LLM proporciona la respuesta (la capital de Inglaterra).
-
Pregunta sobre una operación matemática (2 + 2):
- Thought: El LLM decide usar la calculadora.
-
Action:
calculate: 2 + 2
- Observation: Se obtiene el resultado (4).
- Answer: El LLM proporciona la respuesta.
-
Pregunta combinada (población de París * 2 + población de Londres):
- El LLM realiza múltiples acciones (búsqueda en Wikipedia para París y Londres, luego cálculo).
- Se muestra un ejemplo donde el LLM comete un error (debido a un formato incorrecto en el cálculo), y luego se muestra cómo se corrige en una segunda ejecución.
Consejos y buenas prácticas:
- Define claramente las herramientas disponibles: El prompt debe especificar qué herramientas puede utilizar el LLM y cómo utilizarlas.
- Utiliza Few-Shot Prompting para guiar el comportamiento: Proporciona ejemplos de cómo el LLM debe razonar y actuar.
- Implementa funciones para cada herramienta: Crea funciones en Python (u otro lenguaje) que realicen las acciones correspondientes a cada herramienta.
- Maneja los errores: Los LLMs pueden cometer errores, especialmente al realizar cálculos o interactuar con herramientas externas. Implementa lógica para detectar y manejar errores.
- Observabilidad: Es importante poder monitorizar el comportamiento del agente, identificar cuándo se atasca o comete errores, y utilizar esa información para mejorar el prompt o las herramientas.
- Estructura general del prompt:
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [list_of_tools]
PAUSE
Observation: the result of the action
... (this Thought/Action/PAUSE/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
Dudas o preguntas:
-
¿Cómo se puede adaptar el patrón ReAct para utilizar otras herramientas, además de Wikipedia y una calculadora? Investigación: Se pueden definir nuevas acciones y funciones correspondientes a cualquier herramienta que se desee utilizar (ej: acceso a una base de datos, API de correo electrónico, etc.).
-
¿Cómo se puede mejorar la robustez del agente ReAct para que sea menos propenso a errores? Investigación: Se pueden utilizar técnicas como el "Self-Consistency Sampling", mejorar el prompt con más ejemplos y descripciones más claras, o implementar mecanismos de retroalimentación y corrección de errores.
-
¿Cómo se compara ReAct con otros frameworks o patrones para agentes de IA? Investigación: Existen otros frameworks como LangChain, AutoGPT, o BabyAGI, que ofrecen diferentes niveles de abstracción y funcionalidad. ReAct es un patrón relativamente simple y fundamental, que sirve como base para muchos de estos frameworks más avanzados.
-
En el ejemplo se ve un error, pero ¿existen mecanismos para recuperarse de ellos? Investigación: Sí, hay varias estrategias:
- Reintentos: Si una acción falla (por ejemplo, un error de red), se puede reintentar automáticamente.
- Corrección por el LLM: Se puede incluir en el prompt instrucciones para que el LLM detecte y corrija sus propios errores. Por ejemplo: "Si encuentras un error, explica por qué ocurrió y corrígelo".
- Retroalimentación humana: En algunos casos, se puede incorporar un humano en el ciclo para corregir errores o proporcionar retroalimentación.
- Mejorar el prompt: Un análisis cuidadoso de los errores puede revelar problemas en el prompt (ambigüedades, falta de ejemplos, etc.) que se pueden corregir.
- Ajuste fino (fine-tuning): En casos más avanzados, se puede entrenar al LLM con datos específicos que incluyan ejemplos de errores y sus correcciones.
-
¿Cuál es el significado de cajoling? Investigación: En el contexto del video, cajoling (que se traduce como "persuasión" o "engatusamiento") se refiere al esfuerzo y la experimentación necesarios para lograr que el LLM funcione correctamente con el patrón ReAct, antes de que existieran herramientas más sofisticadas como el function calling o el tool calling. Implica un proceso de prueba y error, ajustando el prompt y los ejemplos hasta lograr el comportamiento deseado.