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 |
|
Podporované typy datových vlastností |
|
Podporované typy vektorových vlastností | ReadOnlyMemory<float> |
Podporované typy indexů | – |
Podporované funkce vzdálenosti |
|
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
skhotels
kolekce, bude vec_skhotels
ná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.