0Pricing
AI Agents · Leçon

Un assistant SQL pour votre DB

Fournissez un schéma au modèle, laissez-le écrire du SQL, exécutez-le sur une DB isolée et expliquez les résultats.

Un assistant SQL pour votre DB est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

Objectif du projet

Créez un agent qui transforme des questions en langage naturel en requêtes SQL, les exécute sur une base de données isolée et explique les résultats.

L’agent classique pour « parler à ma base de données ».

Architecture

  1. Utilisateur : « Combien d’utilisateurs actifs ce mois-ci ? »
  2. L’agent appelle list_tables et describe_table pour découvrir le schéma
  3. L’agent appelle run_sql avec la requête générée
  4. L’agent explique le résultat en langage naturel

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()

Étape 2 : Un outil run_sql SAFE

Vous devez limiter ce que l’agent peut faire — accès en lecture seule, délai d’expiration de la requête et limite de lignes :

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())

Transmettre le schéma dans le prompt système

Pour réduire la latence, récupérez le schéma une seule fois au démarrage et placez-le dans le prompt système — cela évite des allers-retours avec les outils :

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

Utilisateur de base de données en lecture seule

Même avec des vérifications du code, créez également un utilisateur de base de données en lecture seule, disposant uniquement des droits sur le schéma analytique. Il s’agit d’une défense en profondeur.

Masquage des PII

Certaines colonnes (e-mail, téléphone) ne doivent jamais fuiter. Masquez-les dans les résultats avant de les renvoyer :

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

Estimation du coût des requêtes

Utilisez EXPLAIN pour estimer le coût d’une requête ; rejetez les requêtes dont le coût dépasse le seuil (cela évite les analyses accidentelles de tables entières volumineuses).

Exemple de conversation

Utilisateur : « 5 meilleurs clients selon leurs dépenses du mois dernier »

Agent :

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

Graphiques de sortie

Pour une expérience utilisateur plus riche, ajoutez un outil render_chart qui reçoit des colonnes et des lignes et renvoie l’URL d’une image de graphique. L’agent peut l’appeler après une requête.

Gérer les erreurs avec élégance

Les erreurs SQL sont courantes. Renvoyez mot pour mot le message d’erreur de Postgres — le modèle sait très bien corriger son propre SQL défectueux lorsqu’on lui montre l’erreur.

Auditer chaque requête

Journalisez l’utilisateur, la question en langage naturel, le SQL généré et le nombre de résultats. Les audits sont indispensables pour les agents qui accèdent aux bases de données.

Pourquoi limiter l’accès à SELECT ?

Pourquoi coder en dur l’agent pour qu’il n’exécute que des instructions SELECT ?

Récapitulatif

Les agents SQL sont immédiatement utiles. Construisez-les avec prudence : utilisateur en lecture seule, délai d’expiration des instructions, limite de lignes, liste blanche des types de requêtes et journal d’audit.

Questions Fréquemment Posées

La leçon « Un assistant SQL pour votre DB » est-elle gratuite ?

Oui — le texte complet de « Un assistant SQL pour votre DB » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Un assistant SQL pour votre DB » ?

Fournissez un schéma au modèle, laissez-le écrire du SQL, exécutez-le sur une DB isolée et expliquez les résultats. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer AI Agents ?

Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Un assistant SQL pour votre DB » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?

Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Un robot de questions-réponses sur vos documents
  2. Un agent explicateur de code
  3. Un agent de recherche sur le Web
  4. Un assistant SQL pour votre DB
← Retour à AI Agents