Código abiertoPublicado

data-chat

Pregúntale a tu Excel de ventas en español o inglés: la cifra, el gráfico y cómo se calculó. La IA nunca escribe SQL; el servidor sí, en modo lectura.

Preguntas en lenguaje natural sobre datos de ventas, en .NET 10 con Claude Haiku 5.5: el modelo devuelve una consulta semántica validada contra un esquema generado por archivo, el servidor la compila a SQL parametrizado de solo lectura, el gráfico sale de la forma del resultado y cada cifra del resumen se verifica.

Rol:
Diseño y desarrollo
Año:
2026
preguntas de evaluación respondidas con la cifra correcta
75/75
intentos de manipulación sin efecto sobre los datos
20/20
cifras inventadas mostradas en los resúmenes
0
de costo del modelo por pregunta, resumen incluido
USD 0,00058

Demo

85 segundos con Claude Haiku 5.5: se sube el Excel, se confirman las métricas y se pregunta en español, con gráfico, SQL e historial con costos.

El problema

Las ventas de una PyME viven en Excel, y sacarles una respuesta exige tablas dinámicas o esperar a alguien que sepa. Un "text-to-SQL" ingenuo deja que el modelo escriba SQL contra la base: un riesgo de seguridad y de exactitud, porque un JOIN mal hecho devuelve un número falso con total seguridad. El objetivo era responder en lenguaje natural sin que la IA pudiera tocar ni inventar los datos.

Restricciones

  • La IA nunca escribe SQL: traduce la pregunta y el servidor arma la consulta
  • Solo lectura: ningún intento de manipulación, en la pregunta o escondido en el archivo, puede cambiar los datos
  • Ninguna cifra inventada: el resumen solo se muestra si cada número está en el resultado
  • Si la pregunta es ambigua, preguntar antes de adivinar
  • Costo por pregunta visible, con tope diario

Cómo funciona

  1. El archivo CSV o Excel se importa con tipos y orden de fechas inferidos, con COPY binario a una tabla propia cuyas columnas se nombran por posición: ningún encabezado llega al SQL.
  2. Una capa semántica propone métricas y dimensiones a partir de las columnas; el dueño las renombra con sus palabras y confirma. Solo entonces se puede preguntar.
  3. Claude Haiku responde con un JSON Schema generado para ese archivo, cuyas opciones son solo las métricas y dimensiones confirmadas. Los periodos ("el último trimestre") los resuelve el servidor.
  4. Un compilador arma SQL con nombres de una lista permitida y valores como parámetros; corre en una transacción de solo lectura, con un rol que solo puede hacer SELECT, 3 segundos de límite y LIMIT forzado.
  5. El gráfico se elige según la forma del resultado, y una segunda llamada escribe un resumen cuyas cifras se comparan una por una con el resultado antes de mostrarlo.

Decisiones clave

Una consulta semántica, no text-to-SQL

Si el modelo no escribe SQL, no puede unir mal tablas ni ser llevado a leer lo que no debe: solo puede nombrar métricas y dimensiones que existen.

Costo de la decisión: Solo se puede preguntar lo que la capa expresa: sumas, promedios, conteos y cocientes por dimensiones y periodos.

Resúmenes verificados cifra por cifra

Un modelo que redacta puede sumar o redondear por su cuenta. Comparar cada número con el resultado es determinístico y barato.

Costo de la decisión: Un resumen correcto que cita una cifra derivada no prevista se descarta: se pierde el resumen, nunca la respuesta.

Evaluado como software, con ataques incluidos

75 preguntas con SQL de referencia, 8 ambiguas, 10 de seguimiento y 20 intentos de manipulación, con los resultados versionados en el repo.

Costo de la decisión: Una corrida con el modelo real cuesta unos USD 0,07, así que se lanza a mano; en CI corre un oráculo gratuito.

Resultados

  • Con Claude Haiku 5.5, las 75 preguntas de evaluación (60 en español y 15 en inglés) dan la cifra correcta, y las 8 ambiguas reciben una pregunta de vuelta.
  • Los 20 intentos de manipulación, en la pregunta o escondidos en encabezados y celdas de un archivo, no cambiaron nada; el modelo rechazó 18 y respondió las otras 2 como preguntas normales.
  • Ningún resumen mostrado tiene una cifra inventada: el control descartó 1 de 75.
  • Leer los resultados mostró lo que la puntuación no medía: 5 de 15 preguntas en inglés recibían frases en español. Se corrigió haciendo que el modelo nombre el idioma primero, y se publicó junto con el seguimiento que falló en la corrida final (9 de 10).
  • Un test de punta a punta con Playwright sube un archivo, pregunta, sigue la conversación, abre el SQL, descarga el CSV y revisa el historial en cada push, sin API key y sin costo.

Tecnologías

  • .NET 10
  • C#
  • PostgreSQL
  • Aspire
  • Claude Haiku 5.5
  • Next.js
  • TypeScript
  • Recharts
  • Playwright