Condividi tramite


Ricerca vettoriale

Avviso

La ricerca vettoriale di Azure Cosmos DB attualmente è disponibile in anteprima. Di conseguenza, l'uso delle API di ricerca vettoriali di ENTITY genererà un avviso "API sperimentale" (EF9103) che deve essere eliminato. Le API e le funzionalità possono cambiare in modi di rilievo in futuro.

Azure Cosmos DB offre ora il supporto in anteprima per la ricerca di somiglianza vettoriale. La ricerca vettoriale è una parte fondamentale di alcuni tipi di applicazione, tra cui intelligenza artificiale, ricerca semantica e altre. Azure Cosmos DB consente di archiviare i vettori direttamente nei documenti insieme al resto dei dati, ovvero è possibile eseguire tutte le query su un singolo database. Ciò può semplificare notevolmente l'architettura e rimuovere la necessità di una soluzione di database vettoriale dedicata aggiuntiva nello stack. Per altre informazioni sulla ricerca vettoriale di Azure Cosmos DB, vedere la documentazione.

Per usare la ricerca vettoriale, è prima necessario eseguire la registrazione nella funzionalità di anteprima. Definire quindi i criteri vettoriali nel contenitore per identificare le proprietà JSON nei documenti contenenti vettori e informazioni correlate a vettori per tali proprietà (dimensioni, tipo di dati, funzione distance).

Dopo aver configurato correttamente il contenitore, aggiungere una proprietà vector al modello nel percorso definito nei criteri del contenitore e configurarlo con ENTITY come vettore:

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);
    }
}

A questo punto il modello è configurato. L'inserimento di dati vettoriali viene eseguito esattamente come qualsiasi altro tipo di dati con EF:

float[] vector = /* generate vector data from text, image, etc. */
context.Add(new Blog { Vector = vector });
await context.SaveChangesAsync();

Usare infine la funzione EF.Functions.VectorDistance() nelle query LINQ per eseguire ricerche di somiglianza vettoriale:

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();

Verranno restituiti i primi cinque blog, in base alla somiglianza della proprietà Vector e ai dati forniti anotherVector esternamente.