Banco de Dados

28 mai, 2024

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

Publicidade

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

LEIA TAMBÉM