Skip to content

Threeger360/11-chat-sql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ’¬ Chat with SQL

Converse com Seus Dados em Linguagem Natural

Transforme perguntas em SQL automaticamente.


πŸ“‹ Sobre o Projeto

O Chat with SQL permite fazer perguntas em portuguΓͺs sobre bancos de dados e receber respostas precisas, sem escrever SQL manualmente.

O Problema

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

A SoluΓ§Γ£o

  1. Schema Awareness - Entende estrutura do banco
  2. Text-to-SQL - Converte pergunta em SQL
  3. Query Execution - Executa com seguranΓ§a
  4. Answer Generation - Responde em linguagem natural

πŸš€ Quick Start

1. Clone o Projeto

git clone <repo>
cd 11-chat-sql

2. Crie o Ambiente Virtual

python -m venv .venv
source .venv/bin/activate  # Linux/Mac

3. Instale as DependΓͺncias

pip install -r requirements.txt

4. Configure as VariΓ‘veis

cp .env.example .env
# Edite o .env com suas chaves

5. Inicialize o Banco de Exemplo

python init_db.py

6. Execute a Interface

streamlit run app.py

πŸ“ Estrutura do Projeto

11-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

πŸ—οΈ Arquitetura

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        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"                        β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

βš™οΈ PrΓ©-requisitos

Requisito VersΓ£o
Python 3.11+
OpenAI API Key GPT-4o-mini ou superior
SQLite IncluΓ­do no Python

Bancos Suportados

  • SQLite (padrΓ£o, incluΓ­do)
  • PostgreSQL (com psycopg2)
  • MySQL (com mysql-connector)

πŸ”§ Comandos Úteis

# Instalar dependΓͺncias
make install

# Inicializar banco de exemplo
make init-db

# Verificar setup
make setup

# Executar Streamlit
make app

# Rodar testes
make test

πŸ“Š Banco de Exemplo

O projeto inclui um banco SQLite com dados fictΓ­cios:

Tabelas

Tabela DescriΓ§Γ£o
clientes Cadastro de clientes
produtos CatΓ‘logo de produtos
vendas Registro de vendas
vendas_itens Itens de cada venda

Dados de Exemplo

  • 50 clientes
  • 20 produtos
  • 200 vendas
  • 500 itens de venda

🎯 Exemplos de Perguntas

βœ… "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?"

πŸ”’ SeguranΓ§a

O SQL Validator bloqueia queries perigosas:

OperaΓ§Γ£o Status
SELECT βœ… Permitido
INSERT ❌ Bloqueado
UPDATE ❌ Bloqueado
DELETE ❌ Bloqueado
DROP ❌ Bloqueado
TRUNCATE ❌ Bloqueado

πŸ“š Recursos


πŸ‘€ Autor

Alexsander Valente
alexsander.app.br


Parte do curso IA Generativa na PrΓ‘tica

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published