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
?
O 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:
- 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. - Interface do Usuário (
querychat_sidebar
): Você adiciona a interface do chat ao seu aplicativo Shiny, geralmente em uma barra lateral. - Lógica do Servidor (
querychat_server
): No servidor do Shiny, você inicializa oquerychat
, que gerencia a conversa. - 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. - 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
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
- Documentação Oficial do
querychat
para R: https://posit-dev.github.io/querychat/r/index.html - Post do Blog da Posit sobre
querychat
: https://posit.co/blog/race-stats-dashboard-querychat/ - Documentação do Pacote
ellmer
: https://ellmer.tidyverse.org/