""" Agente de Inteligencia Competitiva — CULTIVA IA Monitoriza el ecosistema LLM/IA para agencias en tiempo real. Powered by Perplexity API (modelos Sonar online). """ import os import time from openai import OpenAI, RateLimitError class IntelAgente: """Agente de inteligencia competitiva con búsqueda web en tiempo real.""" def __init__(self): self.client = OpenAI( api_key=os.environ["PERPLEXITY_API_KEY"], base_url="https://api.perplexity.ai", ) self.history = [] # para sesiones multi-turno # ── 1. CONSULTA RÁPIDA ───────────────────────────────────────────── def consulta_rapida(self, pregunta: str) -> str: """sonar: respuesta rápida con búsqueda web (latencia ~2s).""" resp = self.client.chat.completions.create( model="sonar", messages=[ {"role": "system", "content": "Eres analista de IA para agencias. Responde en español, conciso."}, {"role": "user", "content": pregunta}, ], ) return resp.choices[0].message.content # ── 2. INVESTIGACIÓN PROFUNDA CON CITAS ──────────────────────────── def investigacion(self, tema: str) -> dict: """sonar-pro: análisis exhaustivo + URLs de fuentes verificadas.""" resp = self.client.chat.completions.create( model="sonar-pro", messages=[ {"role": "system", "content": "Analista senior de mercado IA. Cita siempre las fuentes. Español."}, {"role": "user", "content": tema}, ], max_tokens=2000, ) contenido = resp.choices[0].message.content citas = getattr(resp, "citations", []) return {"respuesta": contenido, "citas": citas} # ── 3. SESIÓN MULTI-TURNO ────────────────────────────────────────── def chat(self, mensaje: str) -> str: """sonar-pro multi-turno: contexto acumulativo entre preguntas.""" if not self.history: self.history.append({ "role": "system", "content": "Asistente de research IA para CULTIVA IA. Cita fuentes. Español.", }) self.history.append({"role": "user", "content": mensaje}) resp = self.client.chat.completions.create( model="sonar-pro", messages=self.history ) answer = resp.choices[0].message.content self.history.append({"role": "assistant", "content": answer}) return answer def reset_chat(self): self.history = [] # ── 4. STREAMING PARA DASHBOARD ──────────────────────────────────── def stream(self, pregunta: str): """sonar: streaming token a token para UX reactiva.""" stream = self.client.chat.completions.create( model="sonar", messages=[{"role": "user", "content": pregunta}], stream=True, ) for chunk in stream: delta = chunk.choices[0].delta.content if delta: yield delta # → enviar a WebSocket / SSE # ── 5. RETRY CON BACKOFF EXPONENCIAL ─────────────────────────────── def buscar_con_retry(self, query: str, reintentos: int = 3) -> str: """Producción: manejo automático de rate-limiting.""" for intento in range(reintentos): try: resp = self.client.chat.completions.create( model="sonar", messages=[{"role": "user", "content": query}], timeout=30, ) return resp.choices[0].message.content except RateLimitError: wait = 2 ** intento print(f"Rate limit. Reintentando en {wait}s...") time.sleep(wait) raise RuntimeError("Máximo de reintentos alcanzado") # ── DEMO ────────────────────────────────────────────────────────────── if __name__ == "__main__": agente = IntelAgente() # 1. Consulta rápida print(agente.consulta_rapida("¿Qué modelos LLM han lanzado esta semana?")) # 2. Investigación con citas resultado = agente.investigacion("Precios actuales GPT-4o vs Claude 3.7 vs Gemini 2.5 Pro") print(resultado["respuesta"]) for i, url in enumerate(resultado["citas"], 1): print(f"[{i}] {url}") # 3. Sesión multi-turno print(agente.chat("¿Qué labs publican modelos en 2025?")) print(agente.chat("¿Cuál tiene mejor precio por millón de tokens?")) # 4. Streaming for token in agente.stream("Tendencias IA para agencias de marketing en Q3 2025"): print(token, end="", flush=True)
Consulta automática cada lunes: qué modelos/herramientas nuevas hay, cambios de pricing, noticias regulatorias EU AI Act.
sonarInforme profundo comparando precios, context window y capacidades de los top LLMs. Múltiples búsquedas, fuentes verificadas.
sonar-proMulti-turno: empieza con visión global del sector, profundiza en competidores específicos, extrae datos de pricing en conversación continua.
sonar-pro (multi-turno)Respuesta token a token para widgets de inteligencia en tiempo real. Conecta vía WebSocket o Server-Sent Events a una UI React.
sonar (stream=True)Para workflows batch (reportes nocturnos, alertas automáticas): manejo de rate limits con backoff exponencial. Sin intervención manual, nunca pierde una query.
sonar · RateLimitError + backoff 2^nagente.investigacion("Precios actuales GPT-4o vs Claude 3.7 vs Gemini 2.5 Pro")
A fecha de hoy, los tres modelos líderes tienen la siguiente estructura de precios por millón de tokens (MTok):
GPT-4o (OpenAI): $2.50 entrada / $10.00 salida [1]. Ofrece contexto de 128K tokens y visión nativa. Con batch API, el precio de entrada cae a $1.25/MTok.
Claude 3.7 Sonnet (Anthropic): $3.00 entrada / $15.00 salida [2]. Destaca en coding y razonamiento extendido. Contexto de 200K tokens. Extended thinking disponible con sobrecargo.
Gemini 2.5 Pro (Google): $1.25 entrada / $10.00 salida [3] hasta 200K tokens; $2.50 / $15.00 para prompts más largos. Mayor contexto del mercado (2M tokens). Precio más competitivo en entradas.
Para agencias de IA con alto volumen, Gemini 2.5 Pro ofrece la mejor relación coste/contexto. Claude 3.7 es preferible para tareas de código complejo.
1. Generación de contenido multimodal — Modelos como GPT-4o y Gemini 2.5 Flash permiten crear copy + imagen + vídeo corto en un solo pipeline, reduciendo tiempos de producción hasta un 73%...
2. Hiperpersonalización en tiempo real — Agentes conectados a CRM sincronizan mensajes por segmento dinámicamente. Tasa de conversión media mejora un 31% respecto a campañas estáticas...
3. Análisis de competencia automatizado — Exactamente lo que hace este agente: monitorización continua con Perplexity
- Usa
sonarpara lookups rápidos ysonar-propara research exhaustivo - Accede a citas vía
getattr(resp, "citations", []) - Implementa siempre retry con backoff exponencial para producción
- Para dashboards en vivo, usa
stream=True+ WebSocket/SSE - Combina con APIs directas para datos precisos (precios, cotizaciones)
- Latencia 2–5s por búsqueda web — no usar en rutas síncronas críticas
- El system prompt no puede desactivar la búsqueda en modelos online
- Los costes incluyen overhead de búsqueda — presupuestar con margen
- La búsqueda es English-centric aunque responda en español
- Para datos financieros exactos, combinar con APIs dedicadas (Yahoo Finance, etc.)