Condividi tramite


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

Avvertimento

La funzionalità di store vettoriale del Semantic Kernel è in anteprima e i miglioramenti che richiedono cambiamenti significativi possono verificarsi ancora in circostanze limitate prima del rilascio.

Avvertimento

La funzionalità di store vettoriale del Semantic Kernel è in anteprima e i miglioramenti che richiedono cambiamenti significativi possono verificarsi ancora in circostanze limitate prima del rilascio.

Informazioni generali

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, è possibile usare un Dictionary<string, object?> per il tipo di record. Le proprietà vengono aggiunte al dizionario con la chiave come nome della proprietà e il valore come valore della proprietà.

Specifica delle informazioni sullo schema quando si usa il dizionario

Quando si usa il dizionario, 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 dizionario 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.
VectorStoreCollectionDefinition definition = new()
{
    Properties = new List<VectorStoreProperty>
    {
        new VectorStoreKeyProperty("Key", typeof(string)),
        new VectorStoreDataProperty("Term", typeof(string)),
        new VectorStoreDataProperty("Definition", typeof(string)),
        new VectorStoreVectorProperty("DefinitionEmbedding", typeof(ReadOnlyMemory<float>), dimensions: 1536)
    }
};

// When getting your collection instance from a vector store instance
// specify the Dictionary, using object as the key type for your database
// and also pass your record definition.
// Note that you have to use GetDynamicCollection instead of the regular GetCollection method
// to get an instance of a collection using Dictionary<string, object?>.
var dynamicDataModelCollection = vectorStore.GetDynamicCollection(
    "glossary",
    definition);

// 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 dynamicDataModelCollection.EnsureCollectionExistsAsync();

// When retrieving a record from the collection, key, data and vector values can
// now be accessed via the dictionary entries.
var record = await dynamicDataModelCollection.GetAsync("SK");
Console.WriteLine(record["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 dizionario.

Si noti che ogni implementazione della raccolta di archivi vettoriali ha una classe separata *DynamicCollection che può essere usata con la stringa Dictionary<, l'oggetto?>. Ciò è dovuto al fatto che queste implementazioni possono supportare NativeAOT/Trimming.

new AzureAISearchDynamicCollection(
    searchIndexClient,
    "glossary",
    new() { Definition = definition });

Informazioni generali

In Python è possibile usare VectorStoreRecordDefinition in combinazione con qualsiasi tipo generico, ad esempio un dataframe dict o (Pandas). Vedi altre informazioni qui: Definizione dello schema con una definizione di record.

Presto disponibile

Altre informazioni saranno presto disponibili.