Build5Nines.SharpVector
est une bibliothèque de bases de données vectorielles en mémoire conçue pour les applications .NET. Il vous permet de stocker, rechercher et gérer des données textuelles à l'aide de représentations vectorielles. La bibliothèque est personnalisable et extensible, permettant la prise en charge de différentes méthodes de comparaison de vecteurs, techniques de prétraitement et stratégies de vectorisation.
Les bases de données vectorielles sont utilisées avec des solutions d'IA générative augmentant le LLM (Large Language Model) avec la possibilité de charger des données contextuelles supplémentaires avec l'invite d'IA à l'aide du modèle de conception RAG (Retrieval-Augmented Generation).
Bien qu'il existe de nombreuses bases de données volumineuses pouvant être utilisées pour créer des bases de données vectorielles (comme Azure CosmosDB, PostgreSQL avec pgvector, Azure AI Search, Elasticsearch, etc.), il n'existe pas beaucoup d'options pour une base de données vectorielle légère pouvant être intégrée dans n’importe quelle application .NET.
Le projet Build5Nines SharpVector fournit une base de données vectorielles légère en mémoire à utiliser dans n'importe quelle application .NET.
"Pour la base de données vectorielles en mémoire, nous utilisons Build5Nines.SharpVector, un excellent projet open source de Chris Pietschmann. SharpVector facilite le stockage et la récupération de données vectorisées, ce qui en fait un choix idéal pour notre exemple d'implémentation RAG."
— Tulika Chaudharie, chef de produit principal chez Microsoft pour Azure App Service
Une base de données vectorielle en mémoire telle que Build5Nines.SharpVector
offre plusieurs avantages par rapport à un serveur de base de données vectorielle traditionnel, en particulier dans les scénarios qui peuvent exiger des performances élevées, une faible latence et une utilisation efficace des ressources.
Voici une liste de plusieurs scénarios d'utilisation dans lesquels Build5Nines.SharpVector
peut être utile :
Voici quelques liens de didacticiels utiles avec une documentation supplémentaire et des exemples sur l'utilisation Build5Nines.SharpVector
dans vos propres projets :
La bibliothèque Build5Nines.SharpVector
est disponible sous forme de package Nuget à inclure facilement dans vos projets .NET :
dotnet add package Build5Nines.SharpVector
Vous pouvez le consulter sur Nuget.org ici : https://www.nuget.org/packages/Build5Nines.SharpVector/
Pour une compatibilité maximale, la bibliothèque Build5Nines.SharpVector
est construite sans dépendances externes autres que celles disponibles sur .NET, et elle est conçue pour cibler .NET 6 et versions ultérieures.
Comme vous pouvez le voir avec l'exemple suivant d'utilisation de la bibliothèque Build5Nines.SharpVector
, en seulement quelques lignes de code, vous pouvez intégrer une base de données vectorielles en mémoire dans n'importe quelle application .NET :
// 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 ) ;
}
}
La classe Build5Nines.SharpVector.BasicMemoryVectorDatabase
utilise une stratégie de vectorisation Bag of Words, avec une similarité cosinus, un magasin de vocabulaire de dictionnaire et un préprocesseur de texte de base. La bibliothèque contient des classes génériques et de nombreux points d'extension pour créer des implémentations de bases de données vectorielles personnalisées si nécessaire.
En outre, TextDataLoader
peut être utilisé pour aider à charger des documents texte dans la base de données vectorielles avec la prise en charge de plusieurs méthodes de segmentation de texte différentes :
/// 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 + " " } " ;
}
} ) ;
Le RetrieveMetadata
accepte une fonction lambda qui peut être utilisée pour définir facilement les métadonnées des mandrins au fur et à mesure de leur chargement.
L'exemple d'application console dans ce référentiel montre un exemple d'utilisation de Build5Nines.SharpVector.dll
Il charge une liste de titres et de descriptions de films à partir d'un fichier JSON, puis permet à l'utilisateur de saisir des invites pour rechercher dans la base de données et renvoyer les meilleures correspondances.
Voici une capture d'écran de l'application de console de test en cours d'exécution :
BasicMemoryVectorDatabase
prend désormais en charge les opérations synchrones et asynchrones.Async
fonctionneront très bien.Async
des classes pour prendre en charge le multi-threading.AddText()
et .AddTextAsync()
IVectorSimilarityCalculator
en IVectorComparer
et CosineVectorSimilarityCalculatorAsync
en CosineSimilarityVectorComparerAsync
EuclideanDistanceVectorComparerAsync
MemoryVectorDatabase
pour ne plus nécessiter le type générique TId
inutiliséVectorSimilarity
et Similarity
en VectorComparison
TextDataLoader
pour prendre en charge différentes méthodes de segmentation de texte lors du chargement de documents dans la base de données vectorielle.BasicMemoryVectorDatabase
en tant qu'implémentations de base de base de données vectorielles qui utilisent une stratégie de vectorisation Bag of Words, avec une similarité cosinus, un magasin de vocabulaire de dictionnaire et un préprocesseur de texte de base.VectorTextResultItem.Similarity
afin que le code consommé puisse inspecter la similarité du texte dans les résultats de la recherche vectorielle..Search
pour prendre en charge la pagination des résultats de recherche et la prise en charge du seuil pour la comparaison de similaritéLe projet Build5Nines SharpVector est maintenu par Chris Pietschmann, Microsoft MVP, ambassadeur HashiCorp.