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
- Utilisateur : « Combien d’utilisateurs actifs ce mois-ci ? »
- L’agent appelle list_tables et describe_table pour découvrir le schéma
- L’agent appelle run_sql avec la requête générée
- 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 :
- list_tables → [users, orders, ...]
- describe_table(orders) → [id, user_id, total, created_at]
- run_sql("SELECT user_id, SUM(total) ...")
- 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
- Un robot de questions-réponses sur vos documents
- Un agent explicateur de code
- Un agent de recherche sur le Web
- Un assistant SQL pour votre DB