Automatização de Consultas SQL Utilizando Modelos de Linguagem (Text-to-SQL)
Abordagem para Text-to-SQL baseada em Retrieval-Augmented Generation (RAG) e In-Context Learning (ICL), permitindo a tradução automatizada de perguntas em linguagem natural para SQL com até 92,5% de assertividade.
Vive-se atualmente uma tendência em que o volume de dados gerado por empresas, governos e indivíduos alcança níveis sem precedentes. Decisões baseadas em dados tornaram-se cruciais para o sucesso operacional e estratégico de qualquer organização.
No entanto, extrair informações de bancos de dados relacionais tradicionalmente exige conhecimento avançado em SQL (Structured Query Language). Para democratizar o acesso a esses dados, a técnica de Text-to-SQL surge como uma ponte poderosa, transformando perguntas feitas em linguagem natural diretamente em consultas SQL executáveis.
O Desafio da Tradução de Linguagem Natural para SQL
A tarefa de converter perguntas em texto verbal para instruções SQL envolve desafios semânticos complexos: 1. Abstrações e Ambiguidade: Perguntas como *"mostre os clientes que mais compraram este mês"* carregam ideias implícitas de ordenação e janelas temporais. 2. Schema Comprehension: O modelo precisa compreender a estrutura exata do banco de dados (tabelas, colunas, chaves primárias e estrangeiras). 3. Prevenção de Alucinações: Garantir que a consulta gerada respeite estritamente a sintaxe do banco e retorne os dados corretos sem inventar colunas inexistentes.
A Solução: RAG e In-Context Learning (ICL)
Em nosso trabalho, desenvolvemos e avaliamos uma aplicação própria de Text-to-SQL utilizando a técnica de In-Context Learning (ICL) combinada a um pipeline de Retrieval-Augmented Generation (RAG) em repositórios evoluíveis.
# 1. In-Context Learning (ICL) Ao contrário do *Fine-Tuning* tradicional (que exige atualização cara de pesos da rede neural), o ICL fornece ao modelo exemplos demonstrativos no próprio prompt. Exploramos modalidades de: * **Zero-shot learning**: Instrução direta sem exemplos prévios. * **Few-shot learning**: Demonstração prévia com pares reais de Pergunta ➔ SQL.
# 2. RAG Dinâmico sobre Banco Evoluível Montamos uma base vetorial de pares pergunta-SQL. Quando o usuário faz uma nova pergunta em linguagem natural: 1. A pergunta é convertida em vetor (*embedding*). 2. Uma busca por similaridade identifica os exemplos mais relevantes no banco histórico. 3. Os exemplos selecionados injetam um contexto rico e personalizado no prompt enviado à LLM (*Few-shot dinâmico*).
[Pergunta do Usuário] ➔ [Vetor de Embedding] ➔ [Busca no Banco Vetorial]
│
[Exemplos Similares Recuperados]
│
▼
[Prompt Enxuto + Contexto RAG] ➔ [LLM: Llama 3.1 8B] ➔ [Consulta SQL Precisa]Resultados Práticos e Desempenho
Testamos a abordagem utilizando o modelo quantizado Meta-Llama-3.1-8B-Text-to-SQL-GGUF (4-bits) e avaliamos 8 diferentes estilos de *prompt engineering*:
- Taxa de Sucesso de 92,5%: O uso de RAG com *Full-Information* e *Simple RAG Organization* atingiu 100% de sucesso na geração de queries SQL corretas em ambientes controlados.
- Redução Drástica de Custos: Dispensou fases adicionais de treinamento supervisionado pesado e reduziu a latência por requisição.
- Eliminação de Alucinações: O fornecimento de exemplos reais recuperados via RAG guiou o modelo a manter o esquema de dados correto.
Conclusão e Aplicações Práticas
A combinação de RAG com In-Context Learning provou ser uma arquitetura extremamente robusta e viável para implementação em produtos corporativos. Ela permite que sistemas de BI, dashboards e assistentes de atendimento consultem bancos de dados complexos em linguagem natural de forma segura, rápida e intuitiva.
Esta pesquisa desenvolvida na Universidade Federal de Minas Gerais (UFMG) exemplifica o compromisso do time de engenharia da VetrixHub em aplicar o estado da arte da IA em soluções reais de mercado.