Sdílet prostřednictvím


Použití konektoru SQLite Vector Store (Preview)

Upozorňující

Funkce sémantického úložiště vektorů jádra je ve verzi Preview a vylepšení, která vyžadují zásadní změny, se můžou vyskytovat za omezených okolností před vydáním.

Přehled

Konektor SQLite Vector Store lze použít pro přístup k datům v SQLite a jejich správě. Konektor má následující charakteristiky.

Oblast funkcí Technická podpora
Kolekce map na Tabulka SQLite
Podporované typy vlastností klíče
  • ulong
  • string
Podporované typy datových vlastností
  • int
  • long
  • ulong
  • short
  • ushort
  • string
  • bool
  • float (číslo s plovoucí řádovou čárkou)
  • double
  • decimal
  • byte[]
Podporované typy vektorových vlastností ReadOnlyMemory<float>
Podporované typy indexů
Podporované funkce vzdálenosti
  • KosineDistance
  • ManhattanDistance
  • EuclideanDistance
Podporuje více vektorů v záznamu. Ano
Je podporováno Filtrování? No
Podporuje se IsFullTextSearchable? No
StoragePropertyName se podporuje? Ano

Omezení

SQLite nepodporuje funkci vektorového vyhledávání. Nejprve by se mělo načíst rozšíření SQLite, aby bylo možné povolit funkci vektorového vyhledávání. Aktuální implementace konektoru SQLite je kompatibilní s rozšířením sqlite-vec vector search.

Pokud chcete rozšíření nainstalovat, použijte jednu z vydaných verzí s konkrétní zvolenou verzí rozšíření. Pomocí skriptu je možné získat předem zkompilovanou verzi install.sh . Tento skript vytvoří vec0.dll, který musí být umístěn ve stejné složce jako spuštěná aplikace. To aplikaci umožní volat metodu SqliteConnection.LoadExtension("vec0") a načíst rozšíření vektorového vyhledávání.

Začínáme

Přidejte do projektu balíček NuGet konektoru SQLite Vector Store.

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

Do kontejneru IServiceCollection injektáže závislostí můžete přidat vektorové úložiště pomocí rozšiřujících metod poskytovaných sémantickým jádrem.

V tomto případě se inicializuje instance Microsoft.Data.Sqlite.SqliteConnection třídy, připojení se otevře a rozšíření vektorového vyhledávání se načte. Výchozí název rozšíření vektorového vyhledávání je vec0, ale lze jej přepsat pomocí SqliteVectorStoreOptions.VectorSearchExtensionName vlastnosti.

using Microsoft.SemanticKernel;

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

K dispozici jsou také metody rozšíření, které nepoužívají žádné parametry. Vyžadují samostatnou registraci instance Microsoft.Data.Sqlite.SqliteConnection třídy v kontejneru injektáže závislostí.

V tomto případě se připojení otevře pouze v případě, že nebylo otevřeno dříve a metoda rozšíření předpokládá, že rozšíření vektorového vyhledávání bylo již načteno pro zaregistrovanou Microsoft.Data.Sqlite.SqliteConnection instanci.

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();

Instanci SQLite Vector Store můžete vytvořit přímo.

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);

Je možné vytvořit přímý odkaz na pojmenovanou kolekci.

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");

Mapování dat

Konektor SQLite Vector Store poskytuje výchozí mapovač při mapování z datového modelu do úložiště. Tento mapovač provede přímý převod seznamu vlastností datového modelu na sloupce v nástroji SQLite.

Je také možné přepsat výchozí chování mapper poskytnutím vlastního mapperu SqliteVectorStoreRecordCollectionOptions<TRecord>.DictionaryCustomMapper prostřednictvím vlastnosti.

S rozšířením vektorového vyhledávání se vektory ukládají ve virtuálních tabulkách odděleně od klíčových a datových vlastností. Ve výchozím nastavení bude virtuální tabulka s vektory používat stejný název jako tabulka s klíčovými a datovými vlastnostmi, ale s předponou vec_ . Pokud je například název SqliteVectorStoreRecordCollection skhotelskolekce, bude vec_skhotelsnázev virtuální tabulky s vektory . Název virtuální tabulky je možné přepsat pomocí SqliteVectorStoreOptions.VectorVirtualTableName vlastností.SqliteVectorStoreRecordCollectionOptions<TRecord>.VectorVirtualTableName

Přepsání názvu vlastnosti

Názvy vlastností můžete přepsat tak, aby se používaly v úložišti, které se liší od názvů vlastností datového modelu. Přepsání názvu vlastnosti se provádí nastavením StoragePropertyName možnosti prostřednictvím atributů vlastností datového modelu nebo definice záznamu.

Tady je příklad datového modelu se StoragePropertyName sadou jeho atributů a způsobu, jakým bude tento model reprezentován v dotazu SQLite.

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
);

Již brzy

Další informace budou brzy k dispozici.

Již brzy

Další informace budou brzy k dispozici.