Ir al contenido

proyecto · tier 1 · 2026

Sabueso — un investigador multiagente para periodismo anticorrupción en LATAM

Un orquestador que reparte el trabajo entre 6 agentes investigadores en paralelo, verificado con un paso de Mixture-of-Agents, para sintetizar investigación de registros públicos que un periodista haría a mano.

Rol
Creador e ingeniero
Periodo
may 2026 — Presente
Visitar
sabueso-silk.vercel.app
6investigadores en paralelo
1orquestador
MoApaso de verificación
LATAMinvestigación anticorrupción, LATAM

El problema

El periodismo anticorrupción en LATAM significa perseguir la misma denuncia a través de registros de contratación pública, expedientes judiciales, archivos de noticias y redes sociales — trabajo que escala mal con el tamaño de la redacción, no con el tamaño de la historia.

Qué construí

Sabueso es un investigador multiagente jerárquico: un orquestador planifica la investigación con el patrón ReWOO (razonar y luego actuar sin replanificar en cada paso) y la reparte entre 6 agentes investigadores en paralelo, cada uno cubriendo una fuente de evidencia distinta. Una barrera los sincroniza antes de un paso de verificación — implementado como una votación Mixture-of-Agents en vez de la opinión de un solo modelo — que reconcilia hallazgos contradictorios antes de armar el reporte.

El frontend renderiza la investigación misma como un grafo con cosmos.gl, para que quien lee vea qué fuentes corroboran una afirmación, no solo lea un párrafo que la asegura. La ingesta corre con Scrapling y CocoIndex hacia Postgres, con pgvector para recuperación semántica y pgmq como cola de tareas entre la API y el worker de investigación.

Arquitectura

load_contextplanbuscadortasadoracontadorletradodetectiveperiodistacollectjuezasynthesizepersist

Pasa el cursor o tabula por un nodo para leer qué hace. Arriba: entrada; abajo: salida.

  • Carga la entidad objetivo y los últimos claims de investigaciones previas para que el planificador no los redescubra.
  • Sabueso (Claude Sonnet 4.6, 4 breakpoints de caché) convierte el caso en pasos de plan; una arista condicional fan_out envía uno a cada investigador en paralelo.
  • El Buscador (ReWOO) resuelve identificadores DNI y RUC y visitas oficiales con find_dni_record, find_ruc_record y search_manolo.
  • La Tasadora (ReAct) lee las hojas de vida del JNE y las cruza con partidas de SUNARP en busca de discrepancias patrimoniales.
  • El Contador (ReWOO) busca contrataciones públicas en SEACE por RUC y convierte cada adjudicación en un claim.
  • El Letrado (ReWOO) consulta el corpus Legalize por leyes votadas, sentencias y conflictos voto-interés.
  • El Detective (ReAct) recorre relaciones de familia, socios y directorios con find_relatives y SUNARP, emitiendo aristas del grafo en vez de claims.
  • El Periodista (ReAct) busca en el archivo de prensa, guarda snapshots en Wayback Machine y profundiza en el archivo de Twitter.
  • Barrera tras el fan-out: LangGraph converge aquí cuando termina cada Send y el reducer ya concatenó todos los claims, aristas y eventos.
  • La Jueza verifica cada claim con Mixture-of-Agents: 3 proposers en paralelo contra la fuente primaria y un agregador Sonnet 4.6 calibra el veredicto final.
  • Sabueso como redactor en jefe (Claude Opus 4.7, una sola llamada) redacta el dossier en Markdown: resumen, hallazgos, evidencia, contradicciones, próximos pasos.
  • Escribe la investigación, sus claims y aristas en Postgres en una sola transacción — todo o nada.

El `StateGraph` de LangGraph de Sabueso — `plan` (en anillo) reparte a 6 investigadores en paralelo, `collect` es la barrera, `jueza` la verificación Mixture-of-Agents, `synthesize` el dossier, de arriba abajo.

Evidencia

Sabueso LATAM — vídeo de presentación · YouTube · se carga al hacer clic

Aristas