Agentes Concurrentes

En esta sección, exploramos el uso de múltiples agentes trabajando concurrentemente. Cubrimos tres patrones principales:

  1. Mensaje Único y Múltiples Procesadores Demuestra cómo un único mensaje puede ser procesado simultáneamente por múltiples agentes suscritos al mismo tópico.

  2. Múltiples Mensajes y Múltiples Procesadores Ilustra cómo tipos específicos de mensajes pueden ser dirigidos a agentes dedicados según los tópicos.

  3. Mensajería Directa Se enfoca en enviar mensajes entre agentes y desde el runtime hacia los agentes.

import asyncio
from dataclasses import dataclass

from saptiva_agents.core import (
    AgentId,
    ClosureAgent,
    ClosureContext,
    DefaultTopicId,
    MessageContext,
    RoutedAgent,
    SingleThreadedAgentRuntime,
    TopicId,
    TypeSubscription,
    default_subscription,
    message_handler,
    type_subscription,
)

Mensaje Único y Múltiples Procesadores

El primer patrón muestra cómo un único mensaje puede ser procesado por múltiples agentes simultáneamente:

  • Cada agente Processor se suscribe al tópico por defecto usando el decorador default_subscription().

  • Al publicar un mensaje en el tópico por defecto, todos los agentes registrados procesarán el mensaje de forma independiente.

circle-info

Nota

Abajo, estamos suscribiendo Processor usando el decorador default_subscription(), pero hay una manera alternativa de suscribir un agente sin decoradores como se muestra en Suscribirse y Publicar en Tópicos, lo que permite que una misma clase de agente se suscriba a diferentes tópicos.

Below, we are subscribing Processor using the default_subscription() decorator, there’s an alternative way to subscribe an agent without using decorators altogether as shown in Subscribe and Publish to Topicsarrow-up-right, this way the same agent class can be subscribed to different topics.


Múltiples Mensajes y Múltiples Procesadores

Este patrón demuestra cómo enrutar diferentes tipos de mensajes a procesadores específicos:

  • UrgentProcessor se suscribe al tópico "urgent"

  • NormalProcessor se suscribe al tópico "normal"

Hacemos que un agente se suscriba a un tipo de tópico específico usando el decorador type_subscription().

Después de registrar los agentes, publicamos mensajes en los tópicos “urgent” y “normal”:


Recolectando Resultados

En el ejemplo anterior usamos print, pero en aplicaciones reales normalmente queremos recolectar y procesar resultados programáticamente.

Usamos un ClosureAgent para recolectar los mensajes publicados por ambos procesadores:


Mensajes Directos

Este patrón se enfoca en mensajes directos. Demostramos dos formas:

  • Mensajería directa entre agentes

  • Envío de mensajes desde el runtime a agentes específicos

Puntos clave:

  • Los mensajes se dirigen usando AgentId.

  • El emisor puede esperar una respuesta del agente objetivo.

  • Solo registramos una vez WorkerAgent, pero enviamos tareas a dos instancias distintas.

  • ¿Cómo? Como se explicó en Ciclo de vida del agente, el runtime crea instancias si no existen cuando recibe un AgentId.

Última actualización