Sistema Python para processar arquivos CSV com questões da BNCC e realizar busca semântica no Supabase.
- Leitura de arquivos CSV das pastas
docs/EF,docs/EIedocs/EM - Extração de códigos BNCC usando regex
- Limpeza de descrições removendo códigos entre parênteses
- Suporte a colunas opcionais (Unidade Temática, Objeto do Conhecimento)
- Conversão de campos vazios em NULL
- Envio de dados em lotes de 50 registros via UPSERT
- Tratamento de erros e logs detalhados
- Vetorização usando Google Gemini Embeddings (768 dimensões)
- Integração com LangChain
- Busca semântica por similaridade usando pgvector
- Função SQL otimizada para cosine similarity
- Threshold de similaridade configurável
- Python 3.7 ou superior
- Conta no Supabase
- Chave de API do Google Gemini
Instale as dependências:
pip install -r requirements.txt- Copie o arquivo de exemplo:
copy .env.example .env- Configure as credenciais no arquivo
.env:SUPABASE_URL: URL do projeto SupabaseSUPABASE_KEY: Chave de API do Supabase (anon/public key)GOOGLE_API_KEY: Chave de API do Google Gemini
Exemplo:
SUPABASE_URL=https://seuproject.supabase.co
SUPABASE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
GOOGLE_API_KEY=AIzaSy...O arquivo .env não será versionado (está no .gitignore).
Execute o script SQL setup_database.sql no SQL Editor do Supabase:
- Cria a tabela
base_questoes_bncc - Cria índices para performance
- Configura triggers de atualização
python processar_questoes_bncc.pyO script:
- Conecta ao Supabase
- Lê os arquivos CSV
- Extrai os códigos BNCC
- Envia os dados em lotes
- Exibe resumo do processamento
Execute o script SQL setup_vetorial.sql no SQL Editor do Supabase:
- Habilita a extensão pgvector
- Adiciona coluna embedding (768 dimensões)
- Cria índice para busca eficiente
- Cria função
buscar_questoes_similares()
python vetorizar_questoes.pyO script:
- Busca registros sem embedding
- Gera embeddings usando Google Gemini
- Atualiza o banco com os vetores
- Processa em lotes de 10 registros
CREATE TABLE base_questoes_bncc (
id BIGSERIAL PRIMARY KEY,
disciplina TEXT,
ano TEXT,
unidade_tematica TEXT,
objeto_conhecimento TEXT,
codigo_bncc TEXT UNIQUE,
descricao_habilidade TEXT,
embedding vector(768),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);codigo_bncc(UNIQUE) - busca direta por códigoembedding(IVFFlat) - busca vetorial otimizadadisciplina- filtros por disciplina
Disciplina, Ano, Unidade Temática, Objeto do Conhecimento, Habilidade
Disciplina, Ano, Habilidade
O script detecta automaticamente a estrutura e processa adequadamente.
- Usa UPSERT baseado no campo
codigo_bncc(UNIQUE) - Códigos existentes são atualizados
- Novos códigos são inseridos
- Registros sem código BNCC válido são ignorados com aviso
- Campos vazios são convertidos para NULL
- Colunas opcionais são processadas automaticamente
- Processa apenas registros sem embedding
- Respeita rate limits da API Google Gemini
- Gera vetores de 768 dimensões
- Atualiza registros individualmente
- Python 3.7+
- Supabase (PostgreSQL)
- pgvector
- LangChain
- Google Gemini Embeddings