{"slug": "glancer-converse-com-seu-banco-de-dados-rails-em-linguagem-natural", "title": "🇧🇷 Glancer — Converse com seu banco de dados Rails em linguagem natural", "summary": "A developer created Glancer, a Ruby on Rails engine that enables database queries using natural language through RAG and LLMs, eliminating the need to write SQL code. The tool, inspired by the Blazer gem, provides a chat interface at `/glancer` where users can ask questions in plain language, generating and safely executing SELECT queries or ActiveRecord expressions. Glancer includes built-in security features such as automatic transaction rollback and a blocklist for destructive SQL commands, while storing embeddings directly in the existing database without requiring additional infrastructure.", "body_md": "Uma engine Rails que permite consultar o banco de dados com linguagem natural, usando RAG e LLMs. Sem precisar escrever código.\n\nTodo projeto Rails chega num ponto em que alguém do time (produto, suporte, gestão, etc.) precisa de um dado, mas ninguém tem tempo de parar para compreender a necessidade e escrever uma query. A mensagem no Slack, o card aberto, o pedido de CSV que some no backlog. Quem nunca.\n\nFoi isso que me fez pensar no **Glancer**.\n\nGlancer é uma engine Ruby on Rails que monta uma interface de chat em `/glancer`\n\ndentro da sua aplicação. Você digita uma pergunta em linguagem natural, ele busca o contexto relevante do sistema, gera um `SELECT`\n\n(ou uma expressão ActiveRecord), valida, executa com segurança e retorna o resultado.\n\n```\n\"Quantos pedidos foram feitos nos últimos 30 dias, agrupados por status?\"\n→ SELECT executado, resultados exibidos, resposta escrita em português.\n```\n\nA inspiração direta foi o [Blazer](https://github.com/ankane/blazer), uma gem que já usei bastante. A ideia aqui é dar um passo a mais: em vez de escrever o SQL, você só pergunta.\n\nAdicione no `Gemfile`\n\n:\n\n```\ngem \"glancer\"\n```\n\nExecute o gerador:\n\n```\nrails generate glancer:install\nrails db:migrate\nrails glancer:index:all\n```\n\nAcesse `/glancer`\n\ne comece a perguntar.\n\nO gerador cria um initializer onde você configura o provider de LLM. Uma configuração mínima com Gemini:\n\n```\nGlancer.configure do |config|\n  config.llm_provider   = :gemini\n  config.llm_model      = \"gemini-2.0-flash\"\n  config.gemini_api_key = ENV[\"GEMINI_API_KEY\"]\n  config.schema_permission = true\nend\n```\n\nOpenAI e OpenRouter também são suportados. Ela roda em cima do [RubyLLM](https://rubyllm.com/) então os modelos que ele suportar, o Glancer suportará. Dá para usar modelos diferentes por papel, por exemplo, um modelo mais capaz para gerar a query e um mais barato para escrever a resposta.\n\nAlguns pontos que vale conhecer:\n\n**Segurança por padrão:** Toda query roda dentro de uma transaction que sempre faz rollback. Um blocklist de palavras rejeita `DELETE`\n\n, `UPDATE`\n\n, `INSERT`\n\n, `DROP`\n\ne afins antes mesmo de chegar no executor. Também é possível apontar para uma réplica de leitura.\n\n**Sem infraestrutura adicional:** Os embeddings ficam no seu banco existente, numa coluna JSON. Sem Pinecone, sem Weaviate, sem nada extra para subir. Raramente será muita coisa, por isso essa abordagem.\n\n**Ensina o contexto do seu negócio.** Você coloca um arquivo Markdown em `config/glancer/llm_context.glancer.md`\n\ne explica as regras do domínio: o que os valores de `status`\n\nsignificam, como a receita é calculada, quais colunas/tabelas/modelos ignorar, etc:\n\n```\n- `orders.status`: \"pending\" | \"paid\" | \"shipped\" | \"refunded\"\n- Receita mensal = SUM(orders.total) WHERE status = \"paid\"\n- Para perguntas sobre \"churn\", usar a coluna `churned_at` em `subscriptions`\n```\n\nInformações adicionais mais dinâmicas podem ser adicionadas em um campo texto nas configurações. Entretanto, não será gerado embedding disso pois será utilizado de contexto ao modelo base.\n\n**A interface tem uns detalhes legais.** Os resultados aparecem em tabela com export CSV de um clique. Gráficos são gerados automaticamente quando fazem sentido. O processo de execução foi pensado para não travar a thread principal da aplicação. Dá para digitar `@nome_da_tabela`\n\npara fixar e ser mais assertivo sobre uma tabela específica na pergunta, editar o SQL gerado e reexecutar, e até ditar a pergunta pelo microfone. Tem também um visualizador de schema em `/glancer/db-schema`\n\n.\n\n**Integração com Blazer.** Se você já usa o Blazer, o Glancer mostra um botão para abrir o SQL gerado direto lá.\n\nComecei isso como projeto de estudo. Estudei bastante sobre RAG e LLMs ao longo do ano passado e quando a ideia surgiu eu nunca tinha publicado uma gem antes e queria experimentar o processo completo, de engine a gemspec a CI. Com isso, juntei o útil ao agradável. Como mostrei para alguns colegas e eles acharam útil, então decidi abrir para a comunidade.\n\nAtualmente está na versão 1.0.0.\n\nSe você testar, adoraria saber o que achou, seja sobre o código ou sobre a ideia. Issues e pull requests são bem-vindos.\n\nSe gostar do projeto, uma estrela no repositório ajuda bastante a divulgar para mais pessoas da comunidade.\n\n**GitHub:** [https://github.com/ErnaneJ/glancer](https://github.com/ErnaneJ/glancer)\n\n**RubyGems:** [https://rubygems.org/gems/glancer](https://rubygems.org/gems/glancer)", "url": "https://wpnews.pro/news/glancer-converse-com-seu-banco-de-dados-rails-em-linguagem-natural", "canonical_source": "https://dev.to/videosdeti/glancer-converse-com-seu-banco-de-dados-rails-em-linguagem-natural-2eep", "published_at": "2026-05-27 17:05:40+00:00", "updated_at": "2026-05-27 17:41:58.648031+00:00", "lang": "en", "topics": ["ai-tools", "natural-language-processing", "large-language-models", "generative-ai", "ai-products"], "entities": ["Glancer", "Ruby on Rails", "Blazer", "Gemini", "RAG"], "alternates": {"html": "https://wpnews.pro/news/glancer-converse-com-seu-banco-de-dados-rails-em-linguagem-natural", "markdown": "https://wpnews.pro/news/glancer-converse-com-seu-banco-de-dados-rails-em-linguagem-natural.md", "text": "https://wpnews.pro/news/glancer-converse-com-seu-banco-de-dados-rails-em-linguagem-natural.txt", "jsonld": "https://wpnews.pro/news/glancer-converse-com-seu-banco-de-dados-rails-em-linguagem-natural.jsonld"}}