Criando operações SQL com IA Generativa no R com querychat

No universo da análise de dados, a velocidade para obter respostas é um diferencial competitivo. Frequentemente, uma simples pergunta de negócio — “Qual foi nosso produto mais vendido no último trimestre na região Nordeste?” — inicia um processo que envolve abrir o RStudio, escrever código dplyr ou SQL, executar e, finalmente, obter a resposta. E se pudéssemos simplesmente perguntar isso aos nossos dados em português, diretamente no nosso dashboard Shiny?É exatamente essa a proposta do querychat, um inovador pacote R desenvolvido pela Posit que transforma a maneira como interagimos com nossas fontes de dados.

Neste post, vamos mergulhar no que é o querychat para R, como ele funciona e, o mais importante, como você pode usá-lo com modelos de IA como o Google Gemini para acelerar suas análises de dados.

O que é o querychat?

querychat é um componente para Shiny que atua como uma ponte inteligente entre a linguagem humana e a linguagem de consulta de dados. Utilizando o poder dos Grandes Modelos de Linguagem (LLMs), como o Gemini do Google, através do pacote ellmer, ele traduz suas perguntas em consultas SQL, busca a resposta nos seus dados e a retorna de forma clara e direta dentro do seu aplicativo Shiny.

Pense nele como um assistente de dados que é fluente em SQL. Você faz a pergunta, ele escreve e executa a consulta para você em segundos.

Os principais benefícios são:

  • Velocidade: Obtenha respostas instantâneas sem escrever uma única linha de código de consulta.
  • Acessibilidade: Permite que usuários com menos conhecimento técnico (analistas de negócios, gerentes de produto) explorem os dados de forma autônoma diretamente na aplicação Shiny.
  • Transparência: O querychat sempre mostra a consulta SQL que gerou para obter a resposta, permitindo validação, aprendizado e depuração.
  • Segurança: O LLM nunca vê os dados brutos, apenas o esquema (nomes das colunas, tipos, etc.) e as descrições que você fornece.

Como o querychat Funciona?

A magia do querychat acontece em um processo bem definido nos bastidores do seu app Shiny:

  1. Configuração (querychat_init): Você inicia a configuração do chat apontando para sua fonte de dados (um data frame em R). Aqui você também define o LLM a ser usado, uma mensagem de boas-vindas e descrições adicionais sobre seus dados.
  2. Interface do Usuário (querychat_sidebar): Você adiciona a interface do chat ao seu aplicativo Shiny, geralmente em uma barra lateral.
  3. Lógica do Servidor (querychat_server): No servidor do Shiny, você inicializa o querychat, que gerencia a conversa.
  4. Pergunta e Tradução Inteligente: Quando o usuário digita uma pergunta, o querychat a envia para o LLM (ex: Gemini) junto com o esquema dos dados. O LLM, então, gera uma consulta SQL para responder à pergunta.
  5. Execução e Resposta: O querychat executa essa consulta SQL em um motor DuckDB interno contra seus dados. O resultado é um data frame reativo (querychat$df()) que você pode usar para exibir em tabelas, gráficos ou qualquer outro output do Shiny.

Tutorial Prático: Conversando com o dataset mtcars

Vamos colocar a mão na massa. Usaremos o clássico dataset mtcars para nosso exemplo.

1° Passo: Configurando o Ambiente

Primeiro, você precisa instalar os pacotes necessários. Você também precisará de uma chave de API do Google AI Studio.

# Instale o pak se ainda não tiver
# install.packages("pak")

pak::pak("posit-dev/querychat/pkg-r")
install.packages(c("shiny", "bslib", "DT", "ellmer", "purrr"))

É uma boa prática configurar sua chave de API como uma variável de ambiente. Você pode fazer isso adicionando a linha GOOGLE_API_KEY="sua_chave_aqui" a um arquivo .Renviron no seu diretório de trabalho.

2° Passo: Preparando o App Shiny

Vamos criar um aplicativo Shiny completo em um único arquivo app.R.

library(shiny)
library(bslib)
library(querychat)
library(ellmer)
library(purrr)
library(DT)

# --- 1. Configuração do querychat ---
# Aqui, especificamos o dataset (mtcars) e o modelo LLM.
# Usamos purrr::partial para pré-configurar a função de chat do ellmer com o modelo Gemini.
querychat_config <- querychat_init(
  mtcars,
  create_chat_func = partial(
    ellmer::chat_google_gemini, 
    model = "gemini-2.0-flash" # Usando o Gemini 2.0 flash
  )
)

# --- 2. Interface do Usuário (UI) ---
# Usamos bslib::page_sidebar para um layout moderno.
# A função querychat_sidebar("chat") cria toda a interface de chat.
ui <- page_sidebar(
  title = "Análise Interativa do `mtcars`",
  sidebar = querychat_sidebar("chat"),
  DTOutput("tabela_dados")
)

# --- 3. Lógica do Servidor (Server) ---
server <- function(input, output, session) {
  
  # Inicializa o servidor do querychat com a configuração definida acima.
  querychat <- querychat_server("chat", querychat_config)
  
  # Renderiza a tabela de dados.
  # A mágica acontece aqui: querychat$df() é um data frame reativo!
  # Ele se atualiza automaticamente sempre que o usuário faz uma nova consulta.
  output$tabela_dados <- renderDT({
    datatable(querychat$df())
  })
}

# --- 4. Executa a Aplicação ---
shinyApp(ui, server)

3° Passo: Rodando o App e Fazendo Perguntas

Salve o código como app.R e clique em “Run App” no RStudio. A aplicação será aberta com uma interface de chat na barra lateral e a tabela mtcars completa à direita.

Agora, experimente fazer algumas perguntas em português no chat:

  • “Qual o mpg médio de carros com 6 cilindros?”
  • “Mostre apenas os carros com transmissão manual” (dica: a coluna am é 1 para manual)
  • “Ordene os carros do mais pesado para o mais leve”
  • “Quais carros têm mais de 150 de hp e menos de 3000 de peso (wt)?”

Para cada pergunta, você verá a tabela de dados se atualizar instantaneamente com o resultado. O querychat também mostrará a consulta SQL que ele gerou, o que é ótimo para aprendizado e validação.

Adicionando Contexto para Melhores Respostas

Para obter resultados ainda melhores, você pode fornecer ao querychat uma descrição dos seus dados, assim como faria para um colega humano. Crie um arquivo chamado data_description.md:

A data foi extraída da revista Motor Trend US de 1974.
- mpg: Milhas por Galão (consumo)
- cyl: Número de cilindros
- hp: Cavalos de potência (gross horsepower)
- wt: Peso (em 1000 lbs)
- am: Transmissão (0 = automática, 1 = manual)

E então, atualize sua configuração no app.R:

querychat_config <- querychat_init(
  mtcars,
  data_description = readLines("data_description.md"), # Adicionando a descrição
  create_chat_func = partial(
    ellmer::chat_google_gemini, 
    model = "gemini-2.-flash"
  )
)

Com essa descrição, o LLM entenderá melhor o significado de cada coluna, permitindo que você faça perguntas mais naturais como “qual o consumo médio dos carros?”.

Conclusão

querychat para R representa um passo significativo em direção a uma análise de dados mais intuitiva e conversacional dentro do ecossistema Shiny. Ao reduzir a barreira entre a pergunta e a resposta, ele capacita equipes a extrair valor de seus dados com uma agilidade sem precedentes, diretamente em dashboards interativos. A transparência de fornecer o código SQL gerado garante que o controle e a validação permaneçam nas mãos do analista.

É uma ferramenta que vale a pena experimentar em seu próximo projeto Shiny. A capacidade de permitir que seus usuários “conversem” com os dados pode ser o catalisador para insights que, de outra forma, permaneceriam ocultos.


Quer aprender mais?

Conheça nossa Formação do Zero à Análise de Dados Econômicos e Financeiros usando Python e Inteligência Artificial. Aprenda do ZERO a coletar, tratar, construir modelos e apresentar dados econômicos e financeiros com as melhores ferramentas do mercado.

Referências

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Qual o efeito de um choque de juros sobre a inadimplência?

Neste exercício, exploramos a relação dinâmica entre o custo do crédito (juros na ponta) e o risco realizado (taxa de inadimplência) através de uma análise exploratória de dados e modelagem econométrica utilizando a linguagem de programação R.

Qual a relação entre benefícios sociais e a taxa de participação do mercado de trabalho?

Este exercício apresenta uma investigação econométrica sobre a persistente estagnação da taxa de participação no mercado de trabalho brasileiro no período pós-pandemia. Utilizando a linguagem R e dados públicos do IBGE e Banco Central, construímos um modelo de regressão linear múltipla com correção de erros robustos (Newey-West). A análise testa a hipótese de que o aumento real das transferências de renda (Bolsa Família/Auxílio Brasil) elevou o salário de reserva, desincentivando o retorno à força de trabalho.

Estamos em pleno emprego no mercado de trabalho?

Este artigo investiga se o mercado de trabalho brasileiro atingiu o nível de pleno emprego, utilizando uma estimativa da NAIRU (Non-Accelerating Inflation Rate of Unemployment) baseada na metodologia de Ball e Mankiw (1997). Através de uma modelagem em Python que unifica dados históricos da PME e PNAD Contínua com as expectativas do Boletim Focus, comparamos a taxa de desocupação corrente com a taxa neutra estrutural. A análise visual e quantitativa sugere o fechamento do hiato de desemprego, sinalizando potenciais pressões inflacionárias. O texto detalha o tratamento de dados, a aplicação do Filtro Hodrick-Prescott e discute as vantagens e limitações da metodologia econométrica adotada.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.