Delen via


De SQLite Vector Store-connector gebruiken (preview)

Waarschuwing

De functionaliteit van de Semantische Kernel Vector Store is in preview en verbeteringen die ingrijpende wijzigingen vereisen, kunnen nog steeds in beperkte omstandigheden plaatsvinden voordat deze wordt 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
Verzameling komt overeen met SQLite-tabel
Ondersteunde sleuteleigenschapstypen
  • ulong
  • tekenreeks
Ondersteunde gegevenseigenschapstypen
  • int
  • lang
  • ulong
  • kort
  • ushort
  • tekenreeks
  • bool
  • zwevend
  • dubbel
  • decimaal
  • byte[]
Ondersteunde vectoreigenschappentypen ReadOnlyMemory<float>
Ondersteunde indextypen N.v.t.
Ondersteunde afstandsfuncties
  • CosineDistance
  • ManhattanDistance
  • EuclideanDistance
Ondersteunde filterclausules
  • EqualTo
Ondersteunt meerdere vectoren in een record Ja
Wordt Filterable ondersteund? Nee
WordtFullTextSearchable ondersteund? Nee
Wordt StoragePropertyName ondersteund? Ja
HybridSearch ondersteund? Nee

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 vectorzoekextensie sqlite-vec.

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 eerder is geopend, en de extensiemethode gaat ervan uit dat de vectorzoekextensie al geladen is 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 standaardtoewijzing bij het in kaart brengen van het gegevensmodel naar 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 overschrijving van de eigenschapsnaam wordt gedaan door de StoragePropertyName optie in te stellen via de gegevensmodel eigenschapskenmerken of de definitie van het record.

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.

JDBC

De JDBC--connector kan worden gebruikt om verbinding te maken met SQLite.