UNPKG

cyber-mysql-openai

Version:

Intelligent natural language to SQL translator with self-correction capabilities using OpenAI and MySQL

694 lines (525 loc) 28.4 kB
# Cyber-MySQL-OpenAI **Traductor inteligente de lenguaje natural a SQL para Node.js** [![npm version](https://img.shields.io/npm/v/cyber-mysql-openai.svg?style=flat-square)](https://www.npmjs.com/package/cyber-mysql-openai) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](https://opensource.org/licenses/MIT) [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg?style=flat-square)](https://www.typescriptlang.org/) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/dannyusca/cyber-mysql-openai) <br /> <div align="center"> <p>Si esta librería te ahorró horas de desarrollo, considera invitarme un café:</p> <a href="https://buymeacoffee.com/dannyusca" target="_blank"> <img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 50px !important;width: 217px !important;" > </a> </div> <br /> Cyber-MySQL-OpenAI es una librería para Node.js que traduce consultas en lenguaje natural a SQL válido, ejecuta las consultas en MySQL y devuelve los resultados acompañados de explicaciones comprensibles, todo impulsado por OpenAI. [English documentation](README.md) --- ## <img src="https://api.iconify.design/mdi:format-list-bulleted.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Tabla de Contenidos - [Características](#características) - [Instalación](#instalación) - [Requisitos del Sistema](#requisitos-del-sistema) - [Uso Básico](#uso-básico) - [Funciones de Inteligencia (v0.3.0)](#funciones-de-inteligencia-v030) - [Optimización de Tokens (v0.3.2)](#optimización-de-tokens-v032) - [Streaming y Modo Agéntico (v0.3.4)](#streaming-y-modo-agéntico-v034) - [Opciones de Configuración](#opciones-de-configuración) - [Sistema de Cache](#sistema-de-cache) - [Soporte Multiidioma](#soporte-multiidioma) - [Referencia de API](#referencia-de-api) - [Solución de Problemas](#solución-de-problemas) - [Estado del Proyecto](#estado-del-proyecto) - [Licencia](#licencia) --- ## <img src="https://api.iconify.design/mdi:lightning-bolt.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Características - **Traducción de lenguaje natural a SQL** Convierte preguntas en texto plano a consultas SQL válidas - **Ejecución automática** Ejecuta las consultas generadas directamente en tu base de datos MySQL - **Corrección autónoma de errores** Detecta y corrige consultas fallidas de forma autónoma (hasta 3 intentos de reflexión) - **Explicaciones en lenguaje natural** Traduce los resultados técnicos a respuestas comprensibles - **Salida estructurada con function calling** Usa function calling de OpenAI para respuestas JSON predecibles con fallback automático a texto - **Contexto de negocio** Enriquece la IA con conocimiento específico del dominio sobre tus tablas y columnas - **Detección de relaciones Foreign Key** Descubre automáticamente las relaciones FK para JOINs precisos - **Ejemplos few-shot** Proporciona pares pregunta/SQL de referencia para guiar al modelo - **Puntuación de confianza** Cada consulta incluye un score de confianza indicando qué tan bien responde a la pregunta - **Soporte multiidioma** Español e inglés con cambio dinámico en tiempo de ejecución - **Cache en memoria** Capa de caché opcional de alto rendimiento con TTL variable y limpieza automática - **Soporte completo para TypeScript** Definiciones de tipos completas para una experiencia de desarrollo fluida - **Altamente configurable** Ajusta logging, cache, idioma y modelo según tus necesidades - **Inteligencia Mejorada (v0.3.0)** Prompts optimizados con reglas de SQL y mejor desambiguación - **Instrucciones Personalizadas** Inyecta tus propias reglas de negocio y estilos de respuesta en la IA - **Capa de Validación de Queries** Verifica automáticamente el SQL generado por seguridad, existencia de tablas y productos cartesianos - **Cache de Esquema** TTL configurable para reducir la carga de la base de datos y mejorar la latencia - **Seguimiento de Uso de Tokens** Conteo detallado de tokens y costo estimado por consulta - **Historial de Consultas** Registro en memoria de consultas ejecutadas con estadísticas de rendimiento - **Logging avanzado** Sistema de logging estructurado con seguimiento de uso de tokens y auditoría de prompts/respuestas - **Optimización de Tokens (v0.3.2)** Schema comprimido, `lightModel` para subtareas y schema filtrado en reflexiones **50–70% menos tokens por request** --- ## <img src="https://api.iconify.design/mdi:download.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Instalación ```bash npm install cyber-mysql-openai ``` --- ## <img src="https://api.iconify.design/mdi:cog.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Requisitos del Sistema | Requisito | Detalles | | ----------------- | ------------------------------------------------------ | | **Node.js** | v16.x o superior (desarrollado y probado con v22.15.0) | | **Base de datos** | MySQL o MariaDB | | **Clave API** | Una clave API válida de OpenAI | --- ## <img src="https://api.iconify.design/mdi:lightbulb-on.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Uso Básico ```typescript import { CyberMySQLOpenAI } from "cyber-mysql-openai"; import "dotenv/config"; const translator = new CyberMySQLOpenAI({ database: { host: process.env.DB_HOST || "localhost", port: 3306, user: process.env.DB_USER || "", password: process.env.DB_PASSWORD || "", database: process.env.DB_DATABASE || "", ssl: false, }, openai: { apiKey: process.env.OPENAI_API_KEY || "", model: "gpt-4", }, language: "es", }); async function main() { try { const result = await translator.query( "¿Cuál fue el producto más vendido el mes pasado?", ); console.log("SQL generado:", result.sql); console.log("Resultados:", result.results); console.log("Explicación:", result.naturalResponse); await translator.close(); } catch (error) { console.error("Error:", error); } } main(); ``` --- ## <img src="https://api.iconify.design/mdi:lightbulb.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Funciones de Inteligencia (v0.3.0) ### 1. Instrucciones Personalizadas y Estilo de Respuesta Ahora puedes inyectar reglas de negocio específicas y controlar la personalidad de la IA: ```typescript const translator = new CyberMySQLOpenAI({ // ... context: { businessDescription: "Plataforma de comercio electrónico", // v0.3.0: Reglas personalizadas customInstructions: [ "Siempre excluir registros con borrado lógico (deleted_at IS NOT NULL)", "Cuando pregunten por 'ingresos', usar la suma de total_amount de la tabla orders", ], // v0.3.0: Estilo de respuesta ('concise', 'detailed', 'technical') responseStyle: "concise", }, }); ``` ### 2. Validación de Queries Cada consulta generada se valida automáticamente antes de su ejecución. El sistema verifica: - **Operaciones peligrosas**: Solo se permiten sentencias `SELECT`; bloquea `UPDATE`, `DROP`, etc. - **Validación de esquema**: Verifica tablas o columnas inexistentes (mejor esfuerzo). - **Productos cartesianos**: Advierte sobre posibles productos cartesianos por condiciones JOIN faltantes. - **Chequeos de rendimiento**: Identifica consultas grandes sin cláusula `LIMIT`. ### 3. Cache de Esquema Reduce la latencia y la carga de la base de datos cacheando las definiciones del esquema: ```typescript const translator = new CyberMySQLOpenAI({ // ... schemaTTL: 600000, // Cachear esquema por 10 minutos (default: 5 min) }); // Forzar refresco si el esquema cambia translator.refreshSchema(); ``` ### 4. Historial de Consultas y Estadísticas Rastrea el rendimiento y uso durante la sesión: ```typescript const stats = translator.getQueryStats(); console.log(stats); // { // totalQueries: 10, // successfulQueries: 9, // averageExecutionTime: 450ms, // totalTokensUsed: 5200 // } // Obtener las últimas 5 consultas const history = translator.getQueryHistory(5); ``` ### 5. Uso de Tokens y Estimación de Costos Cada resultado ahora incluye el uso detallado de tokens y el costo estimado: ```typescript const result = await translator.query("¿Cantidad de ventas?"); console.log(result.tokenUsage); // { // promptTokens: 500, // completionTokens: 50, // totalTokens: 550, // estimatedCost: 0.0015 // USD (basado en precios actuales del modelo) // } ``` --- ### Contexto de Negocio Proporciona a la IA conocimiento específico del dominio sobre tu base de datos: ```typescript import { CyberMySQLOpenAI, SchemaContext } from "cyber-mysql-openai"; const context: SchemaContext = { businessDescription: "Plataforma de e-commerce para productos electrónicos con pedidos, clientes e inventario", tables: { orders: { description: "Pedidos de compra con seguimiento de estado", columns: { status: "Estado del pedido: 'pending', 'shipped', 'delivered', 'cancelled'", total_amount: "Total en USD incluyendo impuestos y envío", }, }, products: { description: "Catálogo de productos con precios y niveles de stock", columns: { sku: "Identificador único del producto usado en sistemas de almacén", price: "Precio actual de venta en USD (antes de descuentos)", }, }, }, }; ``` ### Ejemplos Few-Shot Guía al modelo con pares pregunta/SQL de referencia específicos de tu dominio: ```typescript const context: SchemaContext = { businessDescription: "Plataforma de e-commerce", tables: { /* ... */ }, examples: [ { question: "¿Cuáles son las ventas totales de este mes?", sql: "SELECT SUM(total_amount) as total_ventas FROM orders WHERE MONTH(created_at) = MONTH(CURRENT_DATE()) AND YEAR(created_at) = YEAR(CURRENT_DATE())", }, { question: "¿Qué productos tienen poco stock?", sql: "SELECT name, stock FROM products WHERE stock < 10 ORDER BY stock ASC", }, ], }; ``` ### Relaciones Foreign Key La librería detecta automáticamente las relaciones FK desde el `information_schema` de tu base de datos y las incluye en el prompt de la IA. Esto permite al modelo construir JOINs precisos sin necesidad de describir manualmente las relaciones entre tablas. ### Function Calling con Fallback La librería usa la funcionalidad de function calling de OpenAI para respuestas estructuradas y predecibles: - **Modo primario (function calling):** Devuelve `{ sql, confidence, reasoning }` como JSON estructurado - **Modo fallback (texto):** Si el modelo no soporta function calling, la librería cae automáticamente al parsing de texto con `sqlCleaner` Este enfoque dual asegura compatibilidad con todos los modelos de OpenAI (GPT-3.5, GPT-4, GPT-4o, etc.). ### Puntuación de Confianza Cada resultado de consulta incluye un campo opcional `confidence` (0–1) cuando function calling está disponible: ```typescript const result = await translator.query( "¿Cuáles son los 5 productos con más ingresos?", ); console.log(result.confidence); // 0.95 console.log(result.sql); // SELECT ... ``` Usa `confidence` para implementar lógica como advertir al usuario cuando el modelo no está seguro, o activar una revisión manual para consultas con baja confianza. --- ## <img src="https://api.iconify.design/mdi:flash.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Optimización de Tokens (v0.3.2) Tres optimizaciones integradas reducen el consumo de tokens en un 50–70% sin cambios en el comportamiento. ### 1. Schema Comprimido El schema enviado a OpenAI ahora es ultra-compacto (~20 tokens/tabla vs ~60 antes): ``` # Antes Tabla orders (Pedidos): id (int, PRIMARY KEY), status (varchar), total_amount (decimal)... # Después orders: id* status total_amount→customers ``` `*` = PRIMARY KEY, `→tabla` = referencia FK. Las descripciones de negocio siguen apareciendo cuando están configuradas. ### 2. `lightModel` para Subtareas Usa un modelo más barato para reflexión y formato manteniendo el modelo principal para la generación SQL: ```typescript const translator = new CyberMySQLOpenAI({ openai: { apiKey: "...", model: "gpt-4o", // Generación SQL (requiere inteligencia) lightModel: "gpt-4o-mini", // Reflexión y formato (20x más barato, misma calidad) (v0.3.2) }, }); ``` O con variable de entorno: `OPENAI_LIGHT_MODEL=gpt-4o-mini` > **Impacto en costo**: `gpt-4o-mini` es ~20x más barato que `gpt-4o`. Dado que ~40% de las llamadas son subtareas, esto solo ya reduce el costo total en un 40–85%. ### 3. Schema Filtrado en Reflexiones Cuando una consulta falla y necesita corrección, solo se envía al LLM el schema de las **tablas usadas en el SQL fallido**, no el schema completo. En una BD de 30 tablas, esto puede reducir el prompt de reflexión en ~80%. --- ## <img src="https://api.iconify.design/mdi:connection.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Streaming y Modo Agéntico (v0.3.4) Esta versión introduce **streaming de respuestas en tiempo real** para reducir la latencia percibida del usuario a cero, y un **Modo Agéntico Multi-Paso** diseñado para bases de datos complejas o masivas de nivel empresarial. ### 1. Streaming de Respuestas (Callbacks y Generadores Asíncronos) En lugar de esperar a que se genere toda la explicación en lenguaje natural, puedes consumirla palabra por palabra. #### Opción A: Callback de Streaming (onChunk) - Compatible Hacia Atrás Pasa un callback `onChunk` al parámetro de opciones de `query()`: ```typescript const resultado = await translator.query( "¿Cuál es el producto más caro?", { onChunk: (chunk) => { process.stdout.write(chunk); } } ); ``` #### Opción B: Generador Asíncrono (queryStream) Usa `queryStream()` para obtener un control total sobre los eventos del ciclo de vida del agente paso a paso: ```typescript const stream = translator.queryStream("Lista nuestros 5 últimos pedidos"); for await (const chunk of stream) { if (chunk.type === "sql") { console.log("SQL Generado:", chunk.sql); } else if (chunk.type === "results") { console.log("Resultados de Base de Datos:", chunk.results); } else if (chunk.type === "chunk" && chunk.content) { process.stdout.write(chunk.content); // Explicación de resultados en tiempo real } else if (chunk.type === "done" && chunk.metadata) { console.log("\nEjecución finalizada en", chunk.metadata.executionTime + "ms"); } } ``` ### 2. Modo Agéntico Multi-Paso (estilo MCP) Para esquemas de bases de datos de gran tamaño que exceden las ventanas de contexto del modelo, habilita `mode: "agentic"`. En lugar de inyectar todo el esquema al inicio (One-Shot), el agente utiliza herramientas de inspección dinámicas sobre la marcha: ```typescript const agente = new CyberMySQLOpenAI({ database: { ... }, openai: { apiKey: "..." }, mode: "agentic" // "direct" (One-Shot) o "agentic" (Exploración de herramientas Multi-Paso) }); ``` * **Exploración de Herramientas**: El agente invoca secuencialmente herramientas internas (`list_tables`, `describe_table`, `execute_sql_query`) para explorar tablas y esquemas dinámicamente, ejecutando y explicando solo lo necesario. ### 3. Optimizaciones del Bucle de Reflexión * **Pruebas de Candidatos en Paralelo**: Ante un fallo en la ejecución de SQL, el bucle de reflexión genera hasta 3 sentencias SQL candidatas en un solo prompt y las ejecuta en paralelo en la base de datos. Se elige la primera que corra con éxito, resolviendo errores de reflexión en un único roundtrip de LLM. * **Sugerencias de Levenshtein**: La librería calcula automáticamente las distancias de Levenshtein en nombres de tablas o columnas con errores ortográficos e inyecta recomendaciones dinámicas (ej. *"(Hint: ¿Quisiste decir 'created_at'?)"*) en el prompt de error, permitiendo al modelo autocorregirse al primer intento. --- ## <img src="https://api.iconify.design/mdi:tune.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Opciones de Configuración ```typescript const translator = new CyberMySQLOpenAI({ // Conexión a la base de datos database: { host: "localhost", port: 3306, user: "username", password: "password", database: "my_database", ssl: false, socketPath: "/path/to/mysql.sock", // Opcional }, // Configuración de OpenAI openai: { apiKey: "tu_clave_api", model: "gpt-4o", // Modelo principal para generación SQL lightModel: "gpt-4o-mini", // Opcional: modelo ligero para reflexión y formato (v0.3.2) }, // Configuración del cache (opcional) cache: { enabled: true, // Habilitar/deshabilitar cache maxSize: 1000, // Máximo de entradas en cache defaultTTL: 300000, // TTL por defecto en milisegundos (5 min) cleanupInterval: 300000, // Intervalo de limpieza en milisegundos }, // Configuración general maxReflections: 3, // Máximo de intentos de corrección ante errores SQL logLevel: "info", // 'error' | 'warn' | 'info' | 'debug' | 'none' logDirectory: "./logs", // Directorio para archivos de log logEnabled: true, // Establecer en false para desactivar logs language: "es", // 'es' (Español) o 'en' (Inglés) }); ``` --- ## <img src="https://api.iconify.design/mdi:database.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Sistema de Cache Cyber-MySQL-OpenAI incluye un sistema de cache en memoria opcional que mejora significativamente los tiempos de respuesta para consultas repetidas o similares. ### Funcionamiento - **Normalización de consultas** Las consultas se normalizan antes de buscar en cache para maximizar aciertos - **TTL variable** El tiempo de vida se determina dinámicamente según el tipo de consulta: - Consultas de esquema/metadatos: 1 hora - Consultas agregadas (COUNT, SUM, AVG, GROUP BY): 15 minutos - Consultas simples: 5 minutos - **Limpieza automática** Las entradas expiradas se eliminan periódicamente - **Métricas de rendimiento** Estadísticas en tiempo real incluyendo tasa de aciertos y uso de memoria ### Uso Básico del Cache ```typescript const translator = new CyberMySQLOpenAI({ // ... configuración de BD y OpenAI cache: { enabled: true, maxSize: 1000, defaultTTL: 300000, cleanupInterval: 300000, }, }); const result1 = await translator.query("Muéstrame todos los usuarios"); // Consulta a la BD const result2 = await translator.query("Muéstrame todos los usuarios"); // Resultado desde cache console.log("Desde cache:", result2.fromCache); // true console.log("Tiempo de ejecución:", result2.executionTime); // Significativamente más rápido ``` ### Gestión del Cache ```typescript // Obtener estadísticas de rendimiento const stats = translator.getCacheStats(); console.log("Tasa de aciertos:", stats.hitRate); console.log("Entradas:", stats.totalEntries); // Limpiar todas las entradas translator.clearCache(); // Activar/desactivar cache en tiempo de ejecución translator.disableCache(); translator.enableCache(); console.log("Cache activo:", translator.isCacheEnabled()); ``` ### Mejores Prácticas para Integración en APIs Usa una instancia global compartida para maximizar la efectividad del cache entre peticiones: ```typescript // api-instance.ts import { CyberMySQLOpenAI } from "cyber-mysql-openai"; export const translator = new CyberMySQLOpenAI({ // ... configuración cache: { enabled: true, maxSize: 2000 }, }); // api-routes.ts import { translator } from "./api-instance"; app.get("/query", async (req, res) => { const result = await translator.query(req.body.question); res.json({ ...result, cached: result.fromCache, responseTime: result.executionTime, }); }); ``` > **Nota:** El cache se comparte entre todas las peticiones y usuarios. Asegúrate de que este comportamiento sea apropiado para tu caso de uso. Para datos específicos por usuario, implementa estrategias de invalidación de cache. Para más ejemplos, consulta [docs/cache-examples.md](docs/cache-examples.md). --- ## <img src="https://api.iconify.design/mdi:translate.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Soporte Multiidioma La librería soporta español e inglés para todas las respuestas, mensajes de error y prompts de OpenAI. El idioma se puede configurar al inicializar o cambiar dinámicamente en tiempo de ejecución. ### Configuración ```typescript // Establecer durante la inicialización const translator = new CyberMySQLOpenAI({ // ... otra configuración language: "es", // 'es' para Español, 'en' para Inglés }); // Cambiar en tiempo de ejecución translator.setLanguage("en"); console.log("Idioma actual:", translator.getLanguage()); ``` ### Qué se Localiza - Mensajes de error - Prompts enviados a OpenAI - Explicaciones en lenguaje natural - Etiquetas de interfaz y texto de estado ### Ejemplo: Cambio Dinámico ```typescript translator.setLanguage("es"); const resultadoEspanol = await translator.query( "¿Cuáles son los 5 productos principales?", ); console.log(resultadoEspanol.naturalResponse); // Respuesta en español translator.setLanguage("en"); const englishResult = await translator.query("What are the top 5 products?"); console.log(englishResult.naturalResponse); // Respuesta en inglés ``` --- ## <img src="https://api.iconify.design/mdi:book-open.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Referencia de API ### CyberMySQLOpenAI | Método | Descripción | | --------------------------- | ---------------------------------------------------------------------------------- | | `constructor(config)` | Crea una nueva instancia con la configuración proporcionada | | `query(prompt, options?)` | Traduce una pregunta en lenguaje natural a SQL, la ejecuta y devuelve el resultado | | `executeSQL(sql, options?)` | Ejecuta una consulta SQL directamente (sin traducción) | | `close()` | Cierra todas las conexiones a la base de datos | | `setLanguage(lang)` | Establece el idioma de respuesta (`'es'` o `'en'`) | | `getLanguage()` | Devuelve el idioma configurado actualmente | ### Métodos del Cache | Método | Descripción | | ----------------------------------- | -------------------------------------------------------------------------------------- | | `getCacheStats()` | Devuelve estadísticas del cache (tasa de aciertos, uso de memoria, conteo de entradas) | | `clearCache()` | Elimina todas las entradas del cache | | `enableCache()` | Habilita el sistema de cache | | `disableCache()` | Deshabilita el sistema de cache | | `isCacheEnabled()` | Indica si el cache está activo actualmente | | `invalidateCacheByTable(tableName)` | Elimina entradas del cache relacionadas con una tabla específica | ### Opciones de Consulta ```typescript const result = await translator.query("¿Cuál fue el mes con más ventas?", { detailed: true, // Solicitar una respuesta analítica detallada bypassCache: true, // Omitir cache y forzar una consulta nueva }); console.log("Respuesta simple:", result.naturalResponse); console.log("Respuesta detallada:", result.detailedResponse); ``` ### Tipos de Respuesta **TranslationResult** (devuelto por `query`): | Campo | Tipo | Descripción | | ------------------ | -------------- | --------------------------------------------------------- | | `sql` | `string` | La consulta SQL generada | | `results` | `any[]` | Resultados de la consulta desde la base de datos | | `reflections` | `Reflection[]` | Historial de correcciones de error (si hubo) | | `attempts` | `number` | Total de intentos de ejecución | | `success` | `boolean` | Si la consulta fue exitosa | | `confidence` | `number?` | Score de confianza (0–1), disponible con function calling | | `naturalResponse` | `string` | Explicación comprensible | | `detailedResponse` | `string` | Análisis detallado (cuando `detailed: true`) | | `executionTime` | `number` | Tiempo total de ejecución en milisegundos | | `fromCache` | `boolean` | Si el resultado se sirvió desde el cache | --- ## <img src="https://api.iconify.design/mdi:comment-question.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Solución de Problemas ### Reinicios de Nodemon Si Nodemon se reinicia constantemente por la generación de archivos de log, agrega esto a tu `package.json` o `nodemon.json`: ```json { "nodemonConfig": { "ignore": ["*.log", "tmp/*", "logs/*"] } } ``` ### Problemas con Respuestas Detalladas 1. Actualiza a la última versión: `npm update cyber-mysql-openai` 2. Verifica que tu clave API de OpenAI tenga créditos suficientes 3. Reduce la verbosidad del log con `logLevel: 'warn'` o `logLevel: 'error'` ### Configuración de Logs ```typescript // Desactivar todos los logs const translator = new CyberMySQLOpenAI({ logEnabled: false, }); // Registrar solo errores const translator = new CyberMySQLOpenAI({ logLevel: "error", }); ``` --- ## <img src="https://api.iconify.design/mdi:information.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Estado del Proyecto Este proyecto está en **versión estable** y en desarrollo activo. Las contribuciones y comentarios son bienvenidos. ### Limitaciones Actuales - Las consultas muy complejas pueden requerir múltiples iteraciones de corrección - Algunas construcciones SQL avanzadas pueden no ser interpretadas correctamente - El rendimiento depende de la complejidad del esquema de la base de datos y la latencia del modelo de OpenAI ### Hoja de Ruta - ~~Contexto de negocio y metadata de esquema~~ (incluido en v0.2.0) - ~~Detección de relaciones Foreign Key~~ (incluido en v0.2.0) - ~~Function calling con salida estructurada~~ (incluido en v0.2.0) - ~~Soporte de ejemplos few-shot~~ (incluido en v0.2.0) - ~~Instrucciones personalizadas y estilos de respuesta~~ (incluido en v0.3.0) - ~~Capa de validación de queries~~ (incluido en v0.3.0) - ~~Cache de esquema con TTL configurable~~ (incluido en v0.3.0) - ~~Seguimiento de uso de tokens y estimación de costos~~ (incluido en v0.3.0) - ~~Historial de consultas y estadísticas~~ (incluido en v0.3.0) - ~~Corrección de inyección de contexto en reflexión~~ (incluido en v0.3.1) - ~~Schema comprimido (66% menos tokens)~~ (incluido en v0.3.2) - ~~`lightModel` para subtareas (reflexiones 85% más baratas)~~ (incluido en v0.3.2) - ~~Schema filtrado en reflexiones~~ (incluido en v0.3.2) - Soporte para dialectos SQL adicionales - Respuestas en streaming - Ampliación de documentación y ejemplos de uso --- ## <img src="https://api.iconify.design/mdi:certificate.svg" width="28" height="28" style="vertical-align: middle; margin-right: 8px;" /> Licencia MIT ``` ```