Magasins de mémoire du noyau sémantique hérité
Conseil
Nous vous recommandons d’utiliser les abstractions du Magasin de vecteurs au lieu des magasins de mémoire hérités. Pour plus d’informations sur l’utilisation des abstractions du Magasin de vecteurs, commencez ici.
Le noyau sémantique fournit un ensemble d’abstractions du magasin de mémoire où l’interface principale est Microsoft.SemanticKernel.Memory.IMemoryStore
.
Abstractions du magasin de mémoire et du magasin de vecteurs
Dans le cadre d’un effort d’évolution et d’expansion du stockage vectoriel et des capbilités de recherche du noyau sémantique, nous avons publié un nouvel ensemble d’abstractions pour remplacer les abstractions du magasin de mémoire. Nous appelons les abstractions de remplacement Vector Store. L’objectif des deux est similaire, mais leurs interfaces diffèrent et les abstractions de Vector Store fournissent des fonctionnalités étendues.
Caractéristique | Magasins de mémoire hérités | Magasins de vecteurs |
---|---|---|
Interface principale | IMemoryStore | IVectorStore |
Package nuget d’abstractions | Microsoft.SemanticKernel.Abstractions | Microsoft.Extensions.VectorData.Abstractions |
Conventions d’affectation de noms | {Provider}MemoryStore, par exemple RedisMemoryStore | {Provider}VectorStore, par exemple RedisVectorStore |
Prend en charge l’enregistrement upsert, get and delete | Oui | Oui |
Prend en charge la création et la suppression d’une collection | Oui | Oui |
Prend en charge la recherche vectorielle | Oui | Oui |
Prend en charge le choix de votre index de recherche vectorielle et de votre fonction de distance préférés | Non | Oui |
Prend en charge plusieurs vecteurs par enregistrement | Non | Oui |
Prend en charge les schémas personnalisés | Non | Oui |
Prend en charge le préfiltrage des métadonnées pour la recherche vectorielle | Non | Oui |
Prend en charge la recherche vectorielle sur les bases de données non vectorielles en téléchargeant l’intégralité du jeu de données sur le client et en effectuant une recherche vectorielle locale | Oui | Non |
Connecteurs de magasin de mémoire disponibles
Le noyau sémantique offre plusieurs connecteurs de magasin de mémoire aux bases de données vectorielles que vous pouvez utiliser pour stocker et récupérer des informations. Il s’agit notamment des paramètres suivants :
Service | C# | Python |
---|---|---|
Base de données vectorielle dans Azure Cosmos DB for NoSQL | C# | Python |
Base de données vectorielle dans Azure Cosmos DB for MongoDB basé sur vCore | C# | Python |
Recherche Azure AI | C# | Python |
Azure PostgreSQL Server | C# | |
Azure SQL Database | C# | |
Chroma | C# | Python |
DuckDB | C# | |
Milvus | C# | Python |
MongoDB Atlas Vector Search | C# | Python |
Pinecone | C# | Python |
Postgres | C# | Python |
Qdrant | C# | |
Redis | C# | |
SQLite | C# | |
Weaviate | C# | Python |
Migration de magasins de mémoire vers des magasins vectoriels
Si vous souhaitez migrer à partir de l’utilisation des abstractions du magasin de mémoire vers les abtractions du Magasin de vecteurs, il existe différentes façons de procéder.
Utiliser la collection existante avec les abstractions du Magasin de vecteurs
La façon la plus simple dans de nombreux cas peut être d’utiliser simplement les abstractions du Magasin de vecteurs pour accéder à une collection créée à l’aide des abstractions du Magasin de mémoire. Dans de nombreux cas, cela est possible, car l’abstraction vector store vous permet de choisir le schéma que vous souhaitez utiliser. La principale exigence consiste à créer un modèle de données qui correspond au schéma utilisé par l’implémentation du magasin de mémoire héritée.
Par exemple, pour accéder à une collection créée par le magasin de mémoire recherche Azure AI, vous pouvez utiliser le modèle de données vector store suivant.
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; }
}
Conseil
Pour obtenir des exemples plus détaillés sur l’utilisation des abstractions du Magasin de vecteurs pour accéder aux collections créées à l’aide d’un magasin de mémoire, voir ici.
Créer une collection
Dans certains cas, la migration vers une nouvelle collection peut être préférable à l’utilisation directe de la collection existante. Le schéma choisi par le Magasin de mémoire peut ne pas correspondre à vos besoins, en particulier en ce qui concerne le filtrage.
Par exemple, le magasin de mémoire Redis utilise un schéma avec trois champs :
- métadonnées de chaîne
- horodatage long
- float[] incorporation
Toutes les données autres que l’incorporation ou l’horodatage sont stockées sous forme de chaîne json sérialisée dans le champ Métadonnées. Cela signifie qu’il n’est pas possible d’indexer les valeurs individuelles et de les filtrer. Par exemple, vous pouvez filtrer à l’aide de ExternalSourceName, mais cela n’est pas possible alors qu’il se trouve à l’intérieur d’une chaîne json.
Dans ce cas, il peut être préférable de migrer les données vers une nouvelle collection avec un schéma plat. Il y a deux options ici. Vous pouvez créer une collection à partir de vos données sources ou simplement mapper et copier les données de l’ancien vers le nouveau. La première option peut être plus coûteuse, car vous devrez régénérer les incorporations à partir des données sources.
Conseil
Pour obtenir un exemple d’utilisation de Redis montrant comment copier des données à partir d’une collection créée à l’aide des abstractions du magasin de mémoire vers une autre créée à l’aide des abstractions de la Banque de vecteurs, voir ici.