Korzystanie z łącznika SQLite Vector Store (wersja zapoznawcza)
Ostrzeżenie
Funkcja semantycznego magazynu wektorów jądra jest dostępna w wersji zapoznawczej, a ulepszenia wymagające zmian powodujących niezgodność mogą nadal występować w ograniczonych okolicznościach przed wydaniem.
Omówienie
Łącznik SQLite Vector Store może służyć do uzyskiwania dostępu do danych w programie SQLite i zarządzania nimi. Łącznik ma następujące cechy.
Obszar funkcji | Pomoc techniczna |
---|---|
Mapowania kolekcji na | Tabela SQLite |
Obsługiwane typy właściwości kluczy |
|
Obsługiwane typy właściwości danych |
|
Obsługiwane typy właściwości wektorów | ReadOnlyMemory<float> |
Obsługiwane typy indeksów | Nie dotyczy |
Obsługiwane funkcje odległości |
|
Obsługiwane klauzule filtru |
|
Obsługuje wiele wektorów w rekordzie | Tak |
Czy filtrowanie jest obsługiwane? | Nie. |
Czy jest obsługiwany element IsFullTextSearchable? | Nie. |
Obsługiwana nazwa_właściwości_magazynu? | Tak |
Ograniczenia
SqLite nie obsługuje wyszukiwania wektorowego poza polem. Aby włączyć funkcję wyszukiwania wektorowego, należy najpierw załadować rozszerzenie SQLite. Bieżąca implementacja łącznika SQLite jest zgodna z rozszerzeniem wyszukiwania wektorów sqlite-vec .
Aby zainstalować rozszerzenie, użyj jednej z wersji z wybraną określoną wersją rozszerzenia. Istnieje możliwość pobrania wstępnie skompilowanej wersji za pomocą skryptu install.sh
. Ten skrypt spowoduje wygenerowanie vec0.dll
elementu , który musi znajdować się w tym samym folderze co uruchomiona aplikacja. Umożliwi to aplikacji wywołanie SqliteConnection.LoadExtension("vec0")
metody i załadowanie rozszerzenia wyszukiwania wektorowego.
Wprowadzenie
Dodaj pakiet NuGet łącznika SQLite Vector Store do projektu.
dotnet add package Microsoft.SemanticKernel.Connectors.Sqlite --prerelease
Magazyn wektorów można dodać do kontenera IServiceCollection
wstrzykiwania zależności przy użyciu metod rozszerzeń udostępnianych przez jądro semantyczne.
W takim przypadku wystąpienie Microsoft.Data.Sqlite.SqliteConnection
klasy zostanie zainicjowane, połączenie zostanie otwarte, a rozszerzenie wyszukiwania wektorowego zostanie załadowane. Domyślna nazwa rozszerzenia wyszukiwania wektorów to vec0
, ale można ją zastąpić za pomocą SqliteVectorStoreOptions.VectorSearchExtensionName
właściwości .
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSqliteVectorStore("Data Source=:memory:");
Dostępne są również metody rozszerzeń, które nie przyjmują parametrów. Wymagają one osobnego zarejestrowania Microsoft.Data.Sqlite.SqliteConnection
wystąpienia klasy w kontenerze wstrzykiwania zależności.
W takim przypadku połączenie zostanie otwarte tylko wtedy, gdy nie zostało otwarte wcześniej, a metoda rozszerzenia zakłada, że rozszerzenie wyszukiwania wektorowego zostało już załadowane dla zarejestrowanego Microsoft.Data.Sqlite.SqliteConnection
wystąpienia.
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();
Wystąpienie magazynu wektorów SQLite można skonstruować bezpośrednio.
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);
Istnieje możliwość utworzenia bezpośredniego odwołania do nazwanej kolekcji.
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");
Mapowanie danych
Łącznik SQLite Vector Store udostępnia domyślny maper podczas mapowania z modelu danych na magazyn. Ten maper wykonuje bezpośrednią konwersję listy właściwości modelu danych na kolumny w sqlite.
Istnieje również możliwość zastąpienia domyślnego zachowania mapera przez udostępnienie niestandardowego SqliteVectorStoreRecordCollectionOptions<TRecord>.DictionaryCustomMapper
mapera za pośrednictwem właściwości .
W przypadku rozszerzenia wyszukiwania wektorów wektory są przechowywane w tabelach wirtualnych, niezależnie od właściwości klucza i danych.
Domyślnie tabela wirtualna z wektorami będzie używać takiej samej nazwy jak tabela z właściwościami klucza i danych, ale z prefiksem vec_
. Jeśli na przykład nazwa kolekcji w SqliteVectorStoreRecordCollection
pliku to skhotels
, nazwa tabeli wirtualnej z wektorami będzie .vec_skhotels
Można zastąpić nazwę tabeli wirtualnej przy użyciu SqliteVectorStoreOptions.VectorVirtualTableName
właściwości lub SqliteVectorStoreRecordCollectionOptions<TRecord>.VectorVirtualTableName
.
Zastępowanie nazwy właściwości
Nazwy właściwości można zastąpić do użycia w magazynie, który różni się od nazw właściwości w modelu danych.
Zastępowanie nazwy właściwości odbywa się przez ustawienie StoragePropertyName
opcji za pomocą atrybutów właściwości modelu danych lub definicji rekordu.
Oto przykład modelu danych z ustawionymi atrybutami StoragePropertyName
i sposobem, w jaki będzie reprezentowany w zapytaniu 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
);
Wkrótce
Więcej informacji wkrótce.
Wkrótce
Więcej informacji wkrótce.