Transforme perguntas em SQL automaticamente.
O Chat with SQL permite fazer perguntas em portuguΓͺs sobre bancos de dados e receber respostas precisas, sem escrever SQL manualmente.
UsuΓ‘rio: "Quais foram as vendas do mΓͺs passado?"
Sem Chat with SQL:
- Precisa saber SQL
- Precisa conhecer o schema
- Precisa escrever a query correta
Com Chat with SQL:
- Pergunta em portuguΓͺs β Resposta em portuguΓͺs
- Schema Awareness - Entende estrutura do banco
- Text-to-SQL - Converte pergunta em SQL
- Query Execution - Executa com seguranΓ§a
- Answer Generation - Responde em linguagem natural
git clone <repo>
cd 11-chat-sqlpython -m venv .venv
source .venv/bin/activate # Linux/Macpip install -r requirements.txtcp .env.example .env
# Edite o .env com suas chavespython init_db.pystreamlit run app.py11-chat-sql/
βββ README.md # Este arquivo
βββ ROTEIRO.md # Roteiro para gravaΓ§Γ£o
βββ APOIO.md # Material explicativo
βββ app.py # Interface Streamlit
βββ init_db.py # Inicializa banco de exemplo
βββ requirements.txt
βββ .env.example
βββ .gitignore
βββ Makefile
βββ verify_setup.py
β
βββ slides/
β βββ slides.md # Slides Marp
β
βββ notebooks/
β βββ 01_fundamentos_sql.py
β βββ 02_implementacao_sql.py
β βββ 03_producao_sql.py
β
βββ src/
β βββ __init__.py
β βββ config.py # ConfiguraΓ§Γ΅es
β βββ models.py # Schemas Pydantic
β βββ database.py # ConexΓ£o e execuΓ§Γ£o
β βββ schema_inspector.py # Extrai schema do banco
β βββ text_to_sql.py # Converte texto para SQL
β βββ sql_validator.py # Valida queries (seguranΓ§a)
β βββ answer_generator.py # Gera resposta natural
β βββ graph.py # OrquestraΓ§Γ£o LangGraph
β
βββ tests/
β βββ test_chat_sql.py
β
βββ data/
βββ sample.db # SQLite de exemplo
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CHAT WITH SQL β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β "Quais as vendas do mΓͺs?" β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β SCHEMA INSPECTOR β β
β β Extrai tabelas, colunas, tipos β β
β βββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β TEXT-TO-SQL β β
β β LLM gera query SQL β β
β βββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β SQL VALIDATOR β β
β β Valida seguranΓ§a (sem DROP, DELETE...) β β
β βββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β QUERY EXECUTOR β β
β β Executa no banco β β
β βββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ANSWER GENERATOR β β
β β Responde em linguagem natural β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β "As vendas do mΓͺs foram R$ 125.430,00" β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Requisito | VersΓ£o |
|---|---|
| Python | 3.11+ |
| OpenAI API Key | GPT-4o-mini ou superior |
| SQLite | IncluΓdo no Python |
- SQLite (padrΓ£o, incluΓdo)
- PostgreSQL (com psycopg2)
- MySQL (com mysql-connector)
# Instalar dependΓͺncias
make install
# Inicializar banco de exemplo
make init-db
# Verificar setup
make setup
# Executar Streamlit
make app
# Rodar testes
make testO projeto inclui um banco SQLite com dados fictΓcios:
| Tabela | DescriΓ§Γ£o |
|---|---|
clientes |
Cadastro de clientes |
produtos |
CatΓ‘logo de produtos |
vendas |
Registro de vendas |
vendas_itens |
Itens de cada venda |
- 50 clientes
- 20 produtos
- 200 vendas
- 500 itens de venda
β
"Quantos clientes temos cadastrados?"
β
"Qual o produto mais vendido?"
β
"Quais foram as vendas de janeiro?"
β
"Qual cliente comprou mais?"
β
"Qual o ticket mΓ©dio de vendas?"
β
"Liste os produtos com estoque baixo"
β
"Qual a receita total por mΓͺs?"
O SQL Validator bloqueia queries perigosas:
| OperaΓ§Γ£o | Status |
|---|---|
| SELECT | β Permitido |
| INSERT | β Bloqueado |
| UPDATE | β Bloqueado |
| DELETE | β Bloqueado |
| DROP | β Bloqueado |
| TRUNCATE | β Bloqueado |
Alexsander Valente
alexsander.app.br
Parte do curso IA Generativa na PrΓ‘tica