0Pricing
AI Agents · Aula

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

  1. Usuário: "Quantos usuários ativos temos neste mês?"
  2. O agente chama list_tables e describe_table para aprender o esquema
  3. O agente chama run_sql com a consulta gerada
  4. 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:

  1. list_tables → [users, orders, ...]
  2. describe_table(orders) → [id, user_id, total, created_at]
  3. run_sql("SELECT user_id, SUM(total) ...")
  4. 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

  1. Um robô de perguntas e respostas sobre seus documentos
  2. Um agente que explica código
  3. Um agente de pesquisa que navega na Web
  4. Um assistente SQL para seu DB
← Voltar para AI Agents