Udostępnij za pośrednictwem


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.