3 pontos por GN⁺ 2024-01-15 | 1 comentários | Compartilhar no WhatsApp
  • Open source para gerar Text-To-SQL com precisão usando LLM com RAG (Retrieval-Augmented Generation) aplicado

Como o Vanna funciona

  • Treinamento do "modelo" RAG: treina um modelo RAG com os dados do usuário.
  • Fazer perguntas: ao fazer perguntas usando o modelo treinado, ele retorna consultas SQL que podem ser executadas automaticamente no banco de dados.

Interface do usuário

  • Algumas interfaces de usuário criadas com Vanna incluem Jupyter Notebook, vanna-ai/vanna-streamlit, vanna-ai/vanna-flask e vanna-ai/vanna-slack.

Primeiros passos

  • Instalação: é possível instalar o Vanna com o comando pip install vanna.
  • Importação: é possível usar o Vanna com o código import vanna as vn.
Publicidade

Treinamento

  • Treinamento com instruções DDL: é possível treinar o modelo usando instruções DDL que incluem informações sobre nomes de tabelas do banco de dados, colunas, tipos de dados, relacionamentos etc.
  • Treinamento com documentação: é possível treinar o modelo adicionando documentação sobre termos de negócio ou definições.
  • Treinamento com SQL: é possível gerar novo SQL adicionando consultas SQL existentes como dados de treinamento.

Fazer perguntas

  • Ao usar o método vn.ask("질문"), é possível receber consultas SQL relacionadas.

RAG versus fine-tuning

  • O RAG é portável entre LLMs, permite remover facilmente os dados de treinamento, tem baixo custo e alta adaptabilidade ao futuro.
  • O fine-tuning é útil quando é necessário minimizar os tokens no prompt, mas tem início lento e custos altos de treinamento e execução.

Por que escolher o Vanna

  1. Alta precisão em datasets complexos: a capacidade do Vanna é determinada com base nos dados de treinamento.
  2. Segurança e privacidade: o conteúdo do banco de dados não é enviado para o LLM nem para o banco de dados vetorial.
  3. Autoaprendizado: ao usar com Jupyter, ele pode aprender automaticamente com consultas executadas com sucesso.
  4. Suporte a todos os bancos de dados SQL: pode se conectar a qualquer banco de dados SQL que possa ser conectado com Python.
  5. Escolha de front-end: é possível começar com Jupyter Notebook e depois disponibilizar para os usuários via Slackbot, app web, app Streamlit ou um front-end personalizado.
Publicidade

Expandindo o Vanna

  • O Vanna foi projetado para se conectar a qualquer banco de dados, LLM e banco de dados vetorial.
  • A classe base abstrata VannaBase define as funcionalidades básicas e oferece uma implementação que usa OpenAI e ChromaDB.

Materiais adicionais

  • São fornecidos a documentação completa, o site e um grupo no Discord para suporte.

Opinião do GN⁺:

  • O Vanna é uma ferramenta poderosa para automatizar o gerenciamento de bancos de dados e a geração de consultas SQL, permitindo que os usuários criem facilmente consultas SQL altamente precisas para datasets complexos.
  • Com uma interface amigável e recursos de autoaprendizado, até usuários não especialistas podem usar bancos de dados com eficiência, o que pode acelerar ainda mais a tomada de decisões orientada por dados.
  • A escalabilidade e a adaptabilidade futura do Vanna oferecem às empresas a oportunidade de responder com flexibilidade às mudanças tecnológicas e melhorar continuamente seus processos de gestão de dados.

1 comentários

 
GN⁺ 2024-01-15
Comentários do Hacker News
  • Experiência de um usuário desenvolvendo o projeto ChatDB.ai

    • Está desenvolvendo um projeto semelhante chamado ChatDB.ai.
    • A experiência mais bem-sucedida ao combinar IA e SQL foi fornecer ao LLM o feedback dos erros do provedor SQL após cada iteração.
    • Usar um wrapper de mensagens de erro formatadas para sugerir fortemente consultas às tabelas do sistema foi muito eficaz para descobrir informações de esquema.
    • Com esses pequenos ajustes, ele se tornou surpreendentemente bom em encontrar consultas que exigem junções de mais de 4 tabelas.
  • Experiência pessoal usando GPT-4

    • Já realizou um trabalho semelhante usando GPT-4.
    • Verificou a estrutura das tabelas com o comando SHOW TABLE do MySQL CLI e gerou consultas baseadas nessas tabelas para mostrar métricas de negócio, como taxa de abandono de carrinho.
    • Percebeu que esse método funciona muito bem.
  • Visão cética sobre sistemas que traduzem linguagem natural para SQL

    • Embora reconheça o esforço para desenvolver sistemas que traduzem linguagem natural em SQL, mantém ceticismo porque a linguagem natural e os modelos têm características fundamentalmente aproximativas e pouco precisas.
    • Os bancos de dados SQL são projetados, na maioria dos casos, para processamento de informações exato e preciso, e introduzir uma camada aproximativa pode piorar o problema.
    • Questiona se essa tentativa é realmente produtiva para resolver de forma eficaz as necessidades do mundo real.
  • Interesse em produtos semelhantes, incluindo startups apoiadas pela YC

    • Está acompanhando alguns produtos semelhantes, como Minds DB (YC W20), Buster (YC W24) e DB Pilot, e tem muito interesse nessa área.
    • Também está procurando soluções desse tipo.
  • Experiência com um serviço de relatórios baseado em duckdb

    • No geral funciona bem, mas encontrou alguns problemas:
      • O GPT-4 às vezes se desvia dos exemplos ou do esquema, apesar de uma configuração de temperatura baixa.
      • O serviço hospeda dados genéricos, mas os clientes pedem a geração de relatórios na linguagem de domínio deles.
      • Fazer debug de prompts de LLM é complicado. Os clientes podem confundir o modelo com facilidade.
      • Fornece uma "explicação" da consulta gerada para o cliente, tornando transparente o que foi usado na elaboração do relatório.
  • Preocupações e explicações sobre como o RAG funciona

    • Expressa preocupação com o uso do termo "train".
    • Dedica muito tempo a explicar que RAG não requer treinamento nem fine-tuning, apenas preparação dos dados, chunking e vetorização.
  • Curiosidade sobre o problema de alucinação dos LLMs

    • Tem curiosidade sobre como o LLM interpreta conceitos de tempo como "ontem" e sobre o problema de o SQL gerado poder ser sintaticamente válido, mas diferente da intenção.
    • Há risco de produzir números errados, especialmente em consultas de agregação como MAX e COUNT, e para verificar isso seria preciso ler o SQL diretamente, o que vai contra o objetivo principal.
  • Compartilhamento de experiência usando conjuntos de dados e tecnologia próprios

    • Usam tecnologia semelhante para desenvolver um bot que permite que funcionários internos conversem com conjuntos de dados estruturados.
    • Na prática, funciona até certo ponto, mas há vários desafios:
      • Existem muitos enums e tipos de dados específicos do trabalho que não estão presentes nos modelos existentes, então é preciso defini-los manualmente e adicioná-los ao prompt como contexto.
      • É difícil lidar com perguntas relacionadas a tempo.
      • Como os usuários podem perguntar qualquer coisa, são necessárias muitas consultas SQL de exemplo, mesmo para uma única tabela.
      • Há dificuldade para expandir para várias tabelas, e fica a dúvida se existe uma forma mais eficiente.
      • Usaram o modelo Llama2 70B Gen, mas têm curiosidade se outros modelos apresentam melhor desempenho na geração de consultas SQL.
  • Experiência na bit.io e reação dos clientes

    • Fez um trabalho semelhante na bit.io, e as pessoas gostaram disso.
    • Existem vários artigos sobre descobertas feitas durante esse trabalho, e atualmente a empresa foi adquirida pela Databricks e encerrou o serviço.
    • Está disposto a responder perguntas, dentro do possível.