Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Avertissement
La fonctionnalité In-Memory Vector Store 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.
Avertissement
La fonctionnalité de magasin de vecteurs du noyau sémantique est en préversion et des améliorations nécessitant des modifications avec ruptures peuvent toujours se produire dans certains cas spécifiques avant la mise en production.
Avertissement
La fonctionnalité de magasin de vecteurs du noyau sémantique est en préversion et des améliorations nécessitant des modifications avec ruptures peuvent toujours se produire dans certains cas spécifiques 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.
| Espace des fonctionnalités | Soutien |
|---|---|
| Correspondance de la 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 |
|
| 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-ce queIndexed est pris en charge ? | Oui |
| Est-ce queFullTextIndexed est pris en charge ? | Oui |
| Le StorageName est-il 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. |
| HybridSearch est-il pris en charge ? | Non |
Mise en route
Ajoutez le package NuGet Semantic Kernel Core à votre projet.
dotnet add package Microsoft.SemanticKernel.Connectors.InMemory --prerelease
Vous pouvez ajouter le stockage de vecteurs au conteneur d’injection de dépendances disponible sur le KernelBuilder, ou au conteneur d’injection de dépendances en utilisant les méthodes d’extension fournies par le noyau sémantique avec le IServiceCollection.
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel
.CreateBuilder();
kernelBuilder.Services
.AddInMemoryVectorStore();
using Microsoft.Extensions.DependencyInjection;
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 InMemoryCollection<string, Hotel>("skhotels");
Vue d’ensemble
Avertissement
La In-Memory Vector Store prend en charge les filtres personnalisés qui peuvent être exprimés en tant que fonctions lambda Python, ces fonctions sont exécutées dans le même processus que l’application principale et peuvent donc exécuter du code arbitraire. Nous filtrons pour certaines opérations autorisées, mais vous ne devez pas laisser les filtres être définis par des sources non approuvées, y compris par les entrées LLM. Pour plus d’informations , consultez la section Filtrage.
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.
| Espace des fonctionnalités | Soutien |
|---|---|
| Correspondance de la collection à | Dictionnaire en mémoire |
| Types de propriétés de clé pris en charge | Tout élément autorisé à être une clé de dictionnaire, 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.in_memory import InMemoryVectorStore
vector_store = InMemoryVectorStore()
vector_collection = vector_store.get_collection(record_type=DataModel, collection_name="collection_name")
Il est possible de construire une référence directe à une collection nommée.
from semantic_kernel.connectors.in_memory import InMemoryCollection
vector_collection = InMemoryCollection(record_type=DataModel, collection_name="collection_name")
Filtrage
Avertissement
La In-Memory Vector Store prend en charge les filtres personnalisés qui peuvent être exprimés en tant que fonctions lambda Python, ces fonctions sont exécutées dans le même processus que l’application principale et peuvent donc exécuter du code arbitraire. Nous filtrons pour certaines opérations autorisées, mais vous ne devez pas laisser les filtres être définis par des sources non approuvées, y compris par les entrées LLM.
Le connecteur In-Memory utilise une approche de liste blanche pour la sécurité des filtres. Seules les opérations suivantes sont autorisées dans les expressions de filtre :
Opérations autorisées
| Catégorie | Opérations autorisées |
|---|---|
| Comparaisons |
==, !=, <, <=, >, >=, in, not in, is, is not |
| Opérations booléennes |
and, ornot |
| Accès aux données | Accès aux attributs (par exemple, x.field), accès par indice (par exemple, x['field']), découpage |
| littéraux | Constantes, listes, tuples, jeux, dictionnaires |
| Arithmétique de base |
+, , -, */, , %// |
Fonctions autorisées
Les fonctions et méthodes intégrées suivantes peuvent être utilisées dans les expressions de filtre :
-
Conversion de type :
str, ,intfloat,bool -
Agrégation :
len,abs,min,max,sum,any,all -
Méthodes de chaîne :
lower, ,upperstrip,startswith,endswithcontains -
Méthodes de dictionnaire :
get,keys,values,items
Examples
# Simple equality filter
results = await collection.search(vector, filter="lambda x: x.category == 'electronics'")
# Numeric comparison
results = await collection.search(vector, filter="lambda x: x.price < 100")
# Boolean combination
results = await collection.search(vector, filter="lambda x: x.in_stock and x.rating >= 4.0")
# String method
results = await collection.search(vector, filter="lambda x: x.name.startswith('A')")
# Membership test
results = await collection.search(vector, filter="lambda x: x.status in ['active', 'pending']")
Bientôt disponible
Plus d’informations prochainement.