Utilisation du connecteur en mémoire (préversion)
Avertissement
La fonctionnalité de magasin de vecteurs du noyau sémantique est en préversion et des améliorations nécessitant des modifications cassants peuvent toujours se produire dans des circonstances limitées avant la mise en production.
Vue d’ensemble
Le connecteur magasin de vecteurs en mémoire est une implémentation de magasin de vecteurs fournie par le noyau sémantique qui n’utilise aucune base de données externe et stocke les données en mémoire. Ce magasin de vecteurs est utile pour les scénarios de prototypage ou pour les opérations en mémoire à haute vitesse requises.
Le connecteur présente les caractéristiques suivantes.
Zone Fonctionnalités | Support |
---|---|
Mappages de collection à | Dictionnaire en mémoire |
Types de propriétés de clé pris en charge | Tout type pouvant être comparé |
Types de propriétés de données pris en charge | Tout type |
Types de propriétés vectorielles pris en charge | Float ReadOnlyMemory<> |
Types d’index pris en charge | Plat |
Fonctions de distance prises en charge |
|
Clauses de filtre prises en charge |
|
Prend en charge plusieurs vecteurs dans un enregistrement | Oui |
Est-il pris en charge ? | Oui |
IsFullTextSearchable pris en charge ? | Oui |
StoragePropertyName pris en charge ? | Non, étant donné que le stockage est en mémoire et que la réutilisation des données n’est donc pas possible, le nommage personnalisé n’est pas applicable. |
Mise en route
Ajoutez le package nuget noyau sémantique à votre projet.
dotnet add package Microsoft.SemanticKernel.Connectors.InMemory --prerelease
Vous pouvez ajouter le magasin de vecteurs au conteneur d’injection de dépendances disponible sur le KernelBuilder
conteneur ou au conteneur d’injection de dépendances à l’aide IServiceCollection
de méthodes d’extension fournies par le noyau sémantique.
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel
.CreateBuilder()
.AddInMemoryVectorStore();
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddInMemoryVectorStore();
Vous pouvez construire une instance inMemory Vector Store directement.
using Microsoft.SemanticKernel.Connectors.InMemory;
var vectorStore = new InMemoryVectorStore();
Il est possible de construire une référence directe à une collection nommée.
using Microsoft.SemanticKernel.Connectors.InMemory;
var collection = new InMemoryVectorStoreRecordCollection<string, Hotel>("skhotels");
Recherche de propriété de clé et de vecteur
Par défaut, le connecteur In-Memory Vector Store lit les valeurs des clés et des vecteurs à l’aide de la réflexion. Les clés et les vecteurs sont supposés être des propriétés directes sur le modèle de données.
Si un modèle de données est requis qui a une structure où les clés et les vecteurs ne sont pas des propriétés directes du modèle de données, il est possible de fournir des fonctions pour lire les valeurs de ces derniers.
Lors de l’utilisation de ce paramètre, il est également nécessaire de fournir un VectorStoreRecordDefinition
afin que les informations sur la taille de dimension vectorielle et la fonction de distance puissent être communiquées au magasin vectoriel In-Memory.
var collection = new InMemoryVectorStoreRecordCollection<string, MyDataModel>(
"mydata",
new()
{
VectorStoreRecordDefinition = vectorStoreRecordDefinition,
KeyResolver = (record) => record.Key,
VectorResolver = (vectorName, record) => record.Vectors[vectorName]
});
private class MyDataModel
{
public string Key { get; set; }
public Dictionary<string, ReadOnlyMemory<float>> Vectors { get; set; }
}
Vue d’ensemble
Le connecteur magasin de vecteurs en mémoire est une implémentation de magasin de vecteurs fournie par le noyau sémantique qui n’utilise aucune base de données externe et stocke les données en mémoire. Ce magasin de vecteurs est utile pour les scénarios de prototypage ou pour les opérations en mémoire à haute vitesse requises.
Le connecteur présente les caractéristiques suivantes.
Zone Fonctionnalités | Support |
---|---|
Mappages de collection à | Dictionnaire en mémoire |
Types de propriétés de clé pris en charge | Tout élément autorisé à être une clé de dictée, consultez la documentation python pour plus d’informations ici |
Types de propriétés de données pris en charge | Tout type |
Types de propriétés vectorielles pris en charge | liste[float | int] | tableau numpy |
Types d’index pris en charge | Plat |
Fonctions de distance prises en charge |
|
Prend en charge plusieurs vecteurs dans un enregistrement | Oui |
"La fonctionnalité is_filterable est-elle prise en charge ?" | Oui |
La fonctionnalité "is_full_text_searchable" est-elle prise en charge ? | Oui |
Mise en route
Ajoutez le package de noyau sémantique à votre projet.
pip install semantic-kernel
Vous pouvez créer le magasin et les collections à partir de là, ou créer les collections directement.
Dans les extraits de code ci-dessous, il est supposé que vous disposez d’une classe de modèle de données définie sous le nom « DataModel ».
from semantic_kernel.connectors.memory.in_memory import InMemoryVectorStore
vector_store = InMemoryVectorStore()
vector_collection = vector_store.get_collection("collection_name", DataModel)
Il est possible de construire une référence directe à une collection nommée.
from semantic_kernel.connectors.memory.in_memory import InMemoryCollection
vector_collection = InMemoryCollection("collection_name", DataModel)
Bientôt disponible
Plus d’informations prochainement.