0Pricing
AI Agents · Lección

Un asistente SQL para su base de datos

Proporcione al modelo un esquema, permita que escriba SQL, ejecútelo en una base de datos aislada y explíquele los resultados.

Un asistente SQL para su base de datos es una lección gratuita de AI Agents en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Agents, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Agents incluye 4 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en inglés.

Objetivo del proyecto

Construya un agente que convierta preguntas en lenguaje natural en SQL, las ejecute contra una base de datos aislada y explique los resultados.

El agente básico para «hablar con mi base de datos».

Arquitectura

  1. Usuario: «¿Cuántos usuarios activos hay este mes?»
  2. El agente llama a list_tables y describe_table para conocer el esquema
  3. El agente llama a run_sql con la consulta generada
  4. El agente explica el resultado en lenguaje natural

Step 1: Schema Tools

import psycopg

conn = psycopg.connect(DATABASE_URL)

def list_tables():
    with conn.cursor() as cur:
        cur.execute("SELECT table_name FROM information_schema.tables WHERE table_schema='public'")
        return [r[0] for r in cur.fetchall()]

def describe_table(name):
    with conn.cursor() as cur:
        cur.execute('''
            SELECT column_name, data_type FROM information_schema.columns
            WHERE table_name = %s
        ''', (name,))
        return cur.fetchall()

Paso 2: herramienta run_sql SEGURA

Debe restringir lo que el agente puede hacer: solo lectura, tiempo de espera de la consulta y límite de filas:

import re

def run_sql(query: str, limit: int = 100):
    q = query.strip().rstrip(';').lower()
    if not q.startswith('select'):
        return {'error': 'Only SELECT statements are allowed.'}
    if any(bad in q for bad in [' drop ', ' delete ', ' update ', ' insert ', ' alter ', ' truncate ']):
        return {'error': 'Statement contains a disallowed keyword.'}
    with conn.cursor() as cur:
        cur.execute(f'SET statement_timeout = 5000')   # 5 seconds
        cur.execute(f'SELECT * FROM ({query}) sub LIMIT {limit}')
        cols = [c.name for c in cur.description]
        rows = cur.fetchall()
        return {'columns': cols, 'rows': rows}

Tool Definitions

tools = [
    {'type': 'function', 'function': {'name': 'list_tables', 'description': 'List tables in the database', 'parameters': {'type': 'object', 'properties': {}}}},
    {'type': 'function', 'function': {'name': 'describe_table', 'description': 'Get columns of a table', 'parameters': {'type': 'object', 'properties': {'name': {'type': 'string'}}, 'required': ['name']}}},
    {'type': 'function', 'function': {'name': 'run_sql', 'description': 'Execute a SELECT query (read-only, max 100 rows, 5s timeout)', 'parameters': {'type': 'object', 'properties': {'query': {'type': 'string'}}, 'required': ['query']}}}
]
import json
print(json.dumps(tools, indent=2))

System Prompt

system = '''
You are a SQL analyst assistant for a Postgres database.
First use list_tables and describe_table to learn the schema.
Then write a single SELECT query to answer the user.
Never modify data.
After receiving results, explain them in plain language.
'''
print(system.strip())

Pase el esquema en el prompt del sistema

Para mejorar la latencia, obtenga el esquema una vez al iniciar y colóquelo en el prompt del sistema; así ahorrará viajes de ida y vuelta a las herramientas:

schema = ''
for t in list_tables():
    cols = describe_table(t)
    schema += f'{t}: {cols}\n'
system = system + f'\nSchema:\n{schema}'

Usuario de base de datos de solo lectura

Incluso con comprobaciones en el código, cree también un usuario de base de datos de solo lectura con permisos únicamente sobre el esquema analítico. Aplique defensa en profundidad.

Enmascaramiento de PII

Algunas columnas (correo electrónico, teléfono) nunca deben filtrarse. Enmascárelas en los resultados antes de devolverlos:

PII_COLS = {'email', 'phone'}
for row in rows:
    for i, col in enumerate(cols):
        if col in PII_COLS:
            row[i] = '[REDACTED]'

Estimación del coste de la consulta

Use EXPLAIN para estimar el coste de la consulta; rechace las consultas cuyo coste supere el umbral (esto evita escaneos accidentales de tablas completas en tablas enormes).

Conversación de ejemplo

Usuario: «Los 5 clientes que más gastaron el mes pasado»

Agente:

  1. list_tables → [users, orders, ...]
  2. describe_table(orders) → [id, user_id, total, created_at]
  3. run_sql("SELECT user_id, SUM(total) ...")
  4. Devuelve: «Alice ($1240), Bob ($910), ...»

Gráficos de salida

Para ofrecer una experiencia más completa, añada una herramienta render_chart que reciba columnas y filas y devuelva la URL de una imagen del gráfico. El agente puede llamarla después de una consulta.

Falle de forma controlada

Los errores de SQL son habituales. Devuelva literalmente el mensaje de error de Postgres; el modelo es excelente corrigiendo su propio SQL defectuoso cuando se le muestra el error.

Audite cada consulta

Registre el usuario, la pregunta en lenguaje natural, el SQL generado y el número de resultados. Las auditorías son imprescindibles para los agentes con acceso a bases de datos.

¿Por qué restringirlo a SELECT?

¿Por qué limitar explícitamente al agente a ejecutar únicamente instrucciones SELECT?

Resumen

Los agentes SQL son inmediatamente útiles. Créelos con cuidado: usuario de solo lectura, tiempo de espera de la instrucción, límite de filas, lista blanca de tipos de consulta y registro de auditoría.

Preguntas frecuentes

¿La lección «Un asistente SQL para su base de datos» es gratis?

Sí — el texto completo de «Un asistente SQL para su base de datos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Agents, actualiza a CoddyKit PRO. El curso de AI Agents incluye 4 lecciones en total.

¿Qué aprenderé en «Un asistente SQL para su base de datos»?

Proporcione al modelo un esquema, permita que escriba SQL, ejecútelo en una base de datos aislada y explíquele los resultados. Practicas AI Agents con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AI Agents?

No se requiere experiencia previa. AI Agents en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Un asistente SQL para su base de datos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AI Agents?

Sí. Cada lección de AI Agents incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Un bot de preguntas y respuestas sobre sus documentos
  2. Un agente que explica código
  3. Un agente de investigación que navega por la web
  4. Un asistente SQL para su base de datos
← Volver a AI Agents