Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wektorowe bazy danych przechowują i zarządzają wektorami osadzeń. Osadzanie to liczbowe reprezentacje danych, które zachowują znaczenie semantyczne. Słowa, dokumenty, obrazy, dźwięk i inne typy danych mogą być wektoryzowane. Za pomocą osadzania można pomóc modelowi sztucznej inteligencji zrozumieć znaczenie danych wejściowych, dzięki czemu może wykonywać porównania i przekształcenia, takie jak podsumowywanie tekstu, znajdowanie danych powiązanych kontekstowo lub tworzenie obrazów na podstawie opisów tekstu.
Na przykład można użyć wektorowej bazy danych do:
- Identyfikowanie podobnych obrazów, dokumentów i piosenek na podstawie ich zawartości, motywów, tonacji i stylów.
- Zidentyfikuj podobne produkty na podstawie ich cech, funkcji i grup użytkowników.
- Zalecanie zawartości, produktów lub usług na podstawie preferencji użytkownika.
- Zidentyfikuj najlepsze potencjalne opcje z dużej puli wyborów, aby spełnić złożone wymagania.
- Identyfikowanie anomalii danych lub fałszywych działań, które różnią się od dominujących lub normalnych wzorców.
Omówienie wyszukiwania wektorów
Bazy danych wektorów umożliwiają wyszukiwanie wektorów w celu znalezienia podobnych elementów na podstawie ich cech danych, a nie dokładnych dopasowań w polu właściwości. Wyszukiwanie wektorowe działa poprzez analizę wektorowych reprezentacji danych utworzonych przy użyciu modelu osadzającego sztuczną inteligencję, takiego jak modele osadzające Azure OpenAI. Proces wyszukiwania mierzy odległość między wektorami danych a wektorem zapytania. Wektory danych znajdujące się najbliżej wektora zapytania to te, które są najbardziej podobne semantycznie.
Większość nowoczesnych produktów baz danych obsługuje wyszukiwanie wektorów obok tradycyjnych zapytań; dotyczy to Azure SQL/SQL Server, Azure Cosmos DB, PostgreSQL i wielu innych głównych produktów. Alternatywnie istnieje szeroka gama dedykowanych, wyspecjalizowanych produktów baz danych wektorowych. Te produkty są wysoce zoptymalizowane pod kątem przeprowadzania wyszukiwania wektorów i są zwykle instalowane razem z tradycyjną bazą danych wyłącznie do obsługi obciążeń wyszukiwania wektorowego.
Przepływy pracy wyszukiwania wektorowego z .NET i OpenAI
Wektorowe bazy danych i ich funkcje wyszukiwania są szczególnie przydatne w schematach RAG przepływów pracy z Azure OpenAI. Ten wzorzec umożliwia rozszerzenie modelu sztucznej inteligencji o dodatkową bogatą wiedzę na temat danych. Typowy przepływ pracy sztucznej inteligencji korzystający z baz danych wektorów obejmuje następujące kroki:
- Utwórz osadzanie dla danych przy użyciu modelu osadzania OpenAI.
- Zapisz i zaindeksuj osadzanie w wektorowej bazie danych lub usłudze wyszukiwania.
- Przekonwertuj monity użytkownika z aplikacji na osadzanie.
- Uruchom wyszukiwanie wektorowe w danych, porównując osadzenie zapytania użytkownika z osadzeniami w bazie danych.
- Użyj modelu językowego, takiego jak gpt-4o, aby utworzyć przyjazne dla użytkownika uzupełnianie z wyników wyszukiwania wektorowego.
Aby zapoznać się z praktycznym przykładem tego przepływu, zobacz samouczek Implement Azure OpenAI with RAG using vector search in a .NET app.
Inne zalety wzorca RAG obejmują:
- Twórz kontekstowo odpowiednie i dokładne odpowiedzi na zapytania użytkownika z modeli sztucznej inteligencji.
- Pokonaj limity tokenów LLM — ciężka praca odbywa się za pośrednictwem wyszukiwania wektorowego w bazie danych.
- Zmniejsz koszty częstego dostrajania w przypadku zaktualizowanych danych.
Microsoft.Extensions.VectorData
Aby użyć wyszukiwania wektorowego z .NET, możesz użyć zwykłego sterownika bazy danych lub zestawu SDK bez konieczności dodatkowej biblioteki ani interfejsu API. Na przykład w SQL Server wyszukiwanie wektorów można wykonywać w języku T-SQL przy użyciu standardowego sterownika .NET SqlClient. Jednak uzyskiwanie dostępu do wyszukiwania wektorów w ten sposób jest często dość niskopoziomowe, wymaga znacznych skomplikowanych działań przy obsłudze serializacji/deserializacji, a wynikowy kod nie jest przenoszalny między bazami danych.
Alternatywnie, pakiet 📦 Microsoft.Extensions.VectorData.Abstractions zapewnia spójną warstwę abstrakcji do obsługi magazynów wektorowych w .NET. Te abstrakcyjne mechanizmy pozwalają na pisanie prostego, kodu wysokiego poziomu dla pojedynczego interfejsu API i wymianę podstawowego magazynu wektorowego przy minimalnych zmianach w aplikacji.
Biblioteka zapewnia następujące kluczowe możliwości:
- Bezproblemowe mapowanie typów .NET: Mapuj typ .NET bezpośrednio do bazy danych, podobnie jak maper obiektowo-relacyjny.
- Unified data model: Zdefiniuj model danych raz przy użyciu atrybutów .NET i użyj go w dowolnym obsługiwanym magazynie wektorów.
- Operacje CRUD: tworzenie, odczytywanie, aktualizowanie i usuwanie rekordów w magazynie wektorów.
- Wyszukiwanie wektorowe i hybrydowe: wykonywanie zapytań o rekordy według podobieństwa semantycznego przy użyciu wyszukiwania wektorowego lub łączenie wyszukiwania wektorów i tekstu na potrzeby wyszukiwania hybrydowego.
- Zarządzanie generowaniem osadów: skonfiguruj generator osadów raz i pozwól bibliotece automatycznie obsługiwać generowanie.
- Zarządzanie kolekcjami: tworzenie, wyświetlanie listy i usuwanie kolekcji (tabel lub indeksów) w magazynie wektorów.
Microsoft. Extensions.VectorData jest również blokiem konstrukcyjnym dodatkowych warstw wyższego poziomu, które muszą współdziałać z bazą danych wektorów. Na przykład Microsoft. Extensions.DataIngestion.
Microsoft.Extensions.VectorData i Entity Framework Core
Jeśli do uzyskiwania dostępu do bazy danych używasz już Entity Framework Core, prawdopodobnie dostawca bazy danych obsługuje już wyszukiwanie wektorowe, a zapytania LINQ mogą służyć do wyrażania takich wyszukiwań; Microsoft. Extensions.VectorData nie musi być wymagana w takich aplikacjach. Jednak większość dedykowanych baz danych wektorów nie jest obsługiwana przez program EF Core i Microsoft. Extensions.VectorData może zapewnić dobre środowisko pracy z tymi elementami. Ponadto możesz również znaleźć się w sytuacji, w której używasz EF i Microsoft.Extensions.VectorData w tej samej aplikacji, np. gdy używasz dodatkowej warstwy, takiej jak Microsoft.Extensions.DataIngestion.
Kluczowe abstrakcje
Oto minimalny przykład end-to-end, który tworzy kolekcję, aktualizuje lub wstawia rekordy i wykonuje wyszukiwanie wektorowe:
using Microsoft.Extensions.AI;
using Microsoft.Extensions.VectorData;
using Microsoft.SemanticKernel.Connectors.InMemory;
// Configure an embedding generator to transform text to embeddings
IEmbeddingGenerator<string, Embedding<float>> embeddingGenerator = ...;
// Create a vector store and get a collection with the embedding generator
var vectorStore = new InMemoryVectorStore(new() { EmbeddingGenerator = embeddingGenerator });
var collection = vectorStore.GetCollection<int, Movie>("movies");
await collection.EnsureCollectionExistsAsync();
// Upsert some records
await collection.UpsertAsync(new Movie { Key = 1, Title = "The Lion King", Description = "An animated film about a young lion prince" });
await collection.UpsertAsync(new Movie { Key = 2, Title = "Inception", Description = "A thief who steals corporate secrets through dream-sharing technology" });
await collection.UpsertAsync(new Movie { Key = 3, Title = "Finding Nemo", Description = "A fish searches the ocean for his lost son" });
// Search for movies similar to the query text
await foreach (var result in collection.SearchAsync("animals in the wild", top: 2))
{
Console.WriteLine($"{result.Record.Title} (score: {result.Score})");
}
// Define the data model
class Movie
{
[VectorStoreKey]
public int Key { get; set; }
[VectorStoreData]
public string Title { get; set; }
[VectorStoreVector(Dimensions: 1536)]
public string Description { get; set; }
}
Dostawcy przechowywania wektorów
Pakiet Microsoft.Extensions.VectorData.Abstractions definiuje abstrakcję i oddzielne pakiety provider zapewniają implementacje dla określonych baz danych wektorów. Wybierz dostawcę pasujący do bazy danych wektorów, na przykład Microsoft. SemanticKernel.Connectors.AzureAISearch.
Uwaga / Notatka
Pomimo włączenia "SemanticKernel" w nazwach pakietów, ci dostawcy nie mają nic wspólnego z Semantic Kernel i mogą być używani w dowolnym miejscu w .NET, w tym w ramach Agent Framework.
Wszyscy dostawcy implementują te same VectorStore i VectorStoreCollection<TKey,TRecord> abstrakcyjne klasy, dzięki czemu można przełączać się między nimi bez zmiany logiki aplikacji.
Wskazówka
Użyj dostawcy pamięci wewnętrznej (Microsoft.SemanticKernel.Connectors.InMemory) podczas początkowego tworzenia prototypów — nie wymaga żadnych zewnętrznych usług ani konfiguracji, i możesz później wymienić na dostawcę produkcyjnego. Unikaj używania dostawcy InMemory do testowania, ponieważ mogą istnieć ważne różnice między tym dostawcą a produkcyjną bazą danych. Rozważ użycie narzędzi testcontainers do uruchamiania testów względem produkcyjnego systemu bazy danych.