Converse com seu banco de dados SQL de maneira elegante, sem saber TSQL

Rafael Chinaglia
TOTVS Developers
Published in
5 min readMay 27, 2024

Artigo de Airton Lira Junior cedido ao TD e ao iMasters

No mundo dinâmico e altamente tecnológico de hoje, o acesso eficiente e a manipulação de dados são cruciais para a tomada de decisões empresariais informadas. No entanto, a complexidade inerente ao Structured Query Language (SQL) pode representar uma barreira significativa para muitos profissionais que não possuem uma formação técnica aprofundada. A necessidade de compreender intricados comandos T-SQL muitas vezes desmotiva usuários que poderiam se beneficiar enormemente da análise de dados.

Para resolver este desafio, surge a vanna.ai, uma tecnologia inovadora que permite aos usuários interagir com bancos de dados Structured Query Language de maneira simples e intuitiva, sem a necessidade de conhecer T-SQL. Com essa nova tecnologia, a extração de informações valiosas torna-se acessível a um público mais amplo, permitindo que profissionais de diversas áreas explorem e analisem dados de forma eficiente e eficaz.

SQL

Neste artigo, exploraremos como a vanna.ai está transformando a maneira como interagimos com bancos de dados Structured Query Language. Discutiremos as principais funcionalidades da tecnologia, seus benefícios práticos e como ela se integra ao fluxo de trabalho existente nas organizações. Ao final, esperamos demonstrar a democratização do acesso aos dados, capacitando usuários a tomar decisões baseadas em dados sem a complexidade tradicional associada ao T-SQL.

Vamos iniciar:

from vanna.openai import OpenAI_Chat
from vanna.vannadb import VannaDB_VectorStore
class MyVanna(VannaDB_VectorStore, OpenAI_Chat):
def __init__(self, config=None):
MY_VANNA_MODEL = # Your model name from https://vanna.ai/account/profile
VannaDB_VectorStore.__init__(self, vanna_model=MY_VANNA_MODEL,
vanna_api_key=MY_VANNA_API_KEY, config=config)
OpenAI_Chat.__init__(self, config=config)
# Add your OpenAI api_key
vn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4o'})

olhando a documentação do vanna .ai podemos se conectar a essa “pequena e desconhecida lista” de banco de dados:

  1. Postgres SQL
  2. Oracle
  3. DuckDB
  4. MySQL
  5. SQLite
  6. Big Query
  7. Snowflake
  8. Microsoft SQL

Observando a documentação , você pode descobrir como conectar seu banco de dados específico. Para os fins desta postagem, eu estaria me conectando ao banco de dados DuckDB StackOverFlow. O banco de dados pode ser encontrado aqui !

#É assim que você pode se conectar a um banco de dados DuckDB
vn.connect_to_duckdb(url= 'motherduck:[<database_name>]?motherduck_token=
<token>&saas_mode=true' )

Tabelas SQL utilizadas para nosso treinamento

esquema de banco de dados StackOverFlow

esquema de banco de dados StackOverFlow

esquema de banco de dados StackOverFlow

Treinamento no Plano (Esquema de Informações)

# A consulta do esquema de informações pode precisar de alguns ajustes dependendo 
do seu banco de dados. Este é um bom ponto de partida.
df_information_schema = vn.run_sql( "SELECIONE * FROM INFORMATION_SCHEMA.COLUMNS" )
# Isso dividirá o esquema de informações em pedaços pequenos que podem ser 
referenciados pelo
plano LLM = vn.get_training_plan_generic(df_information_schema)
plan
# Se você gostar do plano, remova o comentário e execute-o para treinar
vn.train(plan=plan)

Treinamento em DDL

# No duckDB, a instrução de descrição pode buscar o DDL para qualquer tabela
vn.train ( ddl = "DESCRIBE SELECT * FROM Stackoverflow.users;" )

Treinamento em instruções SQL

# aqui está um exemplo de treinamento em instruções SQL
vn.train(
question= "Quais são os 10 principais usuários com maior quantidade de emblemas?"
,sql= "" "SELECT UserId, COUNT(*) AS badge_count
FROM stackoverflow.main. badges
GROUP BY UserId
ORDER BY badge_count DESC
LIMIT 10
" "" )
# Outro exemplo
vn.train(
question= "Qual é a diferença no total de respostas para o usuário que respondeu
mais respostas e o usuário que respondeu menos perguntas?" ,
,sql= "SELECT MAX(answer_count) - MIN(answer_count) AS diferença
FROM (
SELECT OwnerUserId, COUNT(*) AS answer_count
FROM stackoverflow.main.posts
WHERE PostTypeId = 2
GROUP BY OwnerUserId
) AS answer_counts;
" )

Treinamento em Documentação

# Você pode alimentar informações contextuais usando a documentação
vn.train(documentation=
"Chamamos o usuário com as respostas mais altas em um ano de Grão-Mestre" )

Você pode visualizar seus dados de treinamento usando vn.get_training_data()

# vn.ask executa as seguintes funções  em sequência, que podem ser executadas 
individualmente
# 1. vn.generate_ql
# 2. vn.run_sql
# 3. vn.generate_plotly_code
# 4. vn.get_plotly_figure
# é assim que você pode fazer a pergunta pós-treinamento de Vanna
vn.ask( 'Encontrar os 10 principais usuários com a maior quantidade de emblemas?' )

Imagem por Autor — Visualização criada pela consulta SQL

Usando o aplicativo Flask

Vanna vem com um aplicativo UI Flask integrado. Que pode ser iniciado dentro de um notebook Jupyter ou script Python.

de vanna.flask importar  VannaFlaskApp 
app = VannaFlaskApp(vn)
app.run()

Imagem por Autor — Visualização criada pela consulta Structured Query Language

É assim que você pode usar o GPT 4o para conversão de texto em Structured Query Language.

Referência

Abaixo está a comparação entre o GPT 4o com outros modelos de sua classe, como você pode ver que ele tem o desempenho mais alto de 61% em comparação com 59% do ChatGPT 4 turbo e 56% do Claude Opus

Até mais!!! o/

#llm #vanna.ai #sql #duckdb #tsql #python

--

--

Rafael Chinaglia
TOTVS Developers

Jornalista/ Editor do iMasters, Gestor de projetos e produtor de conteúdo para TOTVS Developers.