Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Warnung
Die In-Memory Vector Store-Funktionalität befindet sich in der Vorschau, und Verbesserungen, die invasive Änderungen erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung auftreten.
Warnung
Die Funktionalität des Semantic Kernel-Vektorspeichers befindet sich in der Testphase, und Verbesserungen, die inkompatible Änderungen erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung auftreten.
Warnung
Die Funktionalität des Semantic Kernel-Vektorspeichers befindet sich in der Testphase, und Verbesserungen, die inkompatible Änderungen erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung auftreten.
Übersicht
Der In-Memory-Vektorspeicher-Connector ist eine Vom semantischen Kernel bereitgestellte Vektorspeicherimplementierung, die keine externe Datenbank verwendet und Daten im Arbeitsspeicher speichert. Dieser Vektorspeicher ist nützlich für Prototypszenarien oder für Hochgeschwindigkeitsvorgänge im Arbeitsspeicher.
Der Verbinder weist die folgenden Merkmale auf.
| Funktionsbereich | Unterstützung |
|---|---|
| Sammlungszuordnungen | Im Arbeitsspeicher gespeichertes Wörterbuch |
| Unterstützte Schlüsseleigenschaftentypen | Jeder Typ, der verglichen werden kann |
| Unterstützte Dateneigenschaftstypen | Beliebiger Typ |
| Unterstützte Eigenschaftstypen von Vektoren |
|
| Unterstützte Indextypen | Flach |
| Unterstützte Entfernungsfunktionen |
|
| Unterstützte Filterklauseln |
|
| Unterstützt mehrere Vektoren in einem Datensatz | Ja |
| Wird Indized unterstützt? | Ja |
| WirdFullTextIndexed unterstützt? | Ja |
| Wird StorageName unterstützt? | Nein, da die Speicherung im Speicher erfolgt und die Datenwiederverwendung daher nicht möglich ist, ist eine benutzerdefinierte Benennung nicht anwendbar. |
| HybridSearch wird unterstützt? | Nein |
Erste Schritte
Fügen Sie ihrem Projekt das Semantik Kernel Core-Nuget-Paket hinzu.
dotnet add package Microsoft.SemanticKernel.Connectors.InMemory --prerelease
Sie können den Vektorspeicher entweder dem Abhängigkeitsinjektionscontainer, der für KernelBuilder verfügbar ist, oder dem IServiceCollection Abhängigkeitsinjektionscontainer mithilfe von Erweiterungsmethoden hinzufügen, die vom Semantischen Kernel bereitgestellt werden.
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();
Sie können eine InMemory Vector Store-Instanz direkt erstellen.
using Microsoft.SemanticKernel.Connectors.InMemory;
var vectorStore = new InMemoryVectorStore();
Es ist möglich, einen direkten Verweis auf eine benannte Auflistung zu erstellen.
using Microsoft.SemanticKernel.Connectors.InMemory;
var collection = new InMemoryCollection<string, Hotel>("skhotels");
Übersicht
Warnung
Der In-Memory Vector Store unterstützt benutzerdefinierte Filter, die als Python-Lambda-Funktionen ausgedrückt werden können, diese Funktionen werden im gleichen Prozess wie die Hauptanwendung ausgeführt und können daher beliebigen Code ausführen. Wir filtern nach bestimmten zulässigen Vorgängen, aber Sie sollten nicht zulassen, dass Filter von nicht vertrauenswürdigen Quellen festgelegt werden, einschließlich der LLM-Eingaben. Weitere Informationen finden Sie im Abschnitt "Filterung ".
Der In-Memory-Vektorspeicher-Connector ist eine Vom semantischen Kernel bereitgestellte Vektorspeicherimplementierung, die keine externe Datenbank verwendet und Daten im Arbeitsspeicher speichert. Dieser Vektorspeicher ist nützlich für Prototypszenarien oder für Hochgeschwindigkeitsvorgänge im Arbeitsspeicher.
Der Verbinder weist die folgenden Merkmale auf.
| Funktionsbereich | Unterstützung |
|---|---|
| Sammlungszuordnungen | Im Arbeitsspeicher gespeichertes Wörterbuch |
| Unterstützte Schlüsseleigenschaftentypen | Alles, was als Dictionary-Schlüssel erlaubt ist, finden Sie in der Python-Dokumentation. Details hier. |
| Unterstützte Dateneigenschaftstypen | Beliebiger Typ |
| Unterstützte Eigenschaftstypen von Vektoren | list[float | int] | numpy array |
| Unterstützte Indextypen | Flach |
| Unterstützte Entfernungsfunktionen |
|
| Unterstützt mehrere Vektoren in einem Datensatz | Ja |
| Wird is_filterable unterstützt? | Ja |
| Wird is_full_text_searchable unterstützt? | Ja |
Erste Schritte
Fügen Sie Ihrem Projekt das Semantic Kernel-Paket hinzu.
pip install semantic-kernel
Sie können den Speicher und die Sammlungen von dort aus erstellen oder die Sammlungen direkt erstellen.
In den folgenden Codeausschnitten wird davon ausgegangen, dass Sie eine Datenmodellklasse mit dem Namen "DataModel" definiert haben.
from semantic_kernel.connectors.in_memory import InMemoryVectorStore
vector_store = InMemoryVectorStore()
vector_collection = vector_store.get_collection(record_type=DataModel, collection_name="collection_name")
Es ist möglich, einen direkten Verweis auf eine benannte Auflistung zu erstellen.
from semantic_kernel.connectors.in_memory import InMemoryCollection
vector_collection = InMemoryCollection(record_type=DataModel, collection_name="collection_name")
Filterung
Warnung
Der In-Memory Vector Store unterstützt benutzerdefinierte Filter, die als Python-Lambda-Funktionen ausgedrückt werden können, diese Funktionen werden im gleichen Prozess wie die Hauptanwendung ausgeführt und können daher beliebigen Code ausführen. Wir filtern nach bestimmten zulässigen Vorgängen, aber Sie sollten nicht zulassen, dass Filter von nicht vertrauenswürdigen Quellen festgelegt werden, einschließlich der LLM-Eingaben.
Der In-Memory Connector verwendet einen Zulassungslistenansatz für die Filtersicherheit. Nur die folgenden Vorgänge sind in Filterausdrücken zulässig:
Zulässige Vorgänge
| Kategorie | Zulässige Vorgänge |
|---|---|
| Vergleiche |
==, !=, <, <=, >, >=, in, not in, is, is not |
| Boolesche Vorgänge |
and, ornot |
| Datenzugriff | Attributzugriff (z. B. x.field), Indexzugriff (z. B. x['field']), Slicing |
| Literale | Konstanten, Listen, Tupel, Sets, Wörterbücher |
| Grundlegende Arithmetik |
+, , -*, /, , %// |
Erlaubte Funktionen
Die folgenden integrierten Funktionen und Methoden können in Filterausdrücken verwendet werden:
-
Typkonvertierung:
str,int,floatbool -
Aggregation:
len,abs,min,max,sum,any,all -
String-Methoden:
lower, ,upper,stripstartswith, ,endswithcontains -
Wörterbuchmethoden:
get,keys,valuesitems
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']")
In Kürze verfügbar
Weitere Informationen werden in Kürze verfügbar sein.