Delen via


De SQLite Vector Store-connector gebruiken (preview)

Waarschuwing

De Semantische Kernel Vector Store-functionaliteit is in preview en verbeteringen waarvoor wijzigingen die fouten veroorzaken, kunnen nog steeds in beperkte omstandigheden optreden voordat ze worden uitgebracht.

Overzicht

De SQLite Vector Store-connector kan worden gebruikt voor toegang tot en beheer van gegevens in SQLite. De verbindingslijn heeft de volgende kenmerken.

Functiegebied Ondersteuning
Verzamelingstoewijzingen aan SQLite-tabel
Ondersteunde sleuteleigenschapstypen
  • ulong
  • tekenreeks
Ondersteunde gegevenseigenschapstypen
  • int
  • long
  • ulong
  • kort
  • ushort
  • tekenreeks
  • bool
  • zwevend
  • dubbel
  • decimal
  • byte[]
Ondersteunde vectoreigenschappentypen ReadOnlyMemory<float>
Ondersteunde indextypen N.v.t.
Ondersteunde afstandsfuncties
  • CosineDistance
  • ManhattanDistance
  • EuclideanDistance
Ondersteunt meerdere vectoren in een record Ja
Wordt Filterable ondersteund? Nee
WordtFullTextSearchable ondersteund? Nee
Ondersteunde StoragePropertyName? Ja

Beperkingen

SQLite biedt geen ondersteuning voor out-of-the-box vectorzoekopdrachten. De SQLite-extensie moet eerst worden geladen om vectorzoekfunctionaliteit in te schakelen. De huidige implementatie van de SQLite-connector is compatibel met de zoekextensie sqlite-vec vector.

Als u de extensie wilt installeren, gebruikt u een van de releases met de specifieke extensieversie van uw keuze. Het is mogelijk om een vooraf gecompileerde versie met het install.sh script op te halen. Dit script produceert vec0.dll, die zich in dezelfde map moet bevinden als de actieve toepassing. Hierdoor kan de toepassing de SqliteConnection.LoadExtension("vec0") methode aanroepen en de vectorzoekextensie laden.

Aan de slag

Voeg het NuGet-pakket SQLite Vector Store-connector toe aan uw project.

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

U kunt het vectorarchief toevoegen aan de IServiceCollection container voor afhankelijkheidsinjectie met behulp van extensiemethoden van Semantic Kernel.

In dit geval wordt een exemplaar van de Microsoft.Data.Sqlite.SqliteConnection klasse geïnitialiseerd, wordt de verbinding geopend en wordt de vectorzoekextensie geladen. De standaardnaam van de vectorzoekextensie is vec0, maar kan worden overschreven met behulp van de SqliteVectorStoreOptions.VectorSearchExtensionName eigenschap.

using Microsoft.SemanticKernel;

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

Extensiemethoden waarvoor geen parameters worden gebruikt, worden ook opgegeven. Hiervoor moet een exemplaar van de Microsoft.Data.Sqlite.SqliteConnection klasse afzonderlijk worden geregistreerd bij de container voor afhankelijkheidsinjectie.

In dit geval wordt de verbinding alleen geopend als deze nog niet is geopend en wordt ervan uitgegaan dat de vectorzoekextensie al is geladen voor het geregistreerde Microsoft.Data.Sqlite.SqliteConnection exemplaar.

using Microsoft.Data.Sqlite;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<SqliteConnection>(sp => 
{
    var connection = new SqliteConnection("Data Source=:memory:");

    connection.LoadExtension("vector-search-extension-name");

    return connection;
});

builder.Services.AddSqliteVectorStore();

U kunt rechtstreeks een SQLite Vector Store-exemplaar maken.

using Microsoft.Data.Sqlite;
using Microsoft.SemanticKernel.Connectors.Sqlite;

var connection = new SqliteConnection("Data Source=:memory:");

connection.LoadExtension("vector-search-extension-name");

var vectorStore = new SqliteVectorStore(connection);

Het is mogelijk om een directe verwijzing naar een benoemde verzameling te maken.

using Microsoft.Data.Sqlite;
using Microsoft.SemanticKernel.Connectors.Sqlite;

var connection = new SqliteConnection("Data Source=:memory:");

connection.LoadExtension("vector-search-extension-name");

var collection = new SqliteVectorStoreRecordCollection<Hotel>(connection, "skhotels");

Gegevenstoewijzing

De SQLite Vector Store-connector biedt een standaardtoewijzingsfunctie bij het toewijzen van het gegevensmodel aan opslag. Deze mapper voert een directe conversie uit van de lijst met eigenschappen in het gegevensmodel naar de kolommen in SQLite.

Het is ook mogelijk om het standaardgedrag van mapper te overschrijven door een aangepaste mapper via de SqliteVectorStoreRecordCollectionOptions<TRecord>.DictionaryCustomMapper eigenschap op te geven.

Met de vectorzoekuitbreiding worden vectoren opgeslagen in virtuele tabellen, los van sleutel- en gegevenseigenschappen. De virtuele tabel met vectoren gebruikt standaard dezelfde naam als de tabel met sleutel- en gegevenseigenschappen, maar met een vec_ voorvoegsel. Als de naam SqliteVectorStoreRecordCollection van de verzameling bijvoorbeeld is skhotels, is vec_skhotelsde naam van de virtuele tabel met vectoren. Het is mogelijk om de naam van de virtuele tabel te overschrijven met behulp van de SqliteVectorStoreOptions.VectorVirtualTableName of SqliteVectorStoreRecordCollectionOptions<TRecord>.VectorVirtualTableName eigenschappen.

Eigenschapsnaam overschrijven

U kunt eigenschapsnamen overschrijven voor gebruik in opslag die afwijken van de eigenschapsnamen in het gegevensmodel. De eigenschapsnaam wordt overschreven door de StoragePropertyName optie in te stellen via de eigenschapskenmerken of recorddefinitie van het gegevensmodel.

Hier volgt een voorbeeld van een gegevensmodel dat StoragePropertyName is ingesteld op de kenmerken ervan en hoe dit wordt weergegeven in de SQLite-query.

using Microsoft.Extensions.VectorData;

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

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

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

    [VectorStoreRecordVector(Dimensions: 4, 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
);

Binnenkort beschikbaar

Binnenkort meer informatie.

Binnenkort beschikbaar

Binnenkort meer informatie.