Condividi tramite


Archivi di memoria del kernel semantico legacy

Suggerimento

È consigliabile usare le astrazioni di Vector Store anziché gli archivi di memoria legacy. Per altre informazioni su come usare le astrazioni di Vector Store iniziano qui.

Il kernel semantico fornisce un set di astrazioni dell'archivio memoria in cui l'interfaccia primaria è Microsoft.SemanticKernel.Memory.IMemoryStore.

Astrazioni dell'archivio memoria e dell'archivio vettoriali

Nell'ambito di uno sforzo per evolvere ed espandere l'archiviazione vettoriale e le capbilities di ricerca del kernel semantico, è stato rilasciato un nuovo set di astrazioni per sostituire le astrazioni dell'archivio memoria. Stiamo chiamando le astrazioni di sostituzione di Vector Store astrazioni. Lo scopo di entrambi è simile, ma le relative interfacce differiscono e le astrazioni di Vector Store offrono funzionalità espanse.

Caratteristica Archivi di memoria legacy Archivi vettoriali
Interfaccia principale IMemoryStore IVectorStore
Pacchetto NuGet astrazioni Microsoft.SemanticKernel.Abstractions Microsoft.Extensions.VectorData.Abstractions
Convenzione di denominazione {Provider}MemoryStore, ad esempio RedisMemoryStore {Provider}VectorStore, ad esempio RedisVectorStore
Supporta upsert di record, recupero ed eliminazione
Supporta la creazione e l'eliminazione della raccolta
Supporta la ricerca vettoriale
Supporta la scelta dell'indice di ricerca e della distanza del vettore preferito No
Supporta più vettori per record No
Supporta schemi personalizzati No
Supporta il pre-filtro dei metadati per la ricerca vettoriale No
Supporta la ricerca vettoriale nei database non vettoriali scaricando l'intero set di dati nel client ed eseguendo una ricerca vettoriale locale No

Connettori dell'archivio memoria disponibili

Il kernel semantico offre diversi connettori dell'archivio memoria ai database vettoriali che è possibile usare per archiviare e recuperare informazioni. tra cui:

Service C# Python
Database vettoriale in Azure Cosmos DB for NoSQL C# Python
Database vettoriale in Azure Cosmos DB for MongoDB basato su vCore C# Python
Azure AI Search C# Python
Server PostgreSQL di Azure C#
Database SQL di Azure C#
Chroma C# Python
DuckDB C#
Milvus C# Python
Ricerca vettoriale di MongoDB Atlas C# Python
Pinecone C# Python
Postgres C# Python
Qdrant C#
Redis C#
SQLite C#
Weaviate C# Python

Migrazione da archivi di memoria a archivi vettoriali

Se si vuole eseguire la migrazione dall'uso delle astrazioni dell'archivio memoria alle interruzioni dell'archivio vettoriali, è possibile eseguire questa operazione in diversi modi.

Usare la raccolta esistente con le astrazioni vector store

Il modo più semplice in molti casi potrebbe essere usare solo le astrazioni di Vector Store per accedere a una raccolta creata usando le astrazioni dell'archivio memoria. In molti casi è possibile, poiché l'astrazione dell'archivio vettoriale consente di scegliere lo schema che si vuole usare. Il requisito principale consiste nel creare un modello di dati che corrisponda allo schema usato dall'implementazione dell'archivio memoria legacy.

Ad esempio, per accedere a una raccolta creata dall'archivio di memoria di Ricerca intelligenza artificiale di Azure, è possibile usare il modello di dati vector store seguente.

using Microsoft.Extensions.VectorData;

class VectorStoreRecord
{
    [VectorStoreRecordKey]
    public string Id { get; set; }

    [VectorStoreRecordData]
    public string Description { get; set; }

    [VectorStoreRecordData]
    public string Text { get; set; }

    [VectorStoreRecordData]
    public bool IsReference { get; set; }

    [VectorStoreRecordData]
    public string ExternalSourceName { get; set; }

    [VectorStoreRecordData]
    public string AdditionalMetadata { get; set; }

    [VectorStoreRecordVector(VectorSize)]
    public ReadOnlyMemory<float> Embedding { get; set; }
}

Suggerimento

Per esempi più dettagliati su come usare le astrazioni di Vector Store per accedere alle raccolte create con un archivio memoria, vedere qui.

Crea una nuova raccolta

In alcuni casi la migrazione a una nuova raccolta può essere preferibile rispetto all'uso diretto della raccolta esistente. Lo schema scelto dall'archivio memoria potrebbe non corrispondere ai requisiti, in particolare per quanto riguarda il filtro.

Ad esempio, l'archivio memoria Redis usa uno schema con tre campi:

  • metadati stringa
  • timestamp lungo
  • float[] incorporamento

Tutti i dati diversi dall'incorporamento o dal timestamp vengono archiviati come stringa JSON serializzata nel campo Metadati. Ciò significa che non è possibile indicizzare i singoli valori e filtrarli. Ad esempio, è possibile filtrare usando ExternalSourceName, ma non è possibile, mentre si trova all'interno di una stringa json.

In questo caso, potrebbe essere preferibile eseguire la migrazione dei dati a una nuova raccolta con uno schema flat. Qui sono disponibili due opzioni. È possibile creare una nuova raccolta dai dati di origine o semplicemente eseguire il mapping e copiare i dati dal vecchio al nuovo. La prima opzione può essere più costosa perché sarà necessario rigenerare gli incorporamenti dai dati di origine.

Suggerimento

Per un esempio che usa Redis che mostra come copiare dati da una raccolta creata usando le astrazioni dell'archivio memoria in un oggetto creato usando le astrazioni di Vector Store, vedere qui.