Agente & Entorno De Ejecución De Agentes

En esta y la siguiente sección, nos enfocamos en los conceptos centrales de Saptiva-Agents: agentes, entorno de ejecución de agentes, mensajes y comunicación, que son los bloques fundamentales para construir aplicaciones multi-agente.

Nota

La API principal está diseñada para ser flexible y sin opiniones impuestas. Por lo tanto, a veces puede parecer compleja. Continúa si estás construyendo un sistema multi-agente interactivo, escalable y distribuido, y deseas tener control total sobre todos los flujos de trabajo.

Un agente en Saptiva-Agents es una entidad definida por la interfaz base Agent. Tiene un identificador único del tipo AgentId, y un diccionario de metadatos del tipo AgentMetadata.

En la mayoría de los casos, puedes subclasificar tus agentes desde la clase de nivel superior RoutedAgent, que te permite enrutar mensajes al manejador de mensajes correspondiente, especificado con el decorador @message_handler() y una pista de tipo apropiada para la variable del mensaje. Un entorno de ejecución de agente es el entorno donde los agentes se ejecutan en Saptiva-Agents.

Similar al entorno de ejecución de un lenguaje de programación, el entorno de ejecución de agentes proporciona la infraestructura necesaria para facilitar la comunicación entre agentes, gestionar sus ciclos de vida, imponer límites de seguridad y soportar monitoreo y depuración.

Para desarrollo local, los desarrolladores pueden usar SingleThreadedAgentRuntime, que puede ser embebido en una aplicación Python.

Nota

Los agentes no son instanciados ni gestionados directamente por el código de la aplicación. En su lugar, son creados y gestionados por el entorno de ejecución cuando se necesitan.

Si ya estás familiarizado con Saptiva-Agents, es importante notar que los agentes de Saptiva-Agents, como AssistantAgent, son creados por la aplicación y por lo tanto no están gestionados directamente por el entorno de ejecución. Para usar un agente de Saptiva-Agents en el Core, necesitas crear un agente envoltorio (wrapper) que delegue mensajes al agente de Saptiva-Agents y permita al runtime gestionar dicho agente.


Implementación de un Agente

Para implementar un agente, el desarrollador debe subclasificar RoutedAgent y definir un método manejador para cada tipo de mensaje que el agente espera manejar, usando el decorador @message_handler. Por ejemplo, el siguiente agente maneja un tipo de mensaje simple MyMessageType y lo imprime:

# Importar definiciones necesarias
from dataclasses import dataclass
from saptiva_agents.core import AgentId, MessageContext, RoutedAgent, message_handler

# Definir el tipo de mensaje
@dataclass
class MyMessageType:
    content: str

# Crear una clase de agente personalizado
class MyAgent(RoutedAgent):
    def __init__(self) -> None:
        super().__init__("MyAgent")

    @message_handler  # Decorador para manejar mensajes de tipo MyMessageType
    async def handle_my_message_type(self, message: MyMessageType, ctx: MessageContext) -> None:
        print(f"{self.id.type} recibió mensaje: {message.content}")

Este agente solo maneja MyMessageType y los mensajes se entregan al método handle_my_message_type.


Uso de un Agente de Saptiva-Agents

Si tienes un agente de Saptiva-Agents y deseas usarlo con la API Core, puedes crear un agente envoltorio (RoutedAgent) que delegue los mensajes al agente. El siguiente ejemplo muestra cómo crear un agente envoltorio para un AssistantAgent de Saptiva-Agents.


Registro del Tipo de Agente

Para que el entorno de ejecución pueda usar un agente, el desarrollador debe registrar el tipo de agente usando el método register() de la clase BaseAgent. Esto vincula un nombre único de tipo con una función fábrica que crea una instancia del agente.

El tipo de agente (AgentType) no es lo mismo que la clase del agente. En este ejemplo, el tipo de agente es AgentType("my_agent") o AgentType("my_assistant"), mientras que la clase del agente es la clase de Python MyAgent o MyAssistantAgent. Se espera que la función fábrica devuelva una instancia de la clase del agente sobre la cual se invoca el método de clase register().

Nota

Se pueden registrar diferentes tipos de agentes con funciones fábrica que devuelven la misma clase de agente. Por ejemplo, en las funciones fábrica, se pueden usar variaciones en los parámetros del constructor para crear distintas instancias de la misma clase de agente.

Para registrar nuestros tipos de agentes con SingleThreadedAgentRuntime, se puede usar el siguiente código:

Una vez registrado, puedes enviar mensajes directamente:

Salida esperada:


Ejecutar el Entorno de Ejecución de Agentes en Hilo Único

start() inicia una tarea en segundo plano para entregar mensajes:

Puedes usar stop_when_idle() si deseas esperar a que todos los mensajes se procesen:

Para liberar recursos completamente:

Otros entornos de ejecución pueden tener diferentes métodos para operar.

Última actualización