Terminación
En la sección anterior, exploramos cómo definir agentes y organizarlos en equipos que puedan resolver tareas. Sin embargo, una ejecución puede continuar indefinidamente, y en muchos casos, necesitamos saber cuándo detenerla. Este es el papel de la condición de terminación.
Saptiva-Agents admite varias condiciones de terminación al proporcionar una clase base TerminationCondition y varias implementaciones que heredan de ella.
Una condición de terminación es una función callable que toma una secuencia de objetos AgentEvent o ChatMessage desde la última vez que se llamó a la condición, y devuelve un StopMessage si la conversación debe ser terminada, o None en caso contrario. Una vez que se ha alcanzado una condición de terminación, debe restablecerse llamando a reset() antes de poder utilizarse nuevamente.
Algunas cosas importantes a tener en cuenta sobre las condiciones:
Son con estado, pero se restablecen automáticamente después de que cada ejecución (
run()orun_stream()) haya terminado.Pueden combinarse utilizando los operadores AND y OR.
Condiciones de Terminación Incorporadas:
MaxMessageTermination: Se detiene después de que se haya producido un número especificado de mensajes, incluyendo tanto mensajes del agente como del tarea.TextMentionTermination: Se detiene cuando se menciona un texto o cadena específica en un mensaje (por ejemplo, "TERMINATE").TokenUsageTermination: Se detiene cuando se utiliza un cierto número de tokens de solicitud o de finalización. Esto requiere que los agentes informen sobre el uso de tokens en sus mensajes.TimeoutTermination: Se detiene después de una duración especificada en segundos.HandoffTermination: Se detiene cuando se solicita la transferencia a un objetivo específico. Los mensajes de transferencia se pueden utilizar para crear patrones comoSwarm. Esto es útil cuando se desea pausar la ejecución y permitir que la aplicación o el usuario proporcionen información cuando un agente les transfiere el control.SourceMatchTermination: Se detiene después de que un agente específico responde.ExternalTermination: Permite el control programático de la finalización desde fuera de la ejecución. Esto es útil para la integración con interfaces de usuario (por ejemplo, botones de "Detener" en interfaces de chat).StopMessageTermination: Se detiene cuando unStopMessagees producido por un agente.TextMessageTermination: Se detiene cuando unTextMessagees producido por un agente.FunctionCallTermination: Se detiene cuando unToolCallExecutionEventque contiene unFunctionExecutionResultcon un nombre coincidente es producido por un agente.FunctionalTermination: Detiene la ejecución cuando la evaluación de una expresión (función) devuelveTruepara la última secuencia incremental (delta) de mensajes. Esto es especialmente útil para crear rápidamente condiciones de terminación personalizadas que no están cubiertas por las condiciones integradas.
Uso Básico
Para demostrar las características de las condiciones de terminación, crearemos un equipo compuesto por dos agentes: un agente principal responsable de la generación de texto y un agente crítico que revisa y proporciona comentarios sobre el texto generado.
Exploremos cómo las condiciones de terminación se restablecen automáticamente después de cada llamada a run o run_stream, lo que permite al equipo reanudar su conversación desde donde la dejó.
La conversación se detuvo al alcanzar el límite máximo de mensajes. Como el agente principal no pudo responder a los comentarios, continuemos la conversación.
El equipo continuó desde donde lo dejó, permitiendo que el agente principal respondiera a la retroalimentación.
Combinación de Condiciones de Terminación
Vamos a mostrar cómo se pueden combinar las condiciones de terminación utilizando los operadores AND (&) y OR (|) para crear una lógica de terminación más compleja. Por ejemplo, crearemos un equipo que se detiene después de generar 10 mensajes o cuando el agente crítico aprueba un mensaje.
La conversación se detuvo después de que el agente crítico aprobara el mensaje, aunque también podría haberse detenido si se generaban 10 mensajes.
Alternativamente, si queremos detener la ejecución solo cuando se cumplen ambas condiciones, podemos usar el operador AND (&).
Condición de Terminación Personalizada
Las condiciones de terminación integradas son suficientes para la mayoría de los casos de uso. Sin embargo, puede haber casos en los que necesite implementar una condición de terminación personalizada que no se ajuste a las existentes. Puede hacerlo subclasificando la clase TerminationCondition .
En este ejemplo, creamos una condición de terminación personalizada que detiene la conversación cuando se realiza una llamada a una función específica.
Usaremos esta nueva condición de terminación para detener la conversación cuando el agente crítico apruebe un mensaje usando la llamada a la función approve .
Primero, creamos una función simple que se llamará cuando el agente crítico apruebe un mensaje.
Luego creamos los agentes. El agente crítico está equipado con la herramienta approve .
Ahora, creamos la condición de terminación y el equipo. Ejecutamos el equipo con la tarea de escribir un poema.
Puedes ver que la conversación se detuvo cuando el agente crítico aprobó el mensaje usando la llamada a la función approve .
Última actualización