Freigeben über


Verwenden des In-Memory-Connectors (Vorschau)

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
  • ReadOnlyMemory<float>
  • Einbetten von<Float>
  • float[]
Unterstützte Indextypen Flach
Unterstützte Entfernungsfunktionen
  • KosinusSimilarität
  • CosineDistance
  • Punktprodukt-Ähnlichkeit
  • EuklideanDistance
Unterstützte Filterklauseln
  • AnyTagEqualTo
  • EqualTo
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
  • Kosinus-Ähnlichkeit
  • Kosinusabstand
  • Skalarprodukt-Ähnlichkeit
  • Euklidischer Abstand
  • Euklidischer Quadratabstand
  • Manhattan Entfernung
  • Hamming-Distanz
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.