Athrun Data Intelligence


En este tutorial, exploramos cómo diseñamos y ejecutamos un canal de orquestación de IA agente completo impulsado por enrutamiento semántico, barreras de seguridad simbólicas y bucles de autocorrección utilizando Gemini. Explicamos cómo estructuramos agentes, despachamos tareas, aplicamos restricciones y refinamos los resultados utilizando una cimentación modular y limpia. A medida que avanzamos en cada fragmento, vemos cómo el sistema elige inteligentemente al agente adecuado, valida su resultado y se perfeccionamiento a través de una advertencia iterativa. Mira el Códigos completos aquí.

import os
import json
import time
import typing
from dataclasses import dataclass, asdict
from google import genai
from google.genai import types


API_KEY = os.environ.get("GEMINI_API_KEY", "API Key")
client = genai.Client(api_key=API_KEY)


@dataclass
class AgentMessage:
   source: str
   target: str
   content: str
   metadata: dict
   timestamp: float = time.time()

Configuramos nuestro entorno central importando bibliotecas esenciales, definiendo la secreto API e inicializando el cliente Gemini. Además establecemos la estructura AgentMessage, que actúa como formato de comunicación compartida entre agentes. Mira el Códigos completos aquí.

class CognitiveEngine:
   @staticmethod
   def generate(prompt: str, system_instruction: str, json_mode: bool = False) -> str:
       config = types.GenerateContentConfig(
           temperature=0.1,
           response_mime_type="application/json" if json_mode else "text/plain"
       )
       try:
           response = client.models.generate_content(
               model="gemini-2.0-flash",
               contents=prompt,
               config=config
           )
           return response.text
       except Exception as e:
           raise ConnectionError(f"Gemini API Error: {e}")


class SemanticRouter:
   def __init__(self, agents_registry: dict):
       self.registry = agents_registry


   def route(self, user_query: str) -> str:
       prompt = f"""
       You are a Master Dispatcher. Analyze the user request and map it to the ONE best agent.
       AVAILABLE AGENTS:
       {json.dumps(self.registry, indent=2)}
       USER REQUEST: "{user_query}"
       Return ONLY a JSON object: {{"selected_agent": "agent_name", "reasoning": "brief reason"}}
       """
       response_text = CognitiveEngine.generate(prompt, "You are a routing system.", json_mode=True)
       try:
           decision = json.loads(response_text)
           print(f"   (Router) Selected: {decision('selected_agent')} (Reason: {decision('reasoning')})")
           return decision('selected_agent')
       except:
           return "general_agent"

Construimos la capa cognitiva usando Gemini, lo que nos permite suscitar expectativas de texto y JSON según la instrucción. Además implementamos el enrutador semántico, que analiza las consultas y selecciona el agente más adecuado. Mira el Códigos completos aquí.

class Agent:
   def __init__(self, name: str, instruction: str):
       self.name = name
       self.instruction = instruction


   def execute(self, message: AgentMessage) -> str:
       return CognitiveEngine.generate(
           prompt=f"Input: {message.content}",
           system_instruction=self.instruction
       )


class Orchestrator:
   def __init__(self):
       self.agents_info = {
           "analyst_bot": "Analyzes data, logic, and math. Returns structured JSON summaries.",
           "creative_bot": "Writes poems, stories, and creative text. Returns plain text.",
           "coder_bot": "Writes Python code snippets."
       }
       self.workers = {
           "analyst_bot": Agent("analyst_bot", "You are a Data Analyst. output strict JSON."),
           "creative_bot": Agent("creative_bot", "You are a Creative Writer."),
           "coder_bot": Agent("coder_bot", "You are a Python Expert. Return only code.")
       }
       self.router = SemanticRouter(self.agents_info)

Construimos los agentes trabajadores y el orquestador central. Cada agente recibe un rol claro, analista, creativo o codificador, y configuramos el orquestador para administrarlos. Al revisar esta sección, vemos cómo definimos el ecosistema de agentes y lo preparamos para la delegación inteligente de tareas. Mira el Códigos completos aquí.

 def validate_constraint(self, content: str, constraint_type: str) -> tuple(bool, str):
       if constraint_type == "json_only":
           try:
               json.loads(content)
               return True, "Valid JSON"
           except:
               return False, "Output was not valid JSON."
       if constraint_type == "no_markdown":
           if "```" in content:
               return False, "Output contains Markdown code blocks, which are forbidden."
           return True, "Valid Text"
       return True, "Pass"


   def run_task(self, user_input: str, constraint: str = None, max_retries: int = 2):
       print(f"n--- New Task: {user_input} ---")
       target_name = self.router.route(user_input)
       worker = self.workers.get(target_name)
       current_input = user_input
       history = ()
       for attempt in range(max_retries + 1):
           try:
               msg = AgentMessage(source="User", target=target_name, content=current_input, metadata={})
               print(f"   (Exec) {worker.name} working... (Attempt {attempt+1})")
               result = worker.execute(msg)
               if constraint:
                   is_valid, error_msg = self.validate_constraint(result, constraint)
                   if not is_valid:
                       print(f"   (Guardrail) VIOLATION: {error_msg}")
                       current_input = f"Your previous answer failed a check.nOriginal Request: {user_input}nYour Answer: {result}nError: {error_msg}nFIX IT immediately."
                       continue
               print(f"   (Success) Final Output:n{result(:100)}...")
               return result
           except Exception as e:
               print(f"   (System Error) {e}")
               time.sleep(1)
       print("   (Failed) Max retries reached or self-correction failed.")
       return None

Implementamos barreras de seguridad simbólicas y un caracolillo de autocorrección para imponer restricciones como JSON auténtico o sin Markdown. Realizamos un refinamiento iterativo cada vez que los resultados violan los requisitos, lo que permite a nuestros agentes corregir sus propios errores. Mira el Códigos completos aquí.

if __name__ == "__main__":
   orchestrator = Orchestrator()
   orchestrator.run_task(
       "Compare the GDP of France and Germany in 2023.",
       constraint="json_only"
   )
   orchestrator.run_task(
       "Write a Python function for Fibonacci numbers.",
       constraint="no_markdown"
   )

Ejecutamos dos escenarios completos, mostrando el enrutamiento, la ejecución del agente y la nervio de restricciones en actividad. Ejecutamos una tarea analítica aplicada en JSON y una tarea de codificación con restricciones de Markdown para observar el comportamiento juicioso.

En conclusión, ahora vemos cómo múltiples componentes, enrutamiento, agentes trabajadores, barreras de seguridad y autocorrección, se unen para crear un sistema de agentes inteligente y confiable. Somos testigos de cómo cada parte contribuye a una ejecución sólida de las tareas, garantizando que los resultados sigan siendo precisos, alineados y conscientes de las limitaciones. Al reflexionar sobre la cimentación, reconocemos con qué facilidad podemos expandirla con nuevos agentes, restricciones más ricas o estrategias de razonamiento más avanzadas.


Mira el Códigos completos aquí. No dudes en consultar nuestra Página de GitHub para tutoriales, códigos y cuadernos. Encima, no dudes en seguirnos en Gorjeo y no olvides unirte a nuestro SubReddit de más de 100.000 ml y suscríbete a nuestro boletín. ¡Esperar! estas en telegrama? Ahora además puedes unirte a nosotros en Telegram.


Asif Razzaq es el director ejecutor de Marktechpost Media Inc.. Como patrón e ingeniero quimérico, Asif está comprometido a disfrutar el potencial de la inteligencia industrial para el aceptablemente social. Su esfuerzo más nuevo es el tirada de una plataforma de medios de inteligencia industrial, Marktechpost, que se destaca por su cobertura en profundidad del enseñanza instintivo y las noticiario sobre enseñanza profundo que es técnicamente sólida y fácilmente comprensible para una amplia audiencia. La plataforma cuenta con más de 2 millones de visitas mensuales, lo que ilustra su popularidad entre el notorio.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *