Equipos
En esta sección, aprenderás a crear un equipo multi-agente (o simplemente equipo) usando Saptiva-Agents. Un equipo es un grupo de agentes que trabajan juntos para lograr un objetivo común.
Primero, te mostraremos cómo crear y dirigir un equipo. Luego, te explicaremos cómo observar el comportamiento del equipo, lo cual es crucial para depurar y entender el rendimiento del equipo, y las operaciones comunes para controlar el comportamiento del Equipo.
Creando un Equipo
RoundRobinGroupChat es una configuración de equipo simple pero efectiva donde todos los agentes comparten el mismo contexto y se turnan para responder de manera circular. Cada agente, durante su turno, transmite su respuesta a todos los demás agentes, asegurando que todo el equipo mantenga un contexto coherente.
Comenzaremos creando un equipo con dos AssistantAgent y una condición de TextMentionTermination que detiene al equipo cuando se detecta una palabra específica en la respuesta del agente.
El equipo de dos agentes implementa el patrón de reflexión, un patrón de diseño multiagente donde un agente crítico evalúa las respuestas de un agente principal.
import asyncio
from saptiva_agents import SAPTIVA_LEGACY
from saptiva_agents.agents import AssistantAgent, TaskResult
from saptiva_agents.conditions import ExternalTermination, TextMentionTermination
from saptiva_agents.teams import RoundRobinGroupChat
from saptiva_agents.ui import Console
from saptiva_agents.core import CancellationToken
from saptiva_agents.base import SaptivaAIChatCompletionClient
# Define el cliente de modelo de Saptiva.
model_client = SaptivaAIChatCompletionClient(
model=SAPTIVA_LEGACY,
api_key="TU_SAPTIVA_API_KEY",
)
# Crear el agente principal.
primary_agent = AssistantAgent(
"primary",
model_client=model_client,
system_message="You are a helpful AI assistant.",
)
# Crear al agente crítico.
critic_agent = AssistantAgent(
"critic",
model_client=model_client,
system_message="Provide constructive feedback. Respond with 'APPROVE' to when your feedbacks are addressed.",
)
# Definir una condición de terminación que detenga la tarea si el crítico la aprueba.
text_termination = TextMentionTermination("APPROVE")
# Crear un equipo con los agentes primario y crítico.
team = RoundRobinGroupChat([primary_agent, critic_agent], termination_condition=text_termination)Dirigir un Equipo
Llamemos al método run() para iniciar el equipo con una tarea.
El equipo ejecuta los agentes hasta que se cumple la condición de terminación. En este caso, el equipo ejecutó agentes siguiendo un orden de ronda hasta que se cumplió la condición de terminación cuando se detectó la palabra "APROBAR" en la respuesta del agente. Cuando el equipo se detiene, devuelve un objeto TaskResult con todos los mensajes producidos por los agentes en el equipo.
Observando un Equipo
Similar al método on_messages_stream() del agente, puedes transmitir los mensajes del equipo mientras se ejecuta llamando al método run_stream(). Este método devuelve un generador que produce los mensajes generados por los agentes del equipo a medida que se generan, con el último elemento siendo el objeto TaskResult .
Como se demuestra en el ejemplo anterior, puedes determinar la razón por la que el equipo se detuvo comprobando el atributo stop_reason .
El método Console() proporciona una forma conveniente de imprimir mensajes en la consola con el formato adecuado.
Reiniciar un Equipo
Puede restablecer el equipo llamando al método reset(). Este método limpiará el estado del equipo, incluyendo todos los agentes. Llamará al método on_reset() de cada agente para limpiar el estado del agente.
Por lo general, es una buena idea reiniciar el equipo si la siguiente tarea no está relacionada con la tarea anterior. Sin embargo, si la siguiente tarea está relacionada con la anterior, no es necesario reiniciar y se puede continuar con el equipo.
Detener un Equipo
Además de las condiciones de terminación automática, como TextMentionTermination, que detienen el equipo según el estado interno del mismo, también puedes detener al equipo desde fuera utilizando el ExternalTermination .
Al llamar a set() en ExternalTermination se detendrá el equipo cuando termine el turno del agente actual. Por lo tanto, el equipo puede no detenerse de inmediato. Esto permite que el agente actual finalice su turno y transmita el mensaje final al equipo antes de detenerse, manteniendo el estado del equipo consistente.
Del resultado anterior, se puede ver que el equipo se detuvo porque se cumplió la condición de terminación externa, pero el agente de habla pudo terminar su turno antes de que el equipo se detuviera.
Reanudar un Equipo
Los equipos son con estado y mantienen el historial de la conversación y el contexto después de cada ejecución, a menos que restablezcas el equipo.
Puedes reanudar un equipo para continuar desde donde lo dejó llamando nuevamente al método run() o run_stream() sin una nueva tarea. RoundRobinGroupChat continuará desde el siguiente agente en el orden round-robin.
Puedes ver que el equipo retomó desde donde lo dejó en la salida anterior, y el primer mensaje es del siguiente agente después del último agente que habló antes de que el equipo se detuviera.
Reanudemos el equipo nuevamente con una nueva tarea mientras mantenemos el contexto sobre la tarea anterior.
Abortar un Equipo
Puede abortar una llamada a run() o run_stream() durante la ejecución configurando un CancellationToken pasado al parámetro cancellation_token.
Distinto a detener un equipo, abortar un equipo detendrá inmediatamente el equipo y generará una excepción CancelledError .
Equipo de Agente Único
A menudo, puede que desees ejecutar un solo agente en una configuración de equipo. Esto es útil para ejecutar el AssistantAgent en un bucle hasta que se cumpla una condición.
Esto es diferente de ejecutar el AssistantAgent usando su método run() o run_stream(), que solo ejecuta el agente por un paso y devuelve el resultado. Consulte AssistantAgent para más detalles sobre un solo paso.
A continuación se presenta un ejemplo de ejecución de un solo agente en una configuración de equipo RoundRobinGroupChat con una condición de terminación TextMessageTermination. La tarea es incrementar un número hasta que alcance 10 usando una herramienta. El agente seguirá llamando a la herramienta hasta que el número llegue a 10, y luego devolverá un TextMessage final que detendrá la ejecución.
La clave es centrarse en la condición de finalización. En este ejemplo, usamos una condición de TextMessageTermination que detiene al equipo cuando el agente deja de producir ToolCallSummaryMessage. El equipo seguirá funcionando hasta que el agente produzca un TextMessage con el resultado final.
Última actualización