Un assistente SQL per il Suo database
Fornisca lo schema al modello, gli permetta di scrivere SQL, lo esegua su un database isolato e ne spieghi i risultati.
Un assistente SQL per il Suo database è una lezione AI Agents gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Agents, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Agents include 4 lezioni in totale.
Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.
Obiettivo del progetto
Costruisca un agente che trasformi le domande in linguaggio naturale in SQL, lo esegua su un DB isolato e spieghi i risultati.
Il classico agente per "parlare con il mio database".
Architettura
- Utente: "Quanti utenti attivi ci sono questo mese?"
- L'agente chiama list_tables e describe_table per apprendere lo schema
- L'agente chiama run_sql con la query generata
- L'agente spiega il risultato in linguaggio naturale
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()Passaggio 2: uno strumento run_sql SICURO
Deve limitare ciò che l'agente può fare: accesso in sola lettura, timeout della query e limite di righe:
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())
Passare lo schema nel prompt di sistema
Per migliorare la latenza, recuperi lo schema una volta all'avvio e lo inserisca nel prompt di sistema: in questo modo risparmia i round-trip degli strumenti:
schema = ''
for t in list_tables():
cols = describe_table(t)
schema += f'{t}: {cols}\n'
system = system + f'\nSchema:\n{schema}'Utente del database in sola lettura
Anche con i controlli nel codice, crei un utente DB in sola lettura con autorizzazioni esclusivamente sullo schema analitico. Applichi una difesa a più livelli.
Mascheramento dei dati personali
Alcune colonne (email, telefono) non devono mai essere divulgate. Le mascheri nei risultati prima di restituirli:
PII_COLS = {'email', 'phone'}
for row in rows:
for i, col in enumerate(cols):
if col in PII_COLS:
row[i] = '[REDACTED]'Stima del costo della query
Utilizzi EXPLAIN per stimare il costo della query; rifiuti le query con un costo superiore alla soglia (evita scansioni accidentali dell'intera tabella su tabelle enormi).
Esempio di conversazione
Utente: "I 5 clienti principali per spesa dello scorso mese"
Agente:
- list_tables -> [users, orders, ...]
- describe_table(orders) -> [id, user_id, total, created_at]
- run_sql("SELECT user_id, SUM(total) ...")
- Restituisce: "Alice ($1240), Bob ($910), ..."
Grafici nell'output
Per un'esperienza utente più ricca, aggiunga uno strumento render_chart che riceva colonne e righe e restituisca l'URL di un'immagine del grafico. L'agente può chiamarlo dopo una query.
Gestire gli errori con eleganza
Gli errori SQL sono comuni. Restituisca il messaggio di errore di Postgres alla lettera: il modello è eccellente nel correggere il proprio SQL non valido quando gli viene mostrato l'errore.
Controllare ogni query
Registri l'utente, la domanda in linguaggio naturale, l'SQL generato e il numero di risultati. Gli audit sono imprescindibili per gli agenti che accedono ai DB.
Perché limitarsi a SELECT?
Perché imporre nel codice all'agente di eseguire solo istruzioni SELECT?
Riepilogo
Gli agenti SQL sono subito utili. Li costruisca con attenzione: utente in sola lettura, timeout delle istruzioni, limite di righe, whitelist del tipo di query e log di audit.
Domande Frequenti
La lezione «Un assistente SQL per il Suo database» è gratuita?
Sì — il testo completo di «Un assistente SQL per il Suo database» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Agents, passa a CoddyKit PRO. Il corso AI Agents include 4 lezioni in totale.
Cosa imparerò in «Un assistente SQL per il Suo database»?
Fornisca lo schema al modello, gli permetta di scrivere SQL, lo esegua su un database isolato e ne spieghi i risultati. Eserciti AI Agents con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare AI Agents?
Non è richiesta alcuna esperienza precedente. AI Agents su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Un assistente SQL per il Suo database»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione AI Agents?
Sì. Ogni lezione AI Agents include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Un bot di domande e risposte sui Suoi documenti
- Un agente che spiega il codice
- Un agente di ricerca che naviga sul Web
- Un assistente SQL per il Suo database