Freigeben über


Verwenden des SQLite Vector Store-Connectors (Vorschau)

Warnung

Die Sqlite-Vector-Store-Funktionalität befindet sich in der Vorschau, und Verbesserungen, die inkopatible Änderungen erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung erfolgen.

Warnung

Die Funktionalität des semantischen Kernel-Vektorspeichers befindet sich in der Vorschau, und Verbesserungen, die einschneidende Änderungen erfordern, können unter bestimmten begrenzten Umständen noch vor der Veröffentlichung auftreten.

Warnung

Die Funktionalität des semantischen Kernel-Vektorspeichers befindet sich in der Vorschau, und Verbesserungen, die einschneidende Änderungen erfordern, können unter bestimmten begrenzten Umständen noch vor der Veröffentlichung auftreten.

Übersicht

Der SQLite Vector Store-Connector kann verwendet werden, um auf Daten in SQLite zuzugreifen und sie zu verwalten. Der Verbinder weist die folgenden Merkmale auf.

Funktionsbereich Unterstützung
Zuordnungen von Sammlungen SQLite-Tabelle
Unterstützte Schlüsseleigenschaftentypen
  • INT
  • lang
  • Zeichenfolge
Unterstützte Daten-Eigenschaftstypen
  • INT
  • lang
  • kurz
  • Zeichenfolge
  • Boolesch
  • Schwimmkörper
  • doppelt
  • Byte[]
Unterstützte Typen von Vektoreigenschaften
  • ReadOnlyMemory<float>
  • Einbetten von<Float>
  • float[]
Unterstützte Indextypen N/V
Unterstützte Entfernungsfunktionen
  • CosineDistance
  • ManhattanDistance
  • EuklideanDistance
Unterstützte Filterklauseln
  • EqualTo
Unterstützt mehrere Vektoren in einem Datensatz Ja
Wird Indized unterstützt? Nein
WirdFullTextIndexed unterstützt? Nein
Wird StorageName unterstützt? Ja
HybridSearch wird unterstützt? Nein

Erste Schritte

Fügen Sie dem Projekt das NuGet-Paket des SQLite Vector Store-Connectors hinzu.

dotnet add package Microsoft.SemanticKernel.Connectors.SqliteVec --prerelease

Sie können den Vektorspeicher mithilfe von vom semantischen Kernel bereitgestellten Erweiterungsmethoden zum Dependency-Injection-Container IServiceCollection hinzufügen.

using Microsoft.Extensions.DependencyInjection;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSqliteVectorStore(_ => "Data Source=:memory:");
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSqliteVectorStore(_ => "Data Source=:memory:")

Sie können eine SQLite Vector Store-Instanz direkt erstellen.

using Microsoft.SemanticKernel.Connectors.SqliteVec;

var vectorStore = new SqliteVectorStore("Data Source=:memory:");

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

using Microsoft.SemanticKernel.Connectors.SqliteVec;

var collection = new SqliteCollection<string, Hotel>("Data Source=:memory:", "skhotels");

Datenzuordnung

Der SQLite Vector Store-Connector bietet bei der Zuordnung vom Datenmodell zum Speicher einen Standard-Mapper an. Dieser Mapper führt eine direkte Konvertierung der Liste der Eigenschaften im Datenmodell in die Spalten in SQLite durch.

Mit der Vektorsucherweiterung werden Vektoren in virtuellen Tabellen getrennt von Schlüssel- und Dateneigenschaften gespeichert. Standardmäßig verwendet die virtuelle Tabelle mit Vektoren denselben Namen wie die Tabelle mit Schlüssel- und Dateneigenschaften, aber mit einem vec_ Präfix. Wenn der Auflistungsname SqliteCollection beispielsweise lautet skhotels, lautet vec_skhotelsder Name der virtuellen Tabelle mit Vektoren. Es ist möglich, den Namen der virtuellen Tabelle durch Verwendung der SqliteVectorStoreOptions.VectorVirtualTableName- oder SqliteCollectionOptions<TRecord>.VectorVirtualTableName-Eigenschaft zu überschreiben.

Außerkraftsetzung des Eigenschaftsnamens

Sie können Eigenschaftsnamen überschreiben, die im Speicher verwendet werden sollen und sich von den Eigenschaftsnamen im Datenmodell unterscheiden. Die Außerkraftsetzung des Eigenschaftennamens erfolgt durch Festlegen der StorageName Option über die Eigenschaftenattribute des Datenmodells oder die Datensatzdefinition.

Hier ist ein Beispiel für ein Datenmodell, dessen Attribute auf StorageName gesetzt sind und wie das in einem SQLite-Befehl dargestellt wird.

using Microsoft.Extensions.VectorData;

public class Hotel
{
    [VectorStoreKey]
    public ulong HotelId { get; set; }

    [VectorStoreData(StorageName = "hotel_name")]
    public string? HotelName { get; set; }

    [VectorStoreData(StorageName = "hotel_description")]
    public string? Description { get; set; }

    [VectorStoreVector(Dimensions: 4, DistanceFunction = DistanceFunction.CosineDistance)]
    public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
CREATE TABLE Hotels (
    HotelId INTEGER PRIMARY KEY,
    hotel_name TEXT,
    hotel_description TEXT
);

CREATE VIRTUAL TABLE vec_Hotels (
    HotelId INTEGER PRIMARY KEY,
    DescriptionEmbedding FLOAT[4] distance_metric=cosine
);

In Kürze verfügbar

Weitere Informationen werden in Kürze verfügbar sein.

JDBC

Der JDBC-Connector kann verwendet werden, um eine Verbindung mit SQLite herzustellen.