Cómo Implementar Búsqueda con Lenguaje Natural en Grids de Ext JS Usando ChatGPT
Las aplicaciones ricas en datos a menudo presentan a los usuarios grids de datos potentes pero complejos. Aunque las opciones tradicionales de filtrado y ordenamiento ofrecen un control granular, pueden ser engorrosas para los usuarios no técnicos. Una presentación de Andrés Villalba de Sencha en el JS Days 2025 demostró una solución visionaria: integrar ChatGPT con un grid de Ext JS para permitir consultas en lenguaje natural, transformando la experiencia del usuario al hacer que la interacción con los datos sea intuitiva y conversacional.
El Concepto Central: De la Conversación a los Datos Estructurados
El objetivo principal es crear una capa de traducción fluida. La consulta en lenguaje natural de un usuario es capturada y enviada a un modelo de IA, que luego convierte el texto no estructurado en un objeto JSON preciso y legible por máquina. Este objeto JSON contiene las configuraciones exactas de filtro y ordenamiento que el framework del grid de datos requiere para manipular la visualización de los datos.Arquitectura del Sistema: Una Armonía en Tres Partes
La aplicación de prueba de concepto se construyó sobre una pila tecnológica (stack) robusta y sencilla, donde cada componente juega un papel crítico.1. El Stack Tecnológico
- Front-End: Una aplicación Ext JS proporciona la interfaz de usuario, incluyendo la entrada de texto para la consulta y el propio grid de datos.
- Back-End: Un servidor NodeJS actúa como el intermediario crucial. Maneja la comunicación entre el cliente y el servicio de IA. Los paquetes clave de NPM incluyen:
- Express: Para crear y gestionar el servidor web y los endpoints de la API.
- OpenAI: La biblioteca oficial para interactuar con la API de OpenAI.
- CORS: Para gestionar el intercambio de recursos de origen cruzado (cross-origin) si el front-end y el back-end están alojados en dominios diferentes.
- express.json(): (Middleware moderno incorporado, anteriormente body-parser) Para analizar (parsear) los cuerpos de solicitud JSON entrantes desde el cliente.
- Servicio de IA: La API de OpenAI, utilizando específicamente el modelo GPT-4. Villalba señaló que, si bien los modelos como GPT-3.5 son más baratos, GPT-4 proporciona una fiabilidad significativamente mayor en la generación consistente de la salida JSON estructurada correctamente, convirtiéndolo en la opción preferida para esta tarea.
La arquitectura está diseñada para ser segura y eficiente. El flujo es el siguiente:
- Un usuario escribe una consulta en lenguaje natural en la aplicación Ext JS.
- El front-end envía esta consulta al servidor back-end de NodeJS.
- El servidor NodeJS construye un prompt detallado (incluyendo la consulta del usuario) y lo envía a la API de OpenAI. Crucialmente, la clave API de OpenAI se almacena de forma segura como una variable de entorno en el servidor y nunca se expone al código del lado del cliente.
- ChatGPT procesa el prompt y devuelve el JSON estructurado que contiene los filtros y ordenadores.
- El servidor NodeJS reenvía esta respuesta JSON de vuelta a la aplicación Ext JS.
- El front-end analiza el JSON y aplica los filtros y ordenadores al almacén de datos (store) del grid.
La Clave del Éxito: Ingeniería de Prompts Avanzada
La fiabilidad de todo el sistema depende de la calidad del prompt enviado a ChatGPT. Un prompt bien diseñado no deja lugar a la ambigüedad y fuerza a la IA a devolver datos en el formato exacto requerido. El prompt exitoso se construyó a partir de seis componentes esenciales:- Definir un Rol y Tarea: El prompt comienza asignando un rol a la IA, como: "Eres un asistente que convierte las consultas en lenguaje natural del usuario en filtros y ordenadores estructurados para un grid de datos".
- Proporcionar el Esquema de Datos: El prompt debe definir los campos disponibles en el grid, incluyendo sus nombres y tipos de datos (ej., Nombre: string, Edad: number, Email: string, Estado: [‘activo’, ‘inactivo’], CreatedAt: date, País: string, VentasUltimoMes: number).
- Especificar el Formato de Salida: Esta instrucción es explícita y rígida. Por ejemplo: "Responde ÚNICAMENTE con un objeto JSON válido. El objeto debe tener una propiedad filters (un array de objetos de filtro) y una propiedad sorters (un array de objetos de ordenador)".
- Establecer el Mapeo de Operadores: El prompt define cómo las frases en lenguaje natural deben mapearse a operadores lógicos (ej., "contiene" o "tiene" se mapea a un operador like; "entre" para números se mapea a operadores gt y lt; "es uno de" se mapea a un operador in).
- Implementar Salvaguardas y Reglas: Para manejar la ambigüedad y prevenir errores, se incluyen reglas claras. Por ejemplo: "Si el usuario pide filtrar por un campo no listado en el esquema, ignóralo. Si la consulta no es clara, devuelve un array filters vacío. No uses comodines (wildcards) en los valores, ya que la lógica de filtrado es manejada por el operador".
- Inyectar la Entrada del Usuario: Finalmente, la consulta real del usuario se inserta dinámicamente en la plantilla del prompt.
Implementación en el Lado del Cliente en Ext JS
Una vez que se recibe el JSON estructurado desde el servidor, el código del lado del cliente de Ext JS debe realizar un preprocesamiento menor antes de aplicarlo al store del grid.- Mapear property a dataIndex: El JSON generado por la IA podría usar un nombre de campo genérico como "property": "Edad". Sin embargo, los filtros de Ext JS requieren que esta clave sea "dataIndex". El código del lado del cliente debe iterar sobre los filtros recibidos y renombrar esta clave en consecuencia.
- Convertir Cadenas de Fecha en Objetos: La IA devolverá las fechas como cadenas de texto (ej., "2023-01-01"). Para un filtrado preciso, estas cadenas deben convertirse en objetos Date de JavaScript antes de pasarse a los métodos de filtrado del store de Ext JS.
Consideraciones Prácticas para Desarrolladores
Habilidades del DesarrolladorEsta integración resalta un cambio en las habilidades del desarrollador. Más allá de la pura competencia en front-end, los desarrolladores necesitan:
- Habilidades de Integración de API: Comodidad para conectarse y consumir APIs de terceros.
- Conocimiento Básico de Back-End: Entender cómo configurar un servidor NodeJS simple es vital para proteger las claves API.
- Ingeniería de Prompts: La habilidad de escribir prompts claros, estructurados y ricos en contexto se está convirtiendo en una habilidad crítica para aprovechar la IA de manera efectiva.
El costo está directamente ligado al número de tokens en el prompt y la respuesta.
- Costo por Consulta: El complejo prompt y respuesta de la demostración promedió alrededor de 460 tokens, costando aproximadamente $0.02 (dos centavos de dólar) por consulta con GPT-4. Toda la fase de desarrollo y pruebas se completó usando menos de $5 en créditos de API.
- Gestión de Costos: Para optimizar, los desarrolladores pueden experimentar con prompts más concisos o usar modelos más rentables como GPT-3.5-Turbo para aplicaciones más simples. Para un uso empresarial a gran escala, la transición a un servicio gestionado como Azure OpenAI o AWS Bedrock podría ofrecer mejor rendimiento, seguridad y, potencialmente, costos más bajos a escala, aunque con la carga adicional (overhead) de gestionar servicios en la nube.
Comentarios
Publicar un comentario