Build5Nines.SharpVector
ist eine speicherinterne Vektordatenbankbibliothek, die für .NET-Anwendungen entwickelt wurde. Es ermöglicht Ihnen das Speichern, Suchen und Verwalten von Textdaten mithilfe von Vektordarstellungen. Die Bibliothek ist anpassbar und erweiterbar und ermöglicht die Unterstützung verschiedener Vektorvergleichsmethoden, Vorverarbeitungstechniken und Vektorisierungsstrategien.
Vektordatenbanken werden mit generativen KI-Lösungen verwendet, die das LLM (Large Language Model) um die Möglichkeit erweitern, zusätzliche Kontextdaten mit der KI-Eingabeaufforderung unter Verwendung des RAG-Entwurfsmusters (Retrieval-Augmented Generation) zu laden.
Während es viele große Datenbanken gibt, die zum Erstellen von Vektordatenbanken verwendet werden können (wie Azure CosmosDB, PostgreSQL mit pgvector, Azure AI Search, Elasticsearch und mehr), gibt es nicht viele Optionen für eine einfache Vektordatenbank, die eingebettet werden kann jede .NET-Anwendung.
Das Build5Nines SharpVector-Projekt bietet eine kompakte In-Memory-Vektordatenbank zur Verwendung in jeder .NET-Anwendung.
„Für die In-Memory-Vektordatenbank verwenden wir Build5Nines.SharpVector, ein hervorragendes Open-Source-Projekt von Chris Pietschmann. SharpVector erleichtert das Speichern und Abrufen vektorisierter Daten und ist daher die ideale Wahl für unsere Beispiel-RAG-Implementierung.“
— Tulika Chaudharie, Hauptproduktmanagerin bei Microsoft für Azure App Service
Eine In-Memory-Vektordatenbank wie Build5Nines.SharpVector
bietet mehrere Vorteile gegenüber einem herkömmlichen Vektordatenbankserver, insbesondere in Szenarien, die hohe Leistung, geringe Latenz und effiziente Ressourcennutzung erfordern.
Hier ist eine Liste mehrerer Verwendungsszenarien, in denen Build5Nines.SharpVector
nützlich sein kann:
Hier sind ein paar hilfreiche Tutorial-Links mit zusätzlicher Dokumentation und Beispielen zur Verwendung von Build5Nines.SharpVector
in Ihren eigenen Projekten:
Die Build5Nines.SharpVector
-Bibliothek ist als Nuget-Paket verfügbar und kann problemlos in Ihre .NET-Projekte integriert werden:
dotnet add package Build5Nines.SharpVector
Sie können es hier auf Nuget.org ansehen: https://www.nuget.org/packages/Build5Nines.SharpVector/
Für maximale Kompatibilität wird die Build5Nines.SharpVector
-Bibliothek ohne externe Abhängigkeiten außer den in .NET verfügbaren erstellt und ist für die Ausrichtung auf .NET 6 und höher konzipiert.
Wie Sie anhand des folgenden Beispiels für die Verwendung der Build5Nines.SharpVector
-Bibliothek sehen können, können Sie mit nur wenigen Codezeilen eine speicherinterne Vektordatenbank in jede .NET-Anwendung einbetten:
// Create a Vector Database with metadata of type string
var vdb = new BasicMemoryVectorDatabase ( ) ;
// The Metadata is declared using generics, so you can store whatever data you need there.
// Load Vector Database with some sample text data
// Text is the movie description, and Metadata is the movie title with release year in this example
vdb . AddText ( " Iron Man (2008) is a Marvel Studios action, adventure, and sci-fi movie about Tony Stark (Robert Downey Jr.), a billionaire inventor and weapons developer who is kidnapped by terrorists and forced to build a weapon. Instead, Tony uses his ingenuity to build a high-tech suit of armor and escape, becoming the superhero Iron Man. He then returns to the United States to refine the suit and use it to fight crime and terrorism. " , " Iron Man (2008) " ) ;
vdb . AddText ( " The Lion King is a 1994 Disney animated film about a young lion cub named Simba who is the heir to the throne of an African savanna. " , " The Lion King (1994) " ) ;
vdb . AddText ( " Aladdin is a 2019 live-action Disney adaptation of the 1992 animated classic of the same name about a street urchin who finds a magic lamp and uses a genie's wishes to become a prince so he can marry Princess Jasmine. " , " Alladin (2019) " ) ;
vdb . AddText ( " The Little Mermaid is a 2023 live-action adaptation of Disney's 1989 animated film of the same name. The movie is about Ariel, the youngest of King Triton's daughters, who is fascinated by the human world and falls in love with Prince Eric. " , " The Little Mermaid " ) ;
vdb . AddText ( " Frozen is a 2013 Disney movie about a fearless optimist named Anna who sets off on a journey to find her sister Elsa, whose icy powers have trapped their kingdom in eternal winter. " , " Frozen (2013) " ) ;
// Perform a Vector Search
var result = vdb . Search ( newPrompt , pageCount : 5 ) ; // return the first 5 results
if ( result . HasResults )
{
Console . WriteLine ( " Similar Text Found: " ) ;
foreach ( var item in result . Texts )
{
Console . WriteLine ( item . Metadata ) ;
Console . WriteLine ( item . Text ) ;
}
}
Die Build5Nines.SharpVector.BasicMemoryVectorDatabase
-Klasse verwendet eine Bag of Words-Vektorisierungsstrategie mit Kosinusähnlichkeit, einen Wörterbuch-Vokabelspeicher und einen einfachen Textpräprozessor. Die Bibliothek enthält generische Klassen und zahlreiche Erweiterungspunkte, um bei Bedarf benutzerdefinierte Vektordatenbankimplementierungen damit zu erstellen.
Außerdem kann der TextDataLoader
verwendet werden, um das Laden von Textdokumenten in die Vector-Datenbank zu unterstützen, wobei mehrere verschiedene Text-Chunking-Methoden unterstützt werden:
/// Paragraph Chunking
var loader = new TextDataLoader < int , string > ( vdb ) ;
loader . AddDocument ( document , new TextChunkingOptions < string >
{
Method = TextChunkingMethod . Paragraph ,
RetrieveMetadata = ( chunk ) => {
// add some basic metadata since this can't be null
return " { chuckSize: " " + chunk . Length + " " } " ;
}
} ) ;
/// Sentence Chunking
var loader = new TextDataLoader < int , string > ( vdb ) ;
loader . AddDocument ( document , new TextChunkingOptions < string >
{
Method = TextChunkingMethod . Sentence ,
RetrieveMetadata = ( chunk ) => {
// add some basic metadata since this can't be null
return " { chuckSize: " " + chunk . Length + " " } " ;
}
} ) ;
/// Fixed Length Chunking
var loader = new TextDataLoader < int , string > ( vdb ) ;
loader . AddDocument ( document , new TextChunkingOptions < string >
{
Method = TextChunkingMethod . FixedLength ,
ChunkSize = 150 ,
RetrieveMetadata = ( chunk ) => {
// add some basic metadata since this can't be null
return " { chuckSize: " " + chunk . Length + " " } " ;
}
} ) ;
RetrieveMetadata
akzeptiert eine Lambda-Funktion, mit der sich die Metadaten für die Chucks beim Laden einfach definieren lassen.
Die Beispielkonsolen-App in diesem Repo zeigt eine Beispielverwendung von Build5Nines.SharpVector.dll
Es lädt eine Liste mit Filmtiteln und Beschreibungen aus einer JSON-Datei und ermöglicht es dem Benutzer dann, Eingabeaufforderungen einzugeben, um die Datenbank zu durchsuchen und die besten Übereinstimmungen zurückzugeben.
Hier ist ein Screenshot der laufenden Testkonsolen-App:
BasicMemoryVectorDatabase
unterstützt jetzt sowohl synchrone als auch asynchrone Vorgänge.Async
-Versionen einwandfrei funktionieren.Async
Version von Klassen hinzugefügt, um Multithreading zu unterstützen.AddText()
und .AddTextAsync()
sind keine Metadaten mehr erforderlich.IVectorSimilarityCalculator
zu IVectorComparer
und CosineVectorSimilarityCalculatorAsync
zu CosineSimilarityVectorComparerAsync
EuclideanDistanceVectorComparerAsync
hinzufügenMemoryVectorDatabase
, sodass kein ungenutzter generischer TId
Typ mehr erforderlich istVectorSimilarity
und Similarity
in VectorComparison
umTextDataLoader
-Klasse hinzu, um beim Laden von Dokumenten in die Vektordatenbank Unterstützung für verschiedene Methoden der Textaufteilung bereitzustellen.BasicMemoryVectorDatabase
-Klasse als grundlegende Vektordatenbank-Implementierung, die eine Bag of Words-Vektorisierungsstrategie mit Kosinusähnlichkeit, einen Wörterbuch-Vokabularspeicher und einen einfachen Textpräprozessor verwendet.VectorTextResultItem.Similarity
hinzugefügt, sodass verbrauchender Code die Ähnlichkeit des Texts in den Vektorsuchergebnissen prüfen kann..Search
Methode, um das Paging von Suchergebnissen und die Schwellenwertunterstützung für den Ähnlichkeitsvergleich zu unterstützenDas Build5Nines SharpVector-Projekt wird von Chris Pietschmann, Microsoft MVP und HashiCorp-Botschafter, betreut.