Cómo construir una red de agentes de IA asíncrono utilizando Gemini para tareas de investigación, análisis y validación

En este tutorial, presentamos el Protocolo de la Red Gemini Agent, un marco poderoso y flexible diseñado para permitir una colaboración inteligente entre los agentes de IA especializados. Aprovechando los modelos Gemini de Google, el protocolo facilita la comunicación dinámica entre los agentes, cada uno equipado con roles distintos: analizador, investigador, sintetizador y validador. Los usuarios aprenderán a configurar y configurar una red de agentes asíncronos, permitiendo la distribución automatizada de tareas, la resolución de problemas de colaboración y la gestión de diálogo enriquecido. Ideal para escenarios como investigación en profundidad, análisis de datos complejos y validación de información, este marco faculta a los usuarios aprovechar de manera eficiente la inteligencia colectiva de IA.

import asyncio
import json
import random
from dataclasses import dataclass, asdict
from typing import Dict, List, Optional, Any
from enum import Enum
import google.generativeai as genai

Aprovechamos Asyncio para la ejecución concurrente, los datos de datos para la gestión de mensajes estructurados y la IA generativa de Google (Google.Generativeai) para facilitar las interacciones entre múltiples agentes impulsados ​​por la IA. Incluye utilidades para el manejo dinámico de mensajes y roles de agente estructurado, mejorando la escalabilidad y la flexibilidad en las tareas de IA colaborativas.

API_KEY = None


try:
    import google.colab
    IN_COLAB = True
except ImportError:
    IN_COLAB = False

Inicializamos el API_KEY y detectamos si el código se está ejecutando en un entorno de Colab. Si el módulo Google.Colab se importa correctamente, el indicador in_colab se establece en verdadero; De lo contrario, el valor predeterminado es falso, lo que permite que el script ajuste el comportamiento en consecuencia.

class AgentType(Enum):
    ANALYZER = "analyzer"
    RESEARCHER = "researcher"
    SYNTHESIZER = "synthesizer"
    VALIDATOR = "validator"


@dataclass
class Message:
    sender: str
    receiver: str
    content: str
    msg_type: str
    metadata: Dict = None

Mira el Computadora portátil

Definimos las estructuras centrales para la interacción del agente. El AgentType Enum clasifica a los agentes en cuatro roles distintos, analizador, investigador, sintetizador y validador, cada uno con una función específica en la red colaborativa. El mensaje DataClass representa el formato para la comunicación entre agentes, encapsulando las ID de remitente y receptor, contenido de mensajes, tipo y metadatos opcionales.

class GeminiAgent:
    def __init__(self, agent_id: str, agent_type: AgentType, network: 'AgentNetwork'):
        self.id = agent_id
        self.type = agent_type
        self.network = network
        self.model = genai.GenerativeModel('gemini-2.0-flash')
        self.inbox = asyncio.Queue()
        self.context_memory = []
       
        self.system_prompts = {
            AgentType.ANALYZER: "You are a data analyzer. Break down complex problems into components and identify key patterns.",
            AgentType.RESEARCHER: "You are a researcher. Gather information and provide detailed context on topics.",
            AgentType.SYNTHESIZER: "You are a synthesizer. Combine information from multiple sources into coherent insights.",
            AgentType.VALIDATOR: "You are a validator. Check accuracy and consistency of information and conclusions."
        }
   
    async def process_message(self, message: Message):
        """Process incoming message and generate response"""
        if not API_KEY:
            return "❌ API key not configured. Please set API_KEY variable."
           
        prompt = f"""
        {self.system_prompts[self.type]}
       
        Context from previous interactions: {json.dumps(self.context_memory[-3:], indent=2)}
       
        Message from {message.sender}: {message.content}
       
        Provide a focused response (max 100 words) that adds value to the network discussion.
        """
       
        try:
            response = await asyncio.to_thread(
                self.model.generate_content, prompt
            )
            return response.text.strip()
        except Exception as e:
            return f"Error processing: {str(e)}"
   
    async def send_message(self, receiver_id: str, content: str, msg_type: str = "task"):
        """Send message to another agent"""
        message = Message(self.id, receiver_id, content, msg_type)
        await self.network.route_message(message)
   
    async def broadcast(self, content: str, exclude_self: bool = True):
        """Broadcast message to all agents in network"""
        for agent_id in self.network.agents:
            if exclude_self and agent_id == self.id:
                continue
            await self.send_message(agent_id, content, "broadcast")
   
    async def run(self):
        """Main agent loop"""
        while True:
            try:
                message = await asyncio.wait_for(self.inbox.get(), timeout=1.0)
               
                response = await self.process_message(message)
               
                self.context_memory.append({
                    "from": message.sender,
                    "content": message.content,
                    "my_response": response
                })
               
                if len(self.context_memory) > 10:
                    self.context_memory = self.context_memory[-10:]
               
                print(f"🤖 {self.id} ({self.type.value}): {response}")
               
                if random.random() < 0.3:  
                    other_agents = [aid for aid in self.network.agents.keys() if aid != self.id]
                    if other_agents:
                        target = random.choice(other_agents)
                        await self.send_message(target, f"Building on that: {response[:50]}...")
               
            except asyncio.TimeoutError:
                continue
            except Exception as e:
                print(f"❌ Error in {self.id}: {e}")

Mira el Computadora portátil

La clase geminiagente define el comportamiento y las capacidades de cada agente en la red. Tras la inicialización, asigna una identificación única, tipo de rol y una referencia a la red de agentes y carga el modelo Gemini 2.0 Flash. Utiliza indicaciones del sistema específicas de roles para generar respuestas inteligentes basadas en mensajes entrantes, que se procesan de forma asincrónica a través de una cola. Cada agente mantiene una memoria de contexto para retener interacciones recientes y puede responder directamente, enviar mensajes específicos o transmitir información a otros. El método Run () procesa continuamente los mensajes, promueve la colaboración al iniciar ocasionalmente las respuestas a otros agentes y administra el manejo de mensajes en un bucle sin bloqueo.

class AgentNetwork:
    def __init__(self):
        self.agents: Dict[str, GeminiAgent] = {}
        self.message_log = []
        self.running = False
   
    def add_agent(self, agent_type: AgentType, agent_id: Optional[str] = None):
        """Add new agent to network"""
        if not agent_id:
            agent_id = f"{agent_type.value}_{len(self.agents)+1}"
       
        agent = GeminiAgent(agent_id, agent_type, self)
        self.agents[agent_id] = agent
        print(f"✅ Added {agent_id} to network")
        return agent_id
   
    async def route_message(self, message: Message):
        """Route message to target agent"""
        self.message_log.append(asdict(message))
       
        if message.receiver in self.agents:
            await self.agents[message.receiver].inbox.put(message)
        else:
            print(f"⚠️  Agent {message.receiver} not found")
   
    async def initiate_task(self, task: str):
        """Start a collaborative task"""
        print(f"🚀 Starting task: {task}")
       
        analyzer_agents = [aid for aid, agent in self.agents.items()
                          if agent.type == AgentType.ANALYZER]
       
        if analyzer_agents:
            initial_message = Message("system", analyzer_agents[0], task, "task")
            await self.route_message(initial_message)
   
    async def run_network(self, duration: int = 30):
        """Run the agent network for specified duration"""
        self.running = True
        print(f"🌐 Starting agent network for {duration} seconds...")
       
        agent_tasks = [agent.run() for agent in self.agents.values()]
       
        try:
            await asyncio.wait_for(asyncio.gather(*agent_tasks), timeout=duration)
        except asyncio.TimeoutError:
            print("⏰ Network session completed")
        finally:
            self.running = False

Mira el Computadora portátil

La clase Agentnetwork gestiona la coordinación y la comunicación entre todos los agentes del sistema. Permite la adición dinámica de agentes con IDS únicos y roles especificados, mantiene un registro de todos los mensajes intercambiados y facilita el enrutamiento de mensajes al destinatario correcto. La red puede iniciar una tarea de colaboración enviando el mensaje inicial a un agente analizador, y ejecuta el bucle de evento asíncrono completo para una duración específica, lo que permite a los agentes operar de manera simultánea e interactiva dentro de un entorno compartido.

async def demo_agent_network():
    """Demonstrate the Gemini Agent Network Protocol"""
   
    network = AgentNetwork()
   
    network.add_agent(AgentType.ANALYZER, "deep_analyzer")
    network.add_agent(AgentType.RESEARCHER, "info_gatherer")
    network.add_agent(AgentType.SYNTHESIZER, "insight_maker")
    network.add_agent(AgentType.VALIDATOR, "fact_checker")
   
    task = "Analyze the potential impact of quantum computing on cybersecurity"
   
    network_task = asyncio.create_task(network.run_network(20))
    await asyncio.sleep(1)  
    await network.initiate_task(task)
    await network_task
   
    print(f"\n📊 Network completed with {len(network.message_log)} messages exchanged")
    agent_participation = {aid: sum(1 for msg in network.message_log if msg['sender'] == aid)
                          for aid in network.agents}
    print("Agent participation:", agent_participation)


def setup_api_key():
    """Interactive API key setup"""
    global API_KEY
   
    if IN_COLAB:
        from google.colab import userdata
        try:
            API_KEY = userdata.get('GEMINI_API_KEY')
            genai.configure(api_key=API_KEY)
            print("✅ API key loaded from Colab secrets")
            return True
        except:
            print("💡 To use Colab secrets: Add 'GEMINI_API_KEY' in the secrets panel")
   
    print("🔑 Please enter your Gemini API key:")
    print("   Get it from: https://makersuite.google.com/app/apikey")
   
    try:
        if IN_COLAB:
            from google.colab import userdata
            API_KEY = input("Paste your API key here: ").strip()
        else:
            import getpass
            API_KEY = getpass.getpass("Paste your API key here: ").strip()
       
        if API_KEY and len(API_KEY) > 10:
            genai.configure(api_key=API_KEY)
            print("✅ API key configured successfully!")
            return True
        else:
            print("❌ Invalid API key")
            return False
    except KeyboardInterrupt:
        print("\n❌ Setup cancelled")
        return False

Mira el Computadora portátil

La función demo_agent_network () orquesta todo el flujo de trabajo del agente: inicializa una red de agente, agrega cuatro agentes específicos de roles, lanza una tarea de seguridad cibernética y ejecuta la red de forma asincrónica durante una duración fija mientras rastrea los intercambios de mensajes y la participación de los agentes. Mientras tanto, SETUP_API_KEY () proporciona un mecanismo interactivo para configurar de forma segura la clave de la API de Gemini, con lógica personalizada para entornos Colab y no COLAB, asegurando que los agentes de IA puedan comunicarse con el modelo de Gemini Backend antes de que comience la demostración.

if __name__ == "__main__":
    print("🧠 Gemini Agent Network Protocol")
    print("=" * 40)
   
    if not setup_api_key():
        print("❌ Cannot run without valid API key")
        exit()
   
    print("\n🚀 Starting demo...")
   
    if IN_COLAB:
        import nest_asyncio
        nest_asyncio.apply()
        loop = asyncio.get_event_loop()
        loop.run_until_complete(demo_agent_network())
    else:
        asyncio.run(demo_agent_network())

Finalmente, el código anterior sirve como punto de entrada para ejecutar el protocolo de red de Gemini Agent. Comienza incitando al usuario a configurar la clave de la API Gemini, saliendo si no se proporciona. Tras una configuración exitosa, se inicia la demostración. Si se ejecuta en Google Colab, aplica Nest_asyncio para manejar las restricciones de bucle de eventos de Colab; De lo contrario, utiliza el asyncio.run () nativo de Python para ejecutar la demostración asíncrona de la colaboración del agente.

En conclusión, al completar este tutorial, los usuarios obtienen un conocimiento práctico de implementar una red colaborativa con IA utilizando agentes de Gemini. La experiencia práctica proporcionada aquí demuestra cómo los agentes autónomos pueden romper efectivamente problemas complejos, generar ideas en colaboración y garantizar la precisión de la información a través de la validación.


Mira el Computadora portátil. Todo el crédito por esta investigación va a los investigadores de este proyecto. Además, siéntete libre de seguirnos Gorjeo Y no olvides unirte a nuestro 99k+ ml de subreddit y suscribirse a Nuestro boletín.


Asif Razzaq es el CEO de MarktechPost Media Inc .. Como empresario e ingeniero visionario, ASIF se compromete a aprovechar el potencial de la inteligencia artificial para el bien social. Su esfuerzo más reciente es el lanzamiento de una plataforma de medios de inteligencia artificial, MarktechPost, que se destaca por su cobertura profunda de noticias de aprendizaje automático y de aprendizaje profundo que es técnicamente sólido y fácilmente comprensible por una audiencia amplia. La plataforma cuenta con más de 2 millones de vistas mensuales, ilustrando su popularidad entre el público.