Vanna : Utilisation des techniques RAG pour générer des requêtes SQL précises à partir de texte

Derniers outils d'IAMise à jour il y a 6 mois Sharenet.ai
1.2K 0
吐司AI

Introduction générale

Vanna est un framework Python open source sous licence MIT qui permet de générer des requêtes SQL à l'aide de techniques RAG (Retrieval Augmented Generation). Les utilisateurs peuvent former des modèles RAG, les appliquer à leurs propres données, puis poser des questions, et Vanna renverra les requêtes SQL correspondantes. Ces requêtes peuvent être exécutées automatiquement dans la base de données, ce qui simplifie les opérations de base de données complexes. Vanna prend en charge une variété de grands modèles de langage (LLM) et de solutions de stockage vectoriel pour une variété de bases de données, telles que PostgreSQL, MySQL, Snowflake, et d'autres.

Vanna:利用RAG技术将文本生成精准SQL查询

 

Vanna:利用RAG技术将文本生成精准SQL查询

 

Liste des fonctions

  • Génération SQLLes requêtes SQL : Générer des requêtes SQL précises en utilisant le langage naturel.
  • Formation au modèle RAGLes utilisateurs peuvent former leurs propres modèles RAG pour les adapter à des données spécifiques.
  • Support multi-LLMCompatible avec OpenAI, Anthropic, HuggingFace et beaucoup d'autres LLMs.
  • Prise en charge du stockage multi-vecteurSupport pour AzureSearch, PineCone, ChromaDB et d'autres magasins de vecteurs.
  • Prise en charge de plusieurs bases de donnéesCompatible avec PostgreSQL, MySQL, Snowflake et de nombreuses autres bases de données.
  • utilisateur: Fournit Jupyter Notebook, Streamlit, Flask et d'autres interfaces utilisateur.

 

Utiliser l'aide

Processus d'installation

  1. Installation de VannaInstallation de Vanna : Installer Vanna à l'aide de pip.
   pip install vanna
  1. Installation de paquets optionnelsInstaller d'autres paquets optionnels si nécessaire, se référer à la documentation pour plus de détails.

Processus d'utilisation

  1. Importation VannaImporter les modules appropriés en fonction du LLM et de la base de données vectorielle utilisée.
   from vanna.openai_chat import OpenAI_Chat
from vanna.chromadb import ChromaDB_VectorStore
class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):
def __init__(self, config=None):
ChromaDB_VectorStore.__init__(self, config=config)
OpenAI_Chat.__init__(self, config=config)
vn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})
  1. Formation au modèle RAGLes commandes de formation : Exécutez les commandes de formation selon les besoins.
   vn.train(ddl_statements)
  1. Générer des requêtes SQLVanna vous renverra la requête SQL appropriée.
   sql_query = vn.ask("给我所有客户的名字")

Fonctionnement détaillé

  • Génération SQLLes utilisateurs peuvent saisir une question en langage naturel et Vanna génère automatiquement une requête SQL. Par exemple, tapez "Donnez-moi les noms de tous mes clients" et Vanna générera la requête SQL correspondante.
  • Formation au modèle RAGLes utilisateurs peuvent former les modèles RAG sur la base de leurs données afin d'améliorer la précision de la génération SQL. Le processus de formation consiste à fournir des déclarations DDL sur la base desquelles Vanna comprendra la structure et les relations de la base de données.
  • Support multi-LLMVanna est compatible avec une large gamme de modèles de langage, ce qui permet aux utilisateurs de sélectionner le modèle approprié pour la génération de SQL en fonction de leurs besoins.
  • Prise en charge du stockage multi-vecteurVanna prend en charge une variété de solutions de stockage vectoriel.
  • Prise en charge de plusieurs bases de donnéesVanna est compatible avec une large gamme de bases de données et peut être configuré et utilisé par les utilisateurs en fonction de leur type de base de données.
  • utilisateurVanna fournit une variété d'interfaces utilisateur, les utilisateurs peuvent choisir Jupyter Notebook, Streamlit, Flask et d'autres interfaces pour travailler de manière pratique.

exemple de code (informatique)

Vous trouverez ci-dessous un exemple de code complet montrant comment générer des requêtes SQL à l'aide de Vanna :

from vanna.openai_chat import OpenAI_Chat
from vanna.chromadb import ChromaDB_VectorStore
class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):
def __init__(self, config=None):
ChromaDB_VectorStore.__init__(self, config=config)
OpenAI_Chat.__init__(self, config=config)
vn = MyVanna(config={'api_key': 'sk-...', 'model': 'gpt-4-...'})
# 训练RAG模型
vn.train(ddl_statements)
# 生成SQL查询
sql_query = vn.ask("给我所有客户的名字")
print(sql_query)

 

Qu'est-ce que la fonction RAG dans la génération SQL ?

Vanna a le plaisir d'introduire une fonctionnalité révolutionnaire dans la génération SQL : la fonction RAG (Retrieval Enhanced Generation). Cette nouvelle fonctionnalité expérimentale facultative est conçue pour améliorer la cohérence et le déterminisme de la génération SQL afin de répondre aux nombreuses demandes de nos utilisateurs.

Qu'est-ce que la fonction RAG ?

Le RAG des fonctions convertit les paires traditionnelles de formation Question-SQL en modèles appelables (également appelés fonctions/outils). Le modèle de langage étendu (LLM) appelle ensuite ces modèles pour générer des requêtes SQL et tout code de post-traitement associé (par exemple, code de représentation graphique). Il est important de noter que lors de l'utilisation du Function RAG, le Large Language Model (LLM) ne détermine que les modèles SQL à utiliser et tous les paramètres à fournir. Cette approche permet non seulement d'obtenir des résultats plus cohérents, mais aussi d'accélérer considérablement le processus de génération SQL.

Nous publions l'API Function RAG sous un domaine et une marque différents afin de la distinguer des principaux packages Python open source.

Caractéristiques principales de Function RAG

  • Génération de SQL à partir de modèlesEn convertissant les paires de formation en modèles, la fonction RAG garantit que le code SQL généré est à la fois précis et pertinent pour la requête de l'utilisateur.
  • Sécurité renforcéeLa fonction RAG réduit l'injection et l'échappement d'indices, garantissant ainsi que le processus de génération SQL est protégé contre les manipulations externes.
  • Requêtes spécifiques à l'utilisateurLes utilisateurs peuvent désormais transmettre des informations telles que les identifiants dans les requêtes sans risque d'écrasement de ces données. Cela permet d'exécuter de manière sûre et efficace des questions personnalisées telles que "Quelles sont mes 10 dernières commandes ? .
  • Génération intégrée de codes graphiquesEn plus de SQL, Function RAG prend en charge la génération du code graphique, ce qui permet de générer SQL et le code de visualisation correspondant en une seule demande.
  • Prise en charge multilingueCette fonctionnalité est accessible via l'API GraphQL, ce qui permet de l'utiliser non seulement à partir de Python, mais aussi à partir de n'importe quel langage de programmation. Cela ouvre la possibilité d'une intégration dans différents backends, y compris des frameworks tels que Ruby on Rails, .

application pratique

Voici, par exemple, quelques exemples de fonctions : Vanna:利用RAG技术将文本生成精准SQL查询

Lorsque vous posez une question.vn.get_function(question=...)<span> </span> La fonction la plus appropriée sera trouvée et les paramètres nécessaires seront remplis à l'aide du Grand Modèle de Langage (LLM). Vanna:利用RAG技术将文本生成精准SQL查询

Pour limiter l'émission à un utilisateur spécifique, vous pouvez utiliser l'option vn.get_function(question=..., additional_data={"user_id": ...})<span> </span> Les méthodes. Cela permettra de s'assurer que les user_id<span> </span> est fixé de manière déterministe.

Pour créer une nouvelle fonction, si vous le faites manuellement, vous pouvez utiliser la fonction vn.create_function(...)<span> </span> ou vous pouvez utiliser l'application web intégrée pour effectuer cette action.

Créé manuellement

vn.create_function(question=..., sql=..., plotly_code=...)

Création de fonctions pour les applications Web

L'application web dispose d'un nouveau bouton qui vous permet de choisir d'entraîner les résultats sous forme de paires Question-SQL brutes ou sous forme de fonctions. La fonction RAG extrait automatiquement ce qui ressemble à un paramètre de la question et le rend disponible en tant que paramètre de la fonction.

Vanna:利用RAG技术将文本生成精准SQL查询

Quand utiliser

Si vous avez des variantes pour lesquelles les utilisateurs finaux posent des questions similaires et que vous souhaitez que les utilisateurs ne puissent exécuter que certains types d'analyses approuvées manuellement par votre équipe d'ingénieurs, la fonction RAG est un excellent moyen de s'assurer que les utilisateurs ne peuvent exécuter que des analyses approuvées.

Restreindre l'accès aux analyses approuvées permet aux utilisateurs finaux de s'assurer qu'ils voient les bonnes données et qu'ils les visualisent de la bonne manière. Si vous l'intégrez dans une application SaaS, vous pouvez la mettre à la disposition des utilisateurs internes ou des utilisateurs finaux.

Tout utilisateur peut bénéficier des améliorations de vitesse offertes par Function RAG. Cependant, pour les analystes de données, vous pouvez souhaiter vous rabattre sur le reste de la fonctionnalité de génération SQL de Vanna lorsque vous effectuez de nouvelles analyses qui ne sont pas présentes dans de grandes quantités de données d'entraînement. Si vous utilisez une base de données vectorielle hébergée par Vanna, la fonctionnalité de repli est automatiquement incluse dans l'application web intégrée avec le paramètre function_generation=True<span> </span>.

Intégration de l'API GraphQL

En plus du package Python, il est possible d'appeler Function RAG en utilisant l'API GraphQL, ce qui permet de l'utiliser dans d'autres langages et frameworks. La demande la plus fréquente que nous recevons est la possibilité de l'utiliser dans Ruby on Rails.

l'utilisabilité

Function RAG est disponible dans le cadre des plans Free, Premium et Enterprise Edition de Vanna. Vous pouvez trouver le Function RAG dans la section Vanna v0.6.0<span> </span> et les versions ultérieures pour y accéder.

© déclaration de droits d'auteur
AiPPT

Articles connexes

Pas de commentaires

aucun
Pas de commentaires...