Un sistema de consulta en lenguaje natural para bases de datos SQLite que utiliza modelos de lenguaje grande (LLM) para convertir preguntas en consultas SQL.
Este proyecto implementa un asistente de consulta que permite realizar preguntas en lenguaje natural sobre una base de datos SQLite (Chinook). El sistema utiliza modelos de lenguaje (LLM) y técnicas de recuperación para convertir automáticamente las preguntas del usuario en consultas SQL válidas y ejecutarlas para obtener resultados.
- Conversión de preguntas en lenguaje natural a consultas SQL
- Uso de técnicas de few-shot learning con ejemplos de consultas
- Sistema de recuperación de nombres propios para mejorar la precisión
- Compatible con la base de datos Chinook (música, artistas, álbumes, etc.)
- Implementado con LangChain y LangGraph para un flujo estructurado de razonamiento
Este proyecto está diseñado para ejecutarse principalmente en Google Colab.
- langchain-huggingface
- langchain-core
- faiss-cpu
- python-dotenv
- langchain-community
- langgraph
- langchain-groq
- Sube la base de datos SQLite
Chinook_v2.dba tu Google Drive en una carpeta llamadatp2_tpfinal/. - Crea un archivo
.enven la raíz de tu Google Drive con la siguiente variable:GROP_API_KEY=tu_api_key_de_groq - Abre el notebook en Google Colab.
El notebook automáticamente montará tu Google Drive para acceder a la base de datos y al archivo de variables de entorno.
El notebook incluye los comandos necesarios para instalar todas las dependencias requeridas.
- Ejecuta todas las celdas del notebook secuencialmente para configurar el entorno.
- Una vez configurado, puedes utilizar las funciones
pretty_answer()oprint_answer()para realizar consultas.
print_answer("Which country's customers spent the most?")
print_answer("List all albums by AC/DC")
print_answer("What is the average duration of tracks in the Rock genre?")pretty_answer(question): Devuelve la respuesta generada por el agente para una pregunta dada.print_answer(question): Imprime la pregunta y la respuesta con un formato claro y visual.answer(question): Función de depuración interna que muestra todos los pasos de razonamiento del agente.
- Inicialización de la base de datos: Conexión a la base de datos SQLite Chinook.
- Configuración del modelo LLM: Utiliza Llama a través de Groq como proveedor del LLM.
- Few-shot learning: Configuración de ejemplos de pares (pregunta, consulta SQL) para guiar al modelo.
- Sistema de recuperación: Índices vectoriales FAISS para nombres propios y ejemplos.
- Flujo de ejecución: Utiliza un agente ReAct para seguir un proceso estructurado de razonamiento.
El agente sigue este orden para procesar cada pregunta:
- Lista las tablas disponibles en la base de datos
- Obtiene el esquema de las tablas relevantes
- Recupera ejemplos similares de consultas SQL
- Busca nombres propios si es necesario
- Formula y ejecuta la consulta SQL final
El proyecto utiliza la base de datos Chinook, que contiene información sobre una tienda de música, incluyendo:
- Artistas
- Álbumes
- Canciones
- Clientes
- Facturas
- Empleados
- Géneros musicales
- El proyecto utiliza el modelo Meta Llama-4-scout-17b-16e-instruct a través de la API de Groq, que requiere una clave de API válida.
- Inicialmente se consideró usar Llama3-8b-8192, pero fue descartado por limitaciones de tokens disponibles por minuto en su versión gratuita.
- El sistema está diseñado para consultas de solo lectura y no permite operaciones DML (INSERT/UPDATE/DELETE).
- Para mejores resultados, formule preguntas claras y específicas sobre la información contenida en la base de datos.