Partager via


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.