En este módulo, aprenderemos cómo mejorar la calidad de las consultas SQL generadas por la IA. Nos enfocaremos en estrategias como el ajuste fino de modelos, el uso de contexto adicional y la validación de las consultas antes de su ejecución.
Para que la IA genere consultas SQL más precisas, es fundamental que conozca la estructura de la base de datos.
Tablas:
- usuarios (id INT PRIMARY KEY, nombre TEXT, email TEXT)
- pedidos (id INT PRIMARY KEY, usuario_id INT, total DECIMAL, fecha DATE,
FOREIGN KEY (usuario_id) REFERENCES usuarios(id))
contexto = f"Esquema de la base de datos: {esquema_bd}. Responde solo con consultas SQL válidas."
Para mejorar la generación de consultas, es clave diseñar prompts efectivos:
Genera una consulta SQL para obtener los pedidos de un usuario por su email.
Genera una consulta SQL en PostgreSQL usando el siguiente esquema:
- Tabla usuarios (id INT PRIMARY KEY, nombre TEXT, email TEXT)
- Tabla pedidos (id INT PRIMARY KEY, usuario_id INT, total DECIMAL, fecha DATE,
FOREIGN KEY (usuario_id) REFERENCES usuarios(id))
La consulta debe obtener todos los pedidos de un usuario dado su email.
Responde solo con SQL válido.
Antes de ejecutar una consulta generada por la IA, es recomendable validarla.
import sqlparse
consulta_sql = "SELECT * FROM pedidos WHERE usuario_id = (SELECT id FROM usuarios WHERE email = 'ejemplo@correo.com');"
print(sqlparse.format(consulta_sql, reindent=True, keyword_case="upper"))
Usar un entorno de pruebas en SQL Server o PostgreSQL. Ejecutar la consulta en modo lectura (SELECT) antes de aplicar cambios (INSERT, UPDATE, DELETE).
Ejemplo de integración con LangChain y Llama2 en Ollama para generar consultas SQL optimizadas:
from langchain.chat_models import ChatOllama
from langchain.schema import SystemMessage, HumanMessage
modelo = ChatOllama(model="llama2")
prompt = """Eres un experto en SQL. Dado el siguiente esquema de base de datos:
Tablas:
- usuarios (id INT PRIMARY KEY, nombre TEXT, email TEXT)
- pedidos (id INT PRIMARY KEY, usuario_id INT, total DECIMAL, fecha DATE,
FOREIGN KEY (usuario_id) REFERENCES usuarios(id))
Genera una consulta SQL para obtener todos los pedidos de un usuario dado su email.
Responde solo con código SQL válido.
"""
respuesta = modelo([
SystemMessage(content="Eres un asistente especializado en SQL."),
HumanMessage(content=prompt)
])
print(respuesta.content)
EXPLAIN en PostgreSQL o SHOW EXECUTION PLAN en SQL Server para analizar la eficiencia de la consulta. EXPLAIN ANALYZE SELECT * FROM pedidos
WHERE usuario_id = (SELECT id FROM usuarios WHERE email = 'ejemplo@correo.com');
Indice del curso