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 | Sì | Sì |
Supporta la creazione e l'eliminazione della raccolta | Sì | Sì |
Supporta la ricerca vettoriale | Sì | Sì |
Supporta la scelta dell'indice di ricerca e della distanza del vettore preferito | No | Sì |
Supporta più vettori per record | No | Sì |
Supporta schemi personalizzati | No | Sì |
Supporta il pre-filtro dei metadati per la ricerca vettoriale | No | Sì |
Supporta la ricerca vettoriale nei database non vettoriali scaricando l'intero set di dati nel client ed eseguendo una ricerca vettoriale locale | Sì | 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.