3 puntos por GN⁺ 2024-01-15 | 1 comentarios | Compartir por WhatsApp
  • Un proyecto open source para generar Text-To-SQL preciso con un LLM que aplica RAG (Retrieval-Augmented Generation)

Cómo funciona Vanna

  • Entrenamiento del “modelo” RAG: se entrena un modelo RAG sobre los datos del usuario.
  • Hacer preguntas: al hacer una pregunta usando el modelo entrenado, devuelve una consulta SQL que puede ejecutarse automáticamente en la base de datos.

Interfaz de usuario

  • Algunas interfaces de usuario creadas con Vanna incluyen Jupyter Notebook, vanna-ai/vanna-streamlit, vanna-ai/vanna-flask y vanna-ai/vanna-slack.

Primeros pasos

  • Instalación: puedes instalar Vanna con el comando pip install vanna.
  • Importación: puedes usar Vanna con el código import vanna as vn.

Entrenamiento

  • Entrenamiento con sentencias DDL: puedes entrenar el modelo usando sentencias DDL que incluyen información sobre nombres de tablas, columnas, tipos de datos y relaciones de la base de datos.
  • Entrenamiento con documentación: puedes entrenar el modelo agregando documentación sobre términos o definiciones del negocio.
  • Entrenamiento con SQL: puedes generar nuevo SQL agregando consultas SQL existentes como datos de entrenamiento.

Hacer preguntas

  • Puedes obtener una consulta SQL relacionada haciendo una pregunta con el método vn.ask("pregunta").

RAG frente a fine-tuning

  • RAG es portable entre distintos LLM, permite eliminar fácilmente los datos de entrenamiento, tiene menor costo y una mayor capacidad de adaptación a futuro.
  • El fine-tuning es útil cuando necesitas minimizar los tokens dentro del prompt, pero su puesta en marcha es lenta y los costos de entrenamiento y ejecución son altos.

Por qué elegir Vanna

  1. Alta precisión en datasets complejos: la capacidad de Vanna depende de los datos de entrenamiento.
  2. Seguridad y privacidad: el contenido de la base de datos no se envía al LLM ni a la base de datos vectorial.
  3. Autoaprendizaje: si se usa a través de Jupyter, puede aprender automáticamente de las consultas que se ejecuten con éxito.
  4. Compatibilidad con todas las bases de datos SQL: puede conectarse a cualquier base de datos SQL a la que se pueda conectar con Python.
  5. Elección de front end: puedes empezar en Jupyter Notebook y luego ofrecerlo a los usuarios como Slackbot, app web, app de Streamlit o un front end personalizado.

Extender Vanna

  • Vanna está diseñado para conectarse con cualquier base de datos, LLM y base de datos vectorial.
  • La clase base abstracta VannaBase define la funcionalidad principal y ofrece una implementación que usa OpenAI y ChromaDB.

Material adicional

  • Se ofrecen la documentación completa, el sitio web y un grupo de Discord para soporte, entre otros recursos.

Opinión de GN⁺:

  • Vanna es una herramienta potente para automatizar la administración de bases de datos y la generación de consultas SQL, y permite a los usuarios crear fácilmente consultas SQL de alta precisión sobre datasets complejos.
  • Gracias a su interfaz amigable y su capacidad de autoaprendizaje, incluso personas no especialistas pueden aprovechar bases de datos de forma eficiente, lo que puede acelerar aún más la toma de decisiones basada en datos.
  • La escalabilidad de Vanna y su capacidad de adaptación futura ofrecen a las empresas la oportunidad de responder con flexibilidad a los cambios tecnológicos y mejorar continuamente sus procesos de gestión de datos.

1 comentarios

 
GN⁺ 2024-01-15
Opiniones de Hacker News
  • Experiencia de usuario desarrollando el proyecto ChatDB.ai

    • Está desarrollando un proyecto similar llamado ChatDB.ai.
    • La experiencia más exitosa al combinar IA y SQL fue retroalimentar al LLM con los errores del proveedor de SQL después de cada iteración.
    • Usar un wrapper de mensajes de error formateados para sugerir con fuerza consultas a las tablas del sistema fue muy efectivo para descubrir información del esquema.
    • Con estos pequeños ajustes, se volvió sorprendentemente hábil para encontrar consultas que requieren joins de más de 4 tablas.
  • Experiencia personal usando GPT-4

    • Ya realizó tareas similares usando GPT-4.
    • Verificó la estructura de las tablas con el comando SHOW TABLE de MySQL CLI y generó consultas basadas en esas tablas para mostrar métricas de negocio, como la tasa de abandono del carrito.
    • Comprobó que este método funciona bastante bien.
  • Postura escéptica sobre los sistemas que traducen lenguaje natural a SQL

    • Aunque reconoce el esfuerzo por desarrollar sistemas que traduzcan lenguaje natural a SQL, se muestra escéptico porque la naturaleza fundamental del lenguaje natural y de los modelos es probabilística y poco precisa.
    • Las bases de datos SQL están diseñadas en la mayoría de los casos para procesar información exacta y precisa, y añadir una capa probabilística podría empeorar el problema.
    • Cuestiona si estos intentos realmente son productivos para resolver de forma efectiva las necesidades del mundo real.
  • Interés en productos similares, incluidos startups apoyadas por YC

    • Ha estado siguiendo varios productos similares como Minds DB (YC W20), Buster (YC W24) y DB Pilot, y tiene mucho interés en este espacio.
    • También está buscando este tipo de soluciones.
  • Experiencia con un servicio de reportes basado en duckdb

    • En general funciona bien, pero se topó con algunos problemas:
      • GPT-4 a veces se sale de los ejemplos o del esquema, incluso con una configuración de temperatura baja.
      • El servicio aloja datos genéricos, pero los clientes solicitan generar reportes usando su propio lenguaje de dominio.
      • Depurar prompts de LLM es complicado. Los clientes pueden confundir fácilmente al modelo.
      • Se les proporciona a los clientes una "explicación" de la consulta generada para transparentar qué se usó en la elaboración del reporte.
  • Preocupaciones y explicación sobre cómo funciona RAG

    • Expresa preocupación por el uso del término "train".
    • Dedica mucho tiempo a explicar que RAG no requiere entrenamiento ni fine-tuning, sino solo preparación de datos, chunking y vectorización.
  • Curiosidad sobre el problema de las alucinaciones de los LLM

    • Se pregunta cómo interpretan los LLM conceptos temporales como "ayer" y el problema de que el SQL generado, aunque sea sintácticamente válido, pueda no coincidir con la intención.
    • Especialmente en consultas de agregación como MAX o COUNT, existe el riesgo de producir números incorrectos, y para verificarlo habría que leer directamente el SQL, lo cual contradice el propósito completo.
  • Experiencia compartida usando datasets y tecnología propios

    • Usan una tecnología similar para desarrollar un bot que permita a empleados internos conversar con datasets estructurados.
    • En la práctica funciona hasta cierto punto, pero hay varios desafíos:
      • Hay muchas enumeraciones y tipos de datos específicos del trabajo que no existen en los modelos base, por lo que deben definirse manualmente y agregarse al prompt como contexto.
      • Es difícil manejar preguntas relacionadas con el tiempo.
      • Como los usuarios pueden preguntar cualquier cosa, se necesitan muchos ejemplos de consultas SQL para una sola tabla.
      • Es difícil escalarlo a varias tablas, y se pregunta si existe una forma más eficiente.
      • Usaron el modelo Llama2 70B Gen, pero se pregunta si otros modelos muestran un mejor desempeño para generar consultas SQL.
  • Experiencia en bit.io y reacción de los clientes

    • Hizo un trabajo similar en bit.io y a la gente le gustó.
    • Hay varios artículos sobre lo que descubrieron durante ese trabajo, pero ahora el servicio fue adquirido por Databricks y cerrado.
    • Está dispuesto a responder preguntas siempre que sea posible.