Build5Nines.SharpVector
— это библиотека векторных баз данных в памяти, предназначенная для приложений .NET. Он позволяет хранить, искать и управлять текстовыми данными с использованием векторных представлений. Библиотека настраивается и расширяется, обеспечивая поддержку различных методов сравнения векторов, методов предварительной обработки и стратегий векторизации.
Векторные базы данных используются с решениями генеративного ИИ, дополняющими LLM (большую языковую модель) возможностью загрузки дополнительных контекстных данных с помощью подсказки ИИ с использованием шаблона проектирования RAG (извлечение-расширенная генерация).
Несмотря на то, что существует множество больших баз данных, которые можно использовать для создания векторных баз данных (например, Azure CosmosDB, PostgreSQL с pgvector, Azure AI Search, Elasticsearch и т. д.), существует не так уж много вариантов облегченной базы данных векторов, которую можно встроить в любое .NET-приложение.
Проект Build5Nines SharpVector предоставляет облегченную базу данных векторов в памяти для использования в любом приложении .NET.
«Для векторной базы данных в памяти мы используем Build5Nines.SharpVector, отличный проект Криса Питшмана с открытым исходным кодом. SharpVector упрощает хранение и извлечение векторизованных данных, что делает его идеальным выбором для нашего примера реализации RAG».
— Тулика Чаудхари, главный менеджер по продукту Microsoft для службы приложений Azure.
Векторные базы данных в памяти, такие как Build5Nines.SharpVector
предоставляют несколько преимуществ по сравнению с традиционным сервером векторных баз данных, особенно в сценариях, которые могут требовать высокой производительности, низкой задержки и эффективного использования ресурсов.
Вот список нескольких сценариев использования, в которых Build5Nines.SharpVector
может быть полезен:
Вот пара полезных ссылок на учебные руководства с дополнительной документацией и примерами использования Build5Nines.SharpVector
в ваших собственных проектах:
Библиотека Build5Nines.SharpVector
доступна в виде пакета Nuget, который можно легко включить в ваши проекты .NET:
dotnet add package Build5Nines.SharpVector
Вы можете просмотреть его на Nuget.org здесь: https://www.nuget.org/packages/Build5Nines.SharpVector/
Для максимальной совместимости библиотека Build5Nines.SharpVector
построена без использования каких-либо внешних зависимостей, кроме тех, которые доступны в .NET, и предназначена для .NET 6 и более поздних версий.
Как вы можете видеть на следующем примере использования библиотеки Build5Nines.SharpVector
, всего за пару строк кода вы можете встроить базу данных векторов в памяти в любое приложение .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 ) ;
}
}
Класс Build5Nines.SharpVector.BasicMemoryVectorDatabase
использует стратегию векторизации Bag of Words с косинусным сходством, хранилищем словарных слов и базовым текстовым препроцессором. Библиотека содержит универсальные классы и множество точек расширения для создания с ее помощью пользовательских реализаций векторной базы данных, если это необходимо.
Кроме того, TextDataLoader
можно использовать для загрузки текстовых документов в базу данных Vector с поддержкой нескольких различных методов фрагментирования текста:
/// 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
принимает лямбда-функцию, которую можно использовать для легкого определения метаданных для патронов по мере их загрузки.
В примере консольного приложения в этом репозитории показан пример использования Build5Nines.SharpVector.dll.
Он загружает список названий и описаний фильмов из файла JSON, а затем позволяет пользователю вводить запросы для поиска в базе данных и возврата лучших совпадений.
Вот скриншот запущенного тестового консольного приложения:
BasicMemoryVectorDatabase
теперь поддерживает как синхронные, так и асинхронные операции.Async
будут работать нормально.Async
версия классов для поддержки многопоточности..AddText()
и .AddTextAsync()
IVectorSimilarityCalculator
в IVectorComparer
и CosineVectorSimilarityCalculatorAsync
в CosineSimilarityVectorComparerAsync
EuclideanDistanceVectorComparerAsync
MemoryVectorDatabase
, чтобы он больше не требовал неиспользуемого универсального типа TId
VectorSimilarity
и Similarity
в VectorComparison
TextDataLoader
, чтобы обеспечить поддержку различных методов фрагментации текста при загрузке документов в базу данных векторов.BasicMemoryVectorDatabase
в качестве базовой реализации векторной базы данных, которая использует стратегию векторизации «Мешок слов», с косинусным сходством, хранилищем словарных слов и базовым текстовым препроцессором.VectorTextResultItem.Similarity
, чтобы потребляющий код мог проверять сходство текста в результатах векторного поиска..Search
для поддержки разбивки результатов поиска по страницам и поддержки пороговых значений для сравнения сходства.Проект Build5Nines SharpVector поддерживается Крисом Питшманном, MVP Microsoft и послом HashiCorp.