Vanna and Zilliz Cloud Integration
Vanna and Zilliz Cloud integrate to power AI-driven SQL generation, combining Vanna's open-source Python RAG framework for natural language to SQL conversion with Zilliz Cloud's high-performance vector database for efficient retrieval of database schemas, documentation, and query history.
Utiliser cette intégration gratuitementQu’est-ce que Vanna
Vanna est un framework Python RAG (Retrieval-Augmented Generation) open source pour la génération de SQL et les fonctionnalités associées. Il fonctionne en deux étapes simples — entraîner un "modèle" RAG sur vos données (schémas DDL, documentation et requêtes SQL), puis poser des questions qui renverront des requêtes SQL pouvant être configurées pour s’exécuter sur votre base de données. Vanna présente une conception axée sur la sécurité qui empêche le contenu de la base de données d’être transmis aux LLMs sans autorisation explicite, une grande précision liée à la qualité des données d’entraînement et une amélioration continue grâce à l’interaction avec les utilisateurs.
En s’intégrant à Zilliz Cloud (Milvus entièrement géré), Vanna accède à une base de données vectorielle évolutive qui stocke et récupère efficacement les schémas de base de données intégrés, la documentation et les requêtes précédentes, permettant une génération de SQL plus précise et plus efficace — particulièrement précieuse pour les grands ensembles de données complexes nécessitant une génération de requêtes précise.
Avantages de l’intégration Vanna + Zilliz Cloud
- Génération SQL précise grâce au RAG : Zilliz Cloud stocke des schémas DDL intégrés, de la documentation et des exemples de requêtes SQL, permettant à Vanna de récupérer le contexte le plus pertinent pour générer des requêtes SQL précises à partir de questions en langage naturel.
- Conception axée sur la sécurité : Vanna empêche le contenu de la base de données d’être transmis aux LLMs sans autorisation explicite, tandis que Zilliz Cloud fournit un stockage vectoriel sécurisé pour les embeddings des données d’entraînement.
- Amélioration continue : À mesure que de nouvelles requêtes et de nouveaux retours sont générés, ils sont intégrés et stockés dans Zilliz Cloud, améliorant continuellement la précision de génération SQL du système au fil du temps.
- Déploiement flexible : Vanna prend en charge le déploiement auto-hébergé avec Milvus Lite pour le développement local ou Zilliz Cloud pour les déploiements à l’échelle de la production, offrant aux équipes de la flexibilité dans leurs choix d’infrastructure.
Fonctionnement de l’intégration
Vanna sert de framework de génération SQL, fournissant le pipeline RAG qui s’entraîne sur les schémas de base de données (DDL), la documentation et des exemples de requêtes SQL. Il gère le traitement des questions en langage naturel, l’assemblage du contexte à partir des données d’entraînement récupérées, ainsi que la génération de requêtes SQL basée sur un LLM à l’aide de modèles comme GPT-3.5-turbo.
Zilliz Cloud sert de couche de base de données vectorielle via la classe
Milvus_VectorStore, en stockant et en indexant les données d’entraînement intégrées (DDL, documentation et requêtes SQL) pour une recherche rapide par similarité. Lorsqu’un utilisateur pose une question, il récupère les exemples d’entraînement les plus pertinents afin de fournir le contexte nécessaire à la génération SQL.Ensemble, Vanna et Zilliz Cloud créent une solution intelligente de génération SQL : les schémas de base de données, la documentation et les exemples de requêtes sont intégrés et stockés dans Zilliz Cloud pendant l’entraînement. Lorsqu’un utilisateur pose une question en langage naturel, Zilliz Cloud récupère le contexte le plus pertinent, et le LLM de Vanna génère une requête SQL précise sur la base de ce contexte — le système s’améliorant continuellement à mesure que de nouvelles requêtes sont ajoutées aux données d’entraînement.
Guide étape par étape
1. Installer les packages requis
$ pip install "vanna[milvus,openai]"2. Configurer l’environnement et définir la classe VannaMilvus
Définissez la clé d’API OpenAI et définissez une nouvelle classe qui combine les capacités du magasin vectoriel Milvus et du chat OpenAI :
import os os.environ["OPENAI_API_KEY"] = "sk-***********" from pymilvus import MilvusClient, model from vanna.milvus import Milvus_VectorStore from vanna.openai import OpenAI_Chat class VannaMilvus(Milvus_VectorStore, OpenAI_Chat): def __init__(self, config=None): Milvus_VectorStore.__init__(self, config=config) OpenAI_Chat.__init__(self, config=config)Concernant l’argument de
MilvusClient: définir leuricomme un fichier local, par exemple./milvus.db, est la méthode la plus pratique, car cela utilise automatiquement Milvus Lite pour stocker toutes les données dans ce fichier. Si vous avez un grand volume de données, vous pouvez configurer un serveur Milvus plus performant sur Docker ou Kubernetes. Si vous souhaitez utiliser Zilliz Cloud, le service cloud entièrement géré pour Milvus, ajustez leuriet letoken, qui correspondent au Public Endpoint et à l’API Key dans Zilliz Cloud.3. Initialiser VannaMilvus et se connecter à une base de données
Initialisez la classe VannaMilvus avec des paramètres de configuration et connectez-vous à une base de données SQLite :
milvus_uri = "./milvus_vanna.db" milvus_client = MilvusClient(uri=milvus_uri) vn_milvus = VannaMilvus( config={ "api_key": os.getenv("OPENAI_API_KEY"), "model": "gpt-3.5-turbo", "milvus_client": milvus_client, "embedding_function": model.DefaultEmbeddingFunction(), "n_results": 2, } )Créez un exemple de base de données SQLite avec des tables et connectez Vanna à celle-ci :
import sqlite3 sqlite_path = "./my-database.sqlite" sql_connect = sqlite3.connect(sqlite_path) c = sql_connect.cursor() init_sqls = """ CREATE TABLE IF NOT EXISTS Customer ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT NOT NULL, Company TEXT NOT NULL, City TEXT NOT NULL, Phone TEXT NOT NULL ); CREATE TABLE IF NOT EXISTS Company ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT NOT NULL, Industry TEXT NOT NULL, Location TEXT NOT NULL, EmployeeCount INTEGER NOT NULL ); CREATE TABLE IF NOT EXISTS User ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Username TEXT NOT NULL UNIQUE, Email TEXT NOT NULL UNIQUE ); INSERT INTO Customer (Name, Company, City, Phone) VALUES ('John Doe', 'ABC Corp', 'New York', '123-456-7890'); INSERT INTO Customer (Name, Company, City, Phone) VALUES ('Jane Smith', 'XYZ Inc', 'Los Angeles', '098-765-4321'); INSERT INTO Company (Name, Industry, Location, EmployeeCount) VALUES ('ABC Corp', 'cutting-edge technology', 'New York', 100); INSERT INTO User (Username, Email) VALUES ('johndoe123', 'johndoe123@example.com'); """ for sql in init_sqls.split(";"): c.execute(sql) sql_connect.commit() vn_milvus.connect_to_sqlite(sqlite_path)4. Entraîner avec des données
Entraînez le modèle sur les données DDL, la documentation et les requêtes SQL :
existing_training_data = vn_milvus.get_training_data() if len(existing_training_data) > 0: for _, training_data in existing_training_data.iterrows(): vn_milvus.remove_training_data(training_data["id"]) df_ddl = vn_milvus.run_sql("SELECT type, sql FROM sqlite_master WHERE sql is not null") for ddl in df_ddl["sql"].to_list(): vn_milvus.train(ddl=ddl) vn_milvus.train( documentation="ABC Corp specializes in cutting-edge technology solutions and innovation." ) vn_milvus.train( documentation="XYZ Inc is a global leader in manufacturing and supply chain management." ) vn_milvus.train(sql="SELECT * FROM Customer WHERE Name = 'John Doe'")5. Générer et exécuter des requêtes SQL
Posez des questions en langage naturel et obtenez des requêtes SQL :
sql = vn_milvus.generate_sql("what is the phone number of John Doe?") vn_milvus.run_sql(sql)Essayez une question plus complexe qui nécessite le contexte de la documentation :
sql = vn_milvus.generate_sql("which customer works for a manufacturing corporation?") vn_milvus.run_sql(sql)6. Nettoyage
Déconnectez et supprimez les ressources :
sql_connect.close() milvus_client.close() os.remove(sqlite_path) if os.path.exists(milvus_uri): os.remove(milvus_uri)En savoir plus
- Écrire du SQL avec Vanna et Milvus — Tutoriel officiel de Milvus pour la génération SQL avec Vanna
- Site officiel de Vanna — Site officiel de Vanna
- Dépôt GitHub de Vanna — Code source de Vanna et ressources communautaires
- Comment créer un chatbot d’IA avec Milvus et Towhee — Blog de Zilliz sur la création de chatbots d’IA
- Documentation sur les embeddings de Milvus — Documentation de Milvus sur les fonctions d’embedding


