Interrupción
El avance clave es que la interrupción no es un fallo, es una funcionalidad.
Qué es
El patrón de interrupción de Neuron proporciona un mecanismo integrado intervención humana en el ciclo mecanismo que permite que los flujos de trabajo pausen su ejecución y esperen entrada externa antes de reanudar.
En esencia, las interrupciones se implementan a través de la clase abstracta InterruptRequest clase, un primitivo del framework que los desarrolladores pueden ampliar para crear experiencias de interrupción personalizadas adaptadas a las necesidades específicas de su
aplicación. El framework incluye una ApprovalRequest como una implementación integrada que cubre el caso de uso más común de aprobar acciones (como llamadas a herramientas), pero la arquitectura es intencionalmente flexible: cualquier nodo o middleware del flujo de trabajo puede activar una interrupción, y la capa de persistencia garantiza que el estado se conserve a lo largo del ciclo de pausa/reanudación, lo que lo hace adecuado para procesos de larga duración que requieren puntos de decisión humana en cualquier etapa.
Si la integrada ApprovalRequest no se ajusta a tu caso de uso, eres libre de crear tu propia solicitud de interrupción personalizada para crear una experiencia de interfaz de usuario específica.
Así es como funciona:
Puntos de interrupción: Cualquier nodo de tu flujo de trabajo puede solicitar una interrupción especificando los datos que quiere presentar al humano. Esto podría ser una simple decisión sí/no, una alerta o cualquier dato estructurado.
Conservación del estado: Cuando ocurre una interrupción, Neuron guarda automáticamente el estado completo de tu flujo de trabajo. Tu flujo de trabajo básicamente entra en reposo, esperando la entrada humana.
Reanudar: Una vez que un humano responde a la solicitud de interrupción, el flujo de trabajo se reanuda exactamente desde el nodo en el que se quedó. No se pierde ningún dato, no se olvida ningún contexto.
Integración de comentarios externos: La solicitud de interrupción editada se inyecta en el nodo interrumpido para continuar su ejecución recibiendo los comentarios humanos.
Introducción en video
Sabemos que el flujo de interrupción es una función bastante avanzada. Incluso con toda la documentación a continuación, puede que no sea fácil comprender todos los aspectos de esta arquitectura. Nos complace enlazarte a continuación un video introductorio hecho por nuestro miembro de la comunidad Amitav Roy.
Puede brindarte información adicional que, combinada con la documentación, puede ayudarte a entender cómo implementar tus casos de uso.
Cómo funciona
Cuando solicitas una interrupción, el flujo de trabajo no simplemente se detiene, preserva todo su estado y espera orientación antes de continuar. Esto te permite crear un sistema de inteligencia híbrida donde la IA se encarga del trabajo computacional pesado mientras los humanos contribuyen a la supervisión estratégica y la toma de decisiones.
La forma más sencilla de solicitar una interrupción es llamando al interrupt() método dentro de un nodo, proporcionando una solicitud de interrupción. Aquí hay un ejemplo usando la integrada ApprovalRequest:
Eventualmente puedes implementar tu propia solicitud de interrupción personalizada para pasar la información que necesitas para la interacción humana. Podrás capturar estos datos más tarde, fuera del flujo de trabajo, para poder informar al usuario y pedirle comentarios.
Cuando el flujo de trabajo se reanude, se reiniciará desde el mismo nodo en el que fue interrumpido, y la $feedback variable recibirá los datos de respuesta del humano.
El InterruptRequest sigue un patrón solicitud-respuesta donde:
Fase de solicitud: Un nodo del flujo de trabajo identifica acciones que requieren aprobación humana y crea una
InterruptRequestque contiene detalles de esas accionesFase de pausa: El flujo de trabajo lanza una
WorkflowInterruptexcepción, preservando todo el contexto de ejecuciónFase de decisión: La aplicación presenta acciones a los usuarios, quienes aprueban, rechazan o editan cada acción
Fase de reanudación: El flujo de trabajo se reanuda con las decisiones del usuario, continuando la ejecución en función de los comentarios
Este diseño garantiza que el flujo de trabajo pueda pausarse de forma segura en cualquier punto, conservar su estado y reanudarse exactamente donde lo dejó, incluso entre distintas sesiones.
Solicitud de interrupción personalizada
El InterruptRequest es el componente central del patrón de intervención humana en el ciclo (HITL) de Neuron, diseñado para pausar la ejecución del flujo de trabajo y solicitar aprobación o entrada humana para acciones específicas. Proporciona un enfoque estructurado y seguro en cuanto a tipos para crear flujos de trabajo de IA interactivos.
Puedes crear tu propia implementación y pasarla al método interrupt.
Úsalo para tu caso de uso de interrupción:
Captura de la interrupción
Para poder interrumpir y reanudar un flujo de trabajo (también Agent y RAG) necesitas proporcionar la capa de persistencia al crear la instancia del flujo de trabajo:
Cuando un nodo solicita una interrupción, el flujo de trabajo lanza un tipo especial de excepción representado por la WorkflowInterrupt clase. Puedes capturar esta excepción para gestionar la solicitud de interrupción.
Usa la información del $request objeto para guiar al humano a proporcionar comentarios. Una vez que finalmente tengas los comentarios del usuario, puedes reanudar el flujo de trabajo pasando la solicitud de interrupción a la init() método. Recuerda usar el mismo workflowId que obtuviste durante la interrupción.
Puedes echar un vistazo al script de abajo como ejemplo de este proceso:
Unexpected error with integration github-files: Integration is not installed on this space
Puntos de control
Cuando el flujo de trabajo se reanuda, reinicia la ejecución desde el nodo donde fue interrumpido. El nodo se volverá a ejecutar por completo, incluido el código presente antes de la interrupción.
Si necesitas solicitar una interrupción no al comienzo del nodo, sino después de realizar otras operaciones, puedes usar puntos de control para guardar el resultado de las sentencias anteriores y usarlo cuando el nodo se reanude. Aquí hay un ejemplo:
El método checkpoint acepta dos argumentos:
El nombre del punto de control debe ser único en el nodo;
Una Closure para envolver el código cuyo resultado quieres guardar.
Cuando se ejecuta el nodo, el método checkpoint guarda el resultado de la Closure en caso de una interrupción. Cuando el nodo se ejecuta de nuevo después de la interrupción, puede llegar al punto de interrupción con exactamente el mismo estado de la ejecución anterior para obtener los comentarios externos.
Consumir los comentarios de la interrupción
También puedes consumir los comentarios externos en alguna parte de tu código distinta de donde llamas al interrupt() método.
El consumeResumeRequest() método te permite obtener el valor de los comentarios externos o null si el nodo simplemente se está ejecutando y no se está reactivando:
Esto te permite aplicar condiciones al comienzo del nodo basadas en los comentarios dados.
Interrupción condicional
También puedes usar interruptIf() como ayuda para evaluar una interrupción condicional:
Monitorización y depuración
Muchas de las aplicaciones que construyas con Neuron contendrán múltiples pasos con múltiples invocaciones de llamadas a LLM. A medida que estas aplicaciones se vuelven cada vez más complejas, se vuelve crucial poder inspeccionar exactamente qué está ocurriendo dentro de tu sistema agéntico. La mejor manera de hacerlo es con Inspector.
Última actualización