Saltar al contenido principal
Jordi Izquierdo Montalbán
Proyectos

Investigador Profundo Multi-Agente (Deep Research)

Sistema multiagente de investigación autónoma: supervisor concurrente en paralelo (asyncio.gather), aclaración previa de alcance (scoping con Pydantic), búsqueda web con Tavily, compresión semántica y síntesis de informes ejecutivos con citas cruzadas.

Código privado: te lo enseño en una entrevista

LangGraph, Python, Tavily Search API, asyncio, MCP, Pydantic, LangSmith, html2text

El problema

Investigar a fondo un tema con un LLM choca con dos cosas:

  1. Consultas ambiguas. Si alguien pide «hazme un informe sobre IA en logística», el agente busca a ciegas y gasta tiempo y tokens.
  2. Ruido web. Las páginas descargadas traen menús, JavaScript, avisos de cookies y publicidad. Todo eso llena el contexto y empuja al modelo a alucinar.

La solución

Flujo de investigación profunda: aclaración de alcance (scoping) → supervisor concurrente → subagentes en paralelo con Tavily y MCP → compresión semántica y síntesis de informe con citas.

Diseñé con LangGraph un sistema multiagente de investigación profunda que trabaja en cinco pasos, unos secuenciales y otros concurrentes:

  1. Antes de hacer ninguna búsqueda, el nodo ClarifyWithUser analiza la consulta con salida estructurada (Pydantic). Si detecta ambigüedad, pausa y pregunta lo necesario para fijar el objetivo.
  2. Con el objetivo claro, el supervisor divide la investigación en ángulos complementarios y lanza varios sub-agentes en paralelo con asyncio.gather.
  3. Cada agente consulta la API de Tavily, convierte el HTML a texto limpio (html2text) y pasa una compresión semántica rápida. Solo los hechos y las citas relevantes entran en el estado.
  4. Conecto herramientas locales y remotas con el estándar abierto Model Context Protocol (MultiServerMCPClient), para usar archivos y APIs sin depender de un formato propietario.
  5. Un agente redactor reúne los hallazgos en un informe en Markdown, con secciones ejecutivas, verificación de hechos y citas cruzadas a las fuentes originales.

Stack desglosado

  • Orquestación: LangGraph (StateGraph, MessagesState, Command).
  • Concurrencia: Python asyncio (asyncio.gather para búsqueda simultánea).
  • Extracción web: Tavily Search API, html2text y filtros extractivos.
  • Protocolos y contratos: Model Context Protocol (MCP) y Pydantic para tipado estricto.
  • Observabilidad: LangSmith para trazabilidad completa de tokens, latencias por nodo y depuración.

Resultados y aprendizajes

Lo que funcionó fue combinar la aclaración previa con la ejecución en paralelo. Resolver la ambigüedad antes de buscar ahorra decenas de miles de tokens, y buscar en paralelo bajó el tiempo de generar un informe de minutos a menos de 45 segundos.

Lo que aprendí: en un sistema de investigación profunda lo difícil no es buscar, es saber qué descartar. Comprimir por el camino es lo que mantiene la precisión y los costes de API bajo control.