Condividi tramite


Uso delle astrazioni di Vector Store senza definire un modello di dati personalizzato (anteprima)

Avviso

La funzionalità di archiviazione vettoriale del kernel semantico è in anteprima e i miglioramenti che richiedono modifiche di rilievo possono ancora verificarsi in circostanze limitate prima del rilascio.

Panoramica

I connettori dell'archivio vettoriale del kernel semantico usano un approccio basato sul modello per interagire con i database. Questo semplifica l'uso dei connettori, poiché il modello di dati riflette lo schema dei record di database e per aggiungere eventuali informazioni aggiuntive sullo schema necessarie, è sufficiente aggiungere attributi alle proprietà del modello di dati.

Esistono casi in cui non è consigliabile o possibile definire un modello di dati personalizzato. Si supponga, ad esempio, che non si conosca in fase di compilazione l'aspetto dello schema del database e che lo schema venga fornito solo tramite la configurazione. La creazione di un modello di dati che riflette lo schema sarebbe impossibile in questo caso.

Per soddisfare questo scenario, viene fornito un modello di dati generico.

Modello di dati generico

Il modello di dati generico è una classe denominata VectorStoreGenericDataModel ed è disponibile nel Microsoft.Extensions.VectorData.Abstractions pacchetto.

Per supportare qualsiasi tipo di database, il tipo della chiave di VectorStoreGenericDataModel viene specificato tramite un parametro generico.

Tutte le altre proprietà sono suddivise in Data proprietà e Vector . Qualsiasi proprietà che non è un vettore o una chiave viene considerata una proprietà di dati. Data i set di proprietà e Vector vengono archiviati come dizionari con chiave di stringa di oggetti.

Specifica delle informazioni sullo schema quando si usa il modello di dati generico

Quando si usa il modello di dati generico, i connettori devono comunque conoscere l'aspetto dello schema del database. Senza le informazioni sullo schema, il connettore non sarebbe in grado di creare una raccolta o sapere come eseguire il mapping da e verso la rappresentazione di archiviazione usata da ogni database.

È possibile usare una definizione di record per fornire le informazioni sullo schema. A differenza di un modello di dati, è possibile creare una definizione di record dalla configurazione in fase di esecuzione, fornendo una soluzione per quando le informazioni sullo schema non sono note in fase di compilazione.

Suggerimento

Per informazioni su come creare una definizione di record, fare riferimento alla definizione dello schema con una definizione di record.

Esempio

Per usare il modello di dati generico con un connettore, è sufficiente specificarlo come modello di dati durante la creazione di una raccolta e fornire contemporaneamente una definizione di record.

// Create the definition to define the schema.
VectorStoreRecordDefinition vectorStoreRecordDefinition = new()
{
    Properties = new List<VectorStoreRecordProperty>
    {
        new VectorStoreRecordKeyProperty("Key", typeof(string)),
        new VectorStoreRecordDataProperty("Term", typeof(string)),
        new VectorStoreRecordDataProperty("Definition", typeof(string)),
        new VectorStoreRecordVectorProperty("DefinitionEmbedding", typeof(ReadOnlyMemory<float>)) { Dimensions = 1536 }
    }
};

// When getting your collection instance from a vector store instance
// specify the generic data model, using the appropriate key type for your database
// and also pass your record definition.
var genericDataModelCollection = vectorStore.GetCollection<string, VectorStoreGenericDataModel<string>>(
    "glossary",
    vectorStoreRecordDefinition);

// Since we have schema information available from the record definition
// it's possible to create a collection with the right vectors, dimensions,
// indexes and distance functions.
await genericDataModelCollection.CreateCollectionIfNotExistsAsync();

// When retrieving a record from the collection, data and vectors can
// now be accessed via the Data and Vector dictionaries respectively.
var record = await genericDataModelCollection.GetAsync("SK");
Console.WriteLine(record.Data["Definition"])

Quando si costruisce direttamente un'istanza di raccolta, la definizione del record viene passata come opzione. Di seguito è riportato un esempio di costruzione di un'istanza di raccolta di Ricerca intelligenza artificiale di Azure con il modello di dati generico.

new AzureAISearchVectorStoreRecordCollection<VectorStoreGenericDataModel<string>>(
    searchIndexClient,
    "glossary",
    new() { VectorStoreRecordDefinition = vectorStoreRecordDefinition });

Presto disponibile

Altre informazioni saranno presto disponibili.

Presto disponibile

Altre informazioni saranno presto disponibili.