Um assistente SQL para seu DB
Forneça um esquema ao modelo, permita que ele escreva SQL, execute-o em um DB isolado e explique os resultados.
Um assistente SQL para seu DB é uma aula grátis de AI Agents no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de AI Agents, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AI Agents inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
Objetivo do projeto
Crie um agente que transforme perguntas em linguagem natural em SQL, execute-as em um banco de dados isolado e explique os resultados.
O agente essencial para “conversar com meu banco de dados”.
Arquitetura
- Usuário: "Quantos usuários ativos temos neste mês?"
- O agente chama list_tables e describe_table para aprender o esquema
- O agente chama run_sql com a consulta gerada
- O agente explica o resultado em linguagem 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()Etapa 2: Uma ferramenta run_sql SAFE
Você deve restringir o que o agente pode fazer — somente leitura, tempo limite da consulta e limite de linhas:
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())
Passar o esquema na instrução do sistema
Para obter uma latência melhor, recupere o esquema uma vez na inicialização e coloque-o na instrução do sistema — isso economiza idas e voltas de ferramentas:
schema = ''
for t in list_tables():
cols = describe_table(t)
schema += f'{t}: {cols}\n'
system = system + f'\nSchema:\n{schema}'Usuário do banco de dados somente leitura
Mesmo com verificações no código, crie também um usuário do banco de dados somente leitura, com permissões apenas no esquema analítico. Defesa em profundidade.
Mascaramento de PII
Algumas colunas (e-mail, telefone) nunca devem vazar. Masque-as nos resultados antes de retorná-los:
PII_COLS = {'email', 'phone'}
for row in rows:
for i, col in enumerate(cols):
if col in PII_COLS:
row[i] = '[REDACTED]'Estimativa do custo da consulta
Use EXPLAIN para estimar o custo da consulta; rejeite consultas com custo maior que o limite (isso evita varreduras acidentais da tabela inteira em tabelas enormes).
Exemplo de conversa
Usuário: "Cinco principais clientes por gasto no mês passado"
Agente:
- list_tables → [users, orders, ...]
- describe_table(orders) → [id, user_id, total, created_at]
- run_sql("SELECT user_id, SUM(total) ...")
- Retorna: "Alice ($1240), Bob ($910), ..."
Gráficos de saída
Para uma experiência mais rica, adicione uma ferramenta render_chart que receba colunas e linhas e retorne o URL de uma imagem do gráfico. O agente poderá chamá-la depois de uma consulta.
Falhar de maneira controlada
Erros de SQL são comuns. Retorne a mensagem de erro do Postgres literalmente — o modelo é excelente em corrigir seu próprio SQL incorreto quando o erro é mostrado.
Auditar cada consulta
Registre o usuário, a pergunta em linguagem natural, o SQL gerado e a quantidade de resultados. Auditorias são obrigatórias para agentes que acessam bancos de dados.
Por que restringir a SELECT?
Por que limitar explicitamente o agente a executar apenas instruções SELECT?
Recapitulação
Agentes de SQL são imediatamente valiosos. Crie-os com cuidado — usuário somente leitura, tempo limite da instrução, limite de linhas, lista permitida de tipos de consulta e registro de auditoria.
Perguntas Frequentes
A aula “Um assistente SQL para seu DB” é grátis?
Sim — o texto completo de “Um assistente SQL para seu DB” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de AI Agents, atualize para CoddyKit PRO. O curso de AI Agents inclui 4 aulas no total.
O que vou aprender em “Um assistente SQL para seu DB”?
Forneça um esquema ao modelo, permita que ele escreva SQL, execute-o em um DB isolado e explique os resultados. Você pratica AI Agents com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar AI Agents?
Nenhuma experiência prévia é necessária. AI Agents no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Um assistente SQL para seu DB”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de AI Agents?
Sim. Cada aula de AI Agents inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Um robô de perguntas e respostas sobre seus documentos
- Um agente que explica código
- Um agente de pesquisa que navega na Web
- Um assistente SQL para seu DB