Wyszukiwanie wektorowe
Ostrzeżenie
Wyszukiwanie wektorów usługi Azure Cosmos DB jest obecnie dostępne w wersji zapoznawczej. W rezultacie użycie interfejsów API wyszukiwania wektorowego ef wygeneruje ostrzeżenie "eksperymentalnego interfejsu API" (EF9103
), które musi zostać pominięte. Interfejsy API i możliwości mogą ulec zmianie w sposób powodujący niezgodność w przyszłości.
Usługa Azure Cosmos DB oferuje teraz obsługę podglądu wyszukiwania podobieństwa wektorów. Wyszukiwanie wektorowe jest podstawową częścią niektórych typów aplikacji, w tym sztucznej inteligencji, wyszukiwania semantycznego i innych. Usługa Azure Cosmos DB umożliwia przechowywanie wektorów bezpośrednio w dokumentach wraz z resztą danych, co oznacza, że można wykonywać wszystkie zapytania względem pojedynczej bazy danych. Może to znacznie uprościć architekturę i usunąć potrzebę dodatkowego, dedykowanego rozwiązania bazy danych wektorów w stosie. Aby dowiedzieć się więcej na temat wyszukiwania wektorów usługi Azure Cosmos DB, zobacz dokumentację.
Aby użyć wyszukiwania wektorowego, musisz najpierw zarejestrować się w funkcji w wersji zapoznawczej. Następnie zdefiniuj zasady wektorów w kontenerze, aby określić, które właściwości JSON w dokumentach zawierają wektory i informacje dotyczące wektorów dla tych właściwości (wymiarów, typu danych, funkcji odległości).
Po poprawnym skonfigurowaniu kontenera dodaj właściwość wektora do modelu w ścieżce zdefiniowanej w zasadach kontenera i skonfiguruj ją przy użyciu programu EF jako wektora:
public class Blog
{
...
public float[] Vector { get; set; }
}
public class BloggingContext
{
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Embeddings)
.IsVector(DistanceFunction.Cosine, dimensions: 1536);
}
}
Na tym etapie model jest skonfigurowany. Wstawianie danych wektorowych odbywa się podobnie jak w przypadku dowolnego innego typu danych za pomocą platformy EF:
float[] vector = /* generate vector data from text, image, etc. */
context.Add(new Blog { Vector = vector });
await context.SaveChangesAsync();
Na koniec użyj EF.Functions.VectorDistance()
funkcji w zapytaniach LINQ, aby przeprowadzić wyszukiwanie podobieństwa wektorów:
float[] anotherVector = /* generate vector data from text, image, etc. */
var blogs = await context.Blogs
.OrderBy(s => EF.Functions.VectorDistance(s.Vector, anotherVector))
.Take(5)
.ToListAsync();
Spowoduje to zwrócenie pięciu pierwszych blogów na podstawie podobieństwa ich Vector
właściwości i danych dostarczonych anotherVector
zewnętrznie.