Verwenden des In-Memory-Konnektors (Vorschauversion)

Warnung

Die Funktionalität des In-Memory-Vektorspeichers befindet sich in der Vorschauversion, und Verbesserungen, die Breaking Changes erfordern, können in begrenzten Fällen noch vor der Veröffentlichung auftreten.

Warnung

Die Funktionalität des Semantischer Kernel Vector Store befindet sich in der Vorschau, und Verbesserungen, die Änderungen erfordern, können in begrenzten Fällen vor der Veröffentlichung noch auftreten.

Warnung

Die Funktionalität des Semantischer Kernel Vector Store befindet sich in der Vorschau, und Verbesserungen, die Änderungen erfordern, können in begrenzten Fällen vor der Veröffentlichung noch 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.

Featurebereich Unterstützung
Sammlung wird zugeordnet zu Im Arbeitsspeicher gespeichertes Wörterbuch
Unterstützte Schlüsseleigenschaftstypen Jeder Typ, der verglichen werden kann
Unterstützte Dateneigenschaftstypen Beliebiger Typ
Unterstützte Eigenschaftstypen von Vektoren
  • ReadOnlyMemory<-Float>
  • Einbetten<-Float>
  • float[]
Unterstützte Indextypen Flach
Unterstützte Entfernungsfunktionen
  • CosineSimilarity
  • CosineDistance
  • DotProductSimilarity
  • 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 CommunityToolkit.VectorData.InMemory

Sie können den Vektorspeicher zum Abhängigkeitsinjektionscontainer, der im KernelBuilder verfügbar ist, oder zum IServiceCollection-Abhängigkeitsinjektionscontainer hinzufügen, indem Sie Erweiterungsmethoden verwenden, die vom Konnektorpaket bereitgestellt werden.

using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder();
kernelBuilder.Services
    .AddInMemoryVectorStore();
using Microsoft.Extensions.DependencyInjection;

// 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 CommunityToolkit.VectorData.InMemory;

var vectorStore = new InMemoryVectorStore();

Es ist möglich, einen direkten Verweis auf eine benannte Auflistung zu erstellen.

using CommunityToolkit.VectorData.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.

Featurebereich Unterstützung
Sammlung wird zugeordnet zu Im Arbeitsspeicher gespeichertes Wörterbuch
Unterstützte Schlüsseleigenschaftstypen 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
  • Euclidische quadrierte Distanz
  • Manhattan Entfernung
  • Hammingabstand
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 Semantischer 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-Konnektor 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, Sätze, 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.