Build5Nines.SharpVector
adalah perpustakaan database vektor dalam memori yang dirancang untuk aplikasi .NET. Ini memungkinkan Anda untuk menyimpan, mencari, dan mengelola data teks menggunakan representasi vektor. Pustaka ini dapat disesuaikan dan diperluas, memungkinkan dukungan untuk berbagai metode perbandingan vektor, teknik pra-pemrosesan, dan strategi vektorisasi.
Basis data vektor digunakan dengan solusi AI Generatif yang menambah LLM (Large Language Model) dengan kemampuan memuat data konteks tambahan dengan perintah AI menggunakan pola desain RAG (Retrieval-Augmented Generation).
Meskipun ada banyak database besar yang dapat digunakan untuk membangun Database Vektor (seperti Azure CosmosDB, PostgreSQL dengan pgvector, Azure AI Search, Elasticsearch, dan banyak lagi), tidak banyak pilihan untuk database vektor ringan yang dapat disematkan ke dalamnya. aplikasi .NET apa pun.
Proyek Build5Nines SharpVector menyediakan Database Vektor dalam memori yang ringan untuk digunakan dalam aplikasi .NET apa pun.
"Untuk database vektor dalam memori, kami menggunakan Build5Nines.SharpVector, sebuah proyek sumber terbuka luar biasa dari Chris Pietschmann. SharpVector memudahkan untuk menyimpan dan mengambil data vektor, menjadikannya pilihan ideal untuk contoh implementasi RAG kami."
— Tulika Chaudharie, Manajer Produk Utama di Microsoft untuk Layanan Aplikasi Azure
Basis data vektor dalam memori seperti Build5Nines.SharpVector
memberikan beberapa keunggulan dibandingkan server basis data vektor tradisional, terutama dalam skenario yang mungkin memerlukan kinerja tinggi, latensi rendah, dan penggunaan sumber daya yang efisien.
Berikut daftar beberapa skenario penggunaan di mana Build5Nines.SharpVector
dapat berguna:
Berikut beberapa tautan tutorial bermanfaat dengan dokumentasi tambahan dan contoh penggunaan Build5Nines.SharpVector
dalam proyek Anda sendiri:
Pustaka Build5Nines.SharpVector
tersedia sebagai Paket Nuget agar mudah disertakan ke dalam proyek .NET Anda:
dotnet add package Build5Nines.SharpVector
Anda dapat melihatnya di Nuget.org di sini: https://www.nuget.org/packages/Build5Nines.SharpVector/
Untuk kompatibilitas maksimum, pustaka Build5Nines.SharpVector
dibuat tidak menggunakan dependensi eksternal selain yang tersedia dari .NET, dan dibuat untuk menargetkan .NET 6 dan lebih tinggi.
Seperti yang dapat Anda lihat pada contoh penggunaan pustaka Build5Nines.SharpVector
berikut, hanya dalam beberapa baris kode Anda dapat menyematkan Database Vektor dalam memori ke dalam aplikasi .NET apa pun:
// 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 ) ;
}
}
Kelas Build5Nines.SharpVector.BasicMemoryVectorDatabase
menggunakan strategi vektorisasi Bag of Words, dengan kesamaan Cosine, penyimpanan kosakata kamus, dan praprosesor teks dasar. Pustaka berisi kelas generik dan banyak titik ekstensi untuk membuat implementasi basis data vektor yang disesuaikan jika diperlukan.
Selain itu, TextDataLoader
dapat digunakan untuk membantu memuat dokumen teks ke dalam Database Vektor dengan dukungan untuk beberapa metode pemotongan teks yang berbeda:
/// 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
menerima fungsi lambda yang dapat digunakan untuk dengan mudah menentukan Metadata untuk chuck saat dimuat.
Contoh aplikasi konsol di repo ini menunjukkan contoh penggunaan Build5Nines.SharpVector.dll
Ini memuat daftar judul dan deskripsi film dari file JSON, kemudian memungkinkan pengguna mengetikkan perintah untuk mencari database dan mengembalikan yang paling cocok.
Berikut tangkapan layar aplikasi konsol pengujian yang sedang berjalan:
BasicMemoryVectorDatabase
kini mendukung operasi sinkron dan asinkron.Async
akan berfungsi dengan baik.Async
untuk mendukung multi-threading.AddText()
dan .AddTextAsync()
IVectorSimilarityCalculator
ke IVectorComparer
dan CosineVectorSimilarityCalculatorAsync
ke CosineSimilarityVectorComparerAsync
EuclideanDistanceVectorComparerAsync
baruMemoryVectorDatabase
agar tidak lagi memerlukan tipe generik TId
yang tidak digunakanVectorSimilarity
dan Similarity
menjadi VectorComparison
TextDataLoader
untuk memberikan dukungan bagi berbagai metode pengelompokan teks saat memuat dokumen ke dalam database vektor.BasicMemoryVectorDatabase
sebagai implementasi Basis Data Vektor dasar yang menggunakan strategi vektorisasi Bag of Words, dengan kesamaan Cosine, penyimpanan kosakata kamus, dan praprosesor teks dasar.VectorTextResultItem.Similarity
sehingga kode yang digunakan dapat memeriksa kesamaan Teks dalam hasil pencarian vektor..Search
untuk mendukung paging hasil pencarian dan dukungan ambang batas untuk perbandingan kesamaanProyek Build5Nines SharpVector dikelola oleh Chris Pietschmann, Microsoft MVP, Duta HashiCorp.