Allgemeine Einführung
Vanna ist ein vom MIT lizenziertes Open-Source-Python-Framework, das sich auf die Generierung von SQL-Abfragen durch RAG-Techniken (Retrieval Augmented Generation) konzentriert. Benutzer können RAG-Modelle trainieren, sie auf ihre eigenen Daten anwenden und dann Fragen stellen, woraufhin Vanna entsprechende SQL-Abfragen zurückgibt. Diese Abfragen können automatisch in der Datenbank ausgeführt werden, wodurch komplexe Datenbankoperationen vereinfacht werden.Vanna unterstützt eine Vielzahl von Large Language Models (LLMs) und Vektorspeicherlösungen für eine Vielzahl von Datenbanken wie PostgreSQL, MySQL, Snowflake und andere.
Funktionsliste
- SQL-GenerierungGenerieren Sie präzise SQL-Abfragen in natürlicher Sprache.
- RAG-ModellschulungBenutzer können ihre eigenen RAG-Modelle trainieren, um sie an spezifische Daten anzupassen.
- Multi-LLM-Unterstützung: Kompatibel mit OpenAI, Anthropic, HuggingFace und vielen anderen LLMs.
- Unterstützung für Multi-Vektor-SpeicherUnterstützung für AzureSearch, PineCone, ChromaDB und andere Vektorspeicher.
- Multi-Datenbank-UnterstützungKompatibel mit PostgreSQL, MySQL, Snowflake und vielen anderen Datenbanken.
- BenutzerBietet Jupyter Notebook, Streamlit, Flask und andere Benutzerschnittstellen.
Hilfe verwenden
Ablauf der Installation
- Installation von VannaVanna mit pip installieren.
Pip-Installation von Vanna
- Installation der optionalen Pakete: Installieren Sie bei Bedarf weitere optionale Pakete, Einzelheiten entnehmen Sie bitte der Dokumentation.
Verwendung Prozess
- Vanna einführenImportieren Sie die entsprechenden Module entsprechend der verwendeten LLM- und Vektordatenbank.
from vanna.openai_chat import OpenAI_Chat
from vanna.chromadb import ChromaDB_VectorStore
class MyVanna(ChromaDB_VectorStore, OpenAI_Chat): def __init__(self, config=None): __init__(self, config=None)
def __init__(self, config=None):: __init__(self, config=None): __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-...'})
- Training des RAG-Modells: Führen Sie bei Bedarf Trainingsbefehle aus.
vn.train(ddl_statements)
- Erzeugen von SQL-AbfragenStellen Sie eine Frage und Vanna wird die entsprechende SQL-Abfrage zurückgeben.
sql_query = vn.ask("Geben Sie mir die Namen aller meiner Kunden")
Detaillierte Funktionsweise
- SQL-GenerierungBenutzer können eine Frage in natürlicher Sprache eingeben und Vanna wird automatisch eine SQL-Abfrage generieren. Geben Sie zum Beispiel ein: "Geben Sie mir die Namen aller meiner Kunden" und Vanna wird die entsprechende SQL-Abfrage generieren.
- RAG-ModellschulungBenutzer können RAG-Modelle auf der Grundlage ihrer Daten trainieren, um die Genauigkeit der SQL-Generierung zu verbessern. Der Trainingsprozess beinhaltet die Bereitstellung von DDL-Anweisungen, auf deren Grundlage Vanna die Struktur und Beziehungen der Datenbank versteht.
- Multi-LLM-UnterstützungVanna ist mit einer breiten Palette von großen Sprachmodellen kompatibel, so dass der Benutzer je nach Bedarf das geeignete Modell für die SQL-Generierung auswählen kann.
- Unterstützung für Multi-Vektor-SpeicherVanna unterstützt eine Vielzahl von Vektorspeicherlösungen.
- Multi-Datenbank-UnterstützungVanna ist mit einer Vielzahl von Datenbanken kompatibel und kann von den Benutzern je nach Datenbanktyp konfiguriert und verwendet werden.
- BenutzerVanna bietet eine Vielzahl von Benutzeroberflächen, die Benutzer können Jupyter Notebook, Streamlit, Flask und andere Schnittstellen wählen, um bequem zu arbeiten.
Beispielcode (Rechnen)
Nachfolgend finden Sie einen vollständigen Beispielcode, der zeigt, wie Sie mit Vanna SQL-Abfragen erstellen können:
from vanna.openai_chat import OpenAI_Chat
from vanna.chromadb import ChromaDB_VectorStore
class MyVanna(ChromaDB_VectorStore, OpenAI_Chat): def __init__(self, config=None): __init__(self, config=None)
def __init__(self, config=None):: __init__(self, config=None): __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-...'})
# Training des RAG-Modells
vn.train(ddl_statements)
# Erzeugen einer SQL-Abfrage
sql_query = vn.ask("Gib mir die Namen aller meiner Kunden")
print(sql_query)
Was ist die Funktion RAG in der SQL-Generierung?
Vanna freut sich, eine bahnbrechende Funktion in der SQL-Generierung einzuführen: die Funktion RAG (Retrieval Enhanced Generation). Diese neue optionale experimentelle Funktion wurde entwickelt, um die Konsistenz und den Determinismus der SQL-Generierung zu verbessern und so den vielen Anfragen unserer Benutzer gerecht zu werden.
Was ist die Funktion RAG?
Die Funktions-RAG wandelt herkömmliche Frage-SQL-Trainingspaare in aufrufbare Vorlagen (auch Funktionen/Tools genannt) um. Das Large Language Model (LLM) ruft dann diese Vorlagen auf, um SQL-Abfragen und den zugehörigen Nachbearbeitungscode (z. B. Diagrammcode) zu erzeugen. Entscheidend ist, dass das Large Language Model (LLM) bei der Verwendung der Function RAG nur die zu verwendenden SQL-Vorlagen und alle erforderlichen Parameter bestimmt. Dieser Ansatz gewährleistet nicht nur eine konsistentere Ausgabe, sondern beschleunigt auch den SQL-Generierungsprozess erheblich.
Wir veröffentlichen die Function RAG API unter einer anderen Domain und einem anderen Markennamen, um sie von den zentralen Open-Source-Python-Paketen zu unterscheiden.
Hauptmerkmale der Funktion RAG
- Schablonenbasierte SQL-GenerierungFunktion RAG: Durch die Umwandlung von Trainingspaaren in Vorlagen stellt die Funktion RAG sicher, dass die generierte SQL sowohl genau als auch relevant für die Anfrage des Benutzers ist.
- Erhöhte SicherheitFunktion RAG reduziert Hint-Injection und Hint-Escape und stellt sicher, dass der SQL-Generierungsprozess vor externer Manipulation geschützt ist.
- Benutzerspezifische AbfragenBenutzer können nun Informationen wie Benutzer-IDs in Abfragen weitergeben, ohne dass die Gefahr besteht, dass diese Daten überschrieben werden. So können personalisierte Fragen wie "Was sind meine letzten 10 Aufträge?" sicher und effizient ausgeführt werden. .
- Integrierte Chart-Code-GenerierungZusätzlich zu SQL übernimmt Function RAG auch die Generierung von Diagrammcode, so dass SQL und der entsprechende Visualisierungscode in einer einzigen Anfrage generiert werden können.
- Mehrsprachige UnterstützungDiese Funktionalität ist über die GraphQL-API zugänglich, so dass sie nicht nur von Python, sondern von jeder Programmiersprache aus genutzt werden kann. Dies eröffnet die Möglichkeit der Integration in verschiedene Backends, einschließlich Frameworks wie Ruby on Rails, .
praktische Anwendung
Hier sind zum Beispiel einige Beispielfunktionen:
Wenn Sie eine Frage stellen.vn.get_function(frage=...)<span> </span>
Die am besten geeignete Funktion wird gefunden und die erforderlichen Parameter werden mit Hilfe des Large Language Model (LLM) ausgefüllt.
Um die Ausgabe auf einen bestimmten Benutzer zu beschränken, können Sie die vn.get_function(question=... , additional_data={"user_id": ...})<span> </span>
Methoden. Damit wird sichergestellt, dass die Benutzer_id<span> </span>
wird deterministisch gesetzt.
Um eine neue Funktion zu erstellen, wenn Sie dies manuell tun, können Sie die vn.create_function(...)<span> </span>
Methode, oder Sie können die integrierte Webanwendung verwenden, um diese Aktion durchzuführen.
Manuell erstellt
vn.create_function(question=... , sql=... , plotly_code=...)
Erstellung von Webanwendungsfunktionen
Die Webanwendung verfügt über eine neue Schaltfläche, mit der Sie wählen können, ob Sie die Ergebnisse als rohe Frage-SQL-Paare oder als Funktionen trainieren möchten. die Funktion RAG extrahiert automatisch das, was wie ein Parameter aussieht, aus der Frage und macht es als Funktionsparameter verfügbar.
Wann zu verwenden
Wenn Sie Varianten haben, bei denen die Endbenutzer ähnliche Fragen stellen, und Sie möchten, dass die Benutzer nur bestimmte Arten von Analysen ausführen können, die von Ihrem technischen Team manuell genehmigt wurden, dann ist die Funktion RAG eine hervorragende Möglichkeit, um sicherzustellen, dass die Benutzer nur genehmigte Analysen ausführen können.
Die Beschränkung auf zugelassene Analysen gibt den Endnutzern die Gewissheit, dass sie die richtigen Daten sehen und sie auf die richtige Weise betrachten. Wenn Sie es in eine SaaS-Anwendung integrieren, können Sie es internen Geschäftsanwendern oder Endanwendern zur Verfügung stellen.
Jeder Benutzer kann von den Geschwindigkeitsverbesserungen profitieren, die die Funktion RAG bietet. Für Datenanalysten kann es jedoch sinnvoll sein, auf den Rest der SQL-Generierungsfunktionalität von Vanna zurückzugreifen, wenn sie neuartige Analysen durchführen, die nicht in großen Mengen von Trainingsdaten vorhanden sind. Wenn Sie eine von Vanna gehostete Vektordatenbank verwenden, wird die Fallback-Funktion automatisch in die integrierte Webanwendung mit dem Parameter function_generation=True<span> </span>
.
GraphQL-API-Integration
Zusätzlich zum Python-Paket ist es möglich, Function RAG über die GraphQL-API aufzurufen, was die Verwendung in anderen Sprachen und Frameworks ermöglicht. Die häufigste Anfrage, die wir erhalten, ist die Möglichkeit, sie in Ruby on Rails zu verwenden.
Benutzerfreundlichkeit
Function RAG ist als Teil von Vanna's Free, Premium und Enterprise Edition verfügbar. Sie finden die Function RAG in der Vanna v0.6.0<span> </span>
und spätere Versionen zugreifen.