Inicio / Artículos

Desde demostraciones de NL a SQL hasta un asistente de análisis de IA en entorno aislado

De las demostraciones de NL a SQL a un asistente de análisis de IA en entorno aislado: listas de permisos de esquema, verificaciones estáticas, ejecución aislada, límites en los resultados y registros de auditoría para cada consulta.

Editor: REACTAPP.TOP4 min de lectura1006 palabras

Fuentes: From “Natural Language to SQL” to a Secure AI Analytics Assistant: An Architecture Evolution

Permitir que un modelo de lenguaje escriba y ejecute código para análisis es un problema de defensa en profundidad, no un truco con los prompts.

El problema inicial

Los usuarios empresariales tienen preguntas como “precio promedio de las casas por ciudad”, “diez propiedades más caras” o “precio más alto por pie cuadrado”, pero no tienen habilidades en SQL. La solución obvia es la conversión de lenguaje natural a SQL: hacer la pregunta en inglés, generar una consulta y ejecutarla.

Versión uno: conversión directa de lenguaje natural a SQL

Las primeras versiones generan SQL a partir de la pregunta y lo ejecutan en el almacén de datos. Las demostraciones son impresionantes. Luego alguien solicita un cálculo que SQL no expresa bien, el modelo inventa una columna o un prompt elaborado intenta ejecutar DROP TABLE.

SELECT city, AVG(house_price) AS avg_price
FROM house_pricing
GROUP BY city;
SELECT department, AVG(salary) FROM employees GROUP BY department;
result = (
df.groupby("department")["salary"]
.mean()
.reset_index()
)
import os
os.remove("file.csv")
import subprocess
subprocess.run(…)

Apartarse por completo de SQL

Un enfoque más flexible: permitir que el modelo escriba Python corto utilizando una API de dataframe restringida en lugar de cadenas SQL en bruto. Esto permite análisis al estilo de pandas, pero también amplía el riesgo si la ejecución no se controla.

Hacer que las instrucciones sean fiables

Una instrucción fiable implica:

  • tarjetas de esquema que solo muestren tablas/columnas permitidas
  • ejemplos de pocos casos de patrones seguros
  • rechazo explícito cuando la pregunta requiere campos no permitidos
  • salida estructurada (blocos de código o JSON) que el procesador pueda analizar

El problema más importante: ejecutar código generado por LLM

La ejecución representa el límite de seguridad. Nunca ejecute código del modelo en el proceso de la aplicación con privilegios totales. Utilice un entorno aislado: sin conexión a red, recursos de CPU/memoria limitados, importaciones permitidas por lista, tiempos de espera y acceso solo de lectura a los conjuntos de datos aprobados.

Aplicar capas adicionales de protección

Estrategias de defensa en profundidad:

  1. Firewall de prompts — rechaza intentos de evasión y solicitudes fuera del alcance permitido
  2. Lista blanca de esquemas — el modelo solo ve los campos aprobados
  3. Verificaciones estáticas — prohíbe las importaciones, la entrada/salida de archivos, eval y los subprocesos
  4. Ejecución en entorno aislado — isola la ejecución del modelo
  5. Límites en los resultados — límites de filas y bytes antes de devolverlos a la interfaz de usuario
  6. Registro de auditoría — quién realizó la solicitud, qué código se ejecutó y qué se devolvió

Hacerlo resistente, no solo seguro

Reintentos ante fallos temporales, semillas deterministas cuando sea posible, tarjetas de esquemas en caché y escalada humana cuando el modelo no puede responder de forma segura. La seguridad sin resistencia solo genera errores educados.

La arquitectura que surgió

Gateway → política → planificador/prompt → ejecutor en entorno aislado → formateador → auditoría. SQL puede seguir utilizándose como herramienta interna para filtros simples, pero Python-in-a-box gestionó las complejas tareas analíticas sin exponer el sistema a instrucciones arbitrarias.

Por qué este proyecto resultó ser el más interesante

NL-to-SQL es una demostración de traducción. Los asistentes analíticos seguros representan la ingeniería de productos: modelos de amenazas, entornos aislados, listas de permisos y una interfaz de usuario que explica los rechazos. Ese es el trabajo que merece mantenerse.

Entregar un conjunto completo: preguntas benignas, preguntas de exploración del esquema y intentos de importación maliciosos. Fallar en la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza la solicitud sin una razón clara.

Envía un conjunto de pruebas ideal: preguntas benignas, preguntas de exploración del esquema y intentos maliciosos de importación. Falla la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza falsamente sin una razón clara.

Envía un conjunto de pruebas ideal: preguntas benignas, preguntas de exploración del esquema y intentos maliciosos de importación. Falla la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza falsamente sin una razón clara.

Envía un conjunto de pruebas ideal: preguntas benignas, preguntas de exploración del esquema y intentos maliciosos de importación. Falla la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza falsamente sin una razón clara.

Envía un conjunto de pruebas ideal: preguntas benignas, preguntas de exploración del esquema y intentos maliciosos de importación. Falla la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza falsamente sin una razón clara.

Envía un conjunto de pruebas ideal: preguntas benignas, preguntas de exploración del esquema y intentos maliciosos de importación. Falla la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza falsamente sin una razón clara.

Envía un conjunto de pruebas ideal: preguntas benignas, preguntas de exploración del esquema y intentos maliciosos de importación. Falla la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza falsamente sin una razón clara.

Envía un conjunto de pruebas ideal: preguntas benignas, preguntas de exploración del esquema y intentos maliciosos de importación. Falla la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza falsamente sin una razón clara.

Envía un conjunto de pruebas ideal: preguntas benignas, preguntas de exploración del esquema y intentos maliciosos de importación. Falla la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza falsamente sin una razón clara.

Envía un conjunto de pruebas ideal: preguntas benignas, preguntas de exploración del esquema y intentos maliciosos de importación. Falla la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza falsamente sin una razón clara.

Envía un conjunto de pruebas ideal: preguntas benignas, preguntas de exploración del esquema y intentos maliciosos de importación. Falla la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza falsamente sin una razón clara.

Envía un conjunto de pruebas ideal: preguntas benignas, preguntas de exploración del esquema y intentos maliciosos de importación. Falla la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza falsamente sin una razón clara.

Envía un conjunto de pruebas ideal: preguntas benignas, preguntas de exploración del esquema y intentos maliciosos de importación. Falla la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza falsamente sin una razón clara.

Envía un conjunto de pruebas “golden suite”: preguntas benignas, preguntas de exploración del esquema y intentos maliciosos de importación. Falla la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza falsamente sin una razón clara.

Envía un conjunto de pruebas “golden suite”: preguntas benignas, preguntas de exploración del esquema y intentos maliciosos de importación. Falla la compilación si algún caso malicioso se ejecuta fuera del entorno aislado o si un caso benigno rechaza falsamente sin una razón clara.