Udostępnij za pośrednictwem


Korzystanie z łącznika SQLite Vector Store (wersja zapoznawcza)

Ostrzeżenie

Funkcja sklepu Sqlite Vector Store jest dostępna w wersji zapoznawczej, a ulepszenia wymagające zmian powodujących niezgodność mogą nadal występować w ograniczonych okolicznościach przed wydaniem.

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.

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 Wsparcie
Mapowania kolekcji na Tabela SQLite
Obsługiwane typy właściwości kluczy
  • int (integer)
  • długi
  • sznurek
Obsługiwane typy właściwości danych
  • int (integer)
  • długi
  • krótki
  • sznurek
  • Bool
  • liczba zmiennoprzecinkowa
  • podwójny
  • byte[]
Obsługiwane typy właściwości wektorów
  • ReadOnlyMemory<float>
  • Osadzanie<float>
  • float[]
Obsługiwane typy indeksów Nie dotyczy
Obsługiwane funkcje odległości
  • CosineDistance
  • ManhattanDistance
  • EuclideanDistance
Obsługiwane klauzule filtru
  • EqualTo
Obsługuje wiele wektorów w rekordzie Tak
Czy funkcja IsIndexed jest obsługiwana? Nie.
Czy funkcja FullTextIndexed jest obsługiwana? Nie.
Czy StorageName jest obsługiwany? Tak
Obsługiwane jest wyszukiwanie hybrydowe? Nie.

Wprowadzenie

Dodaj pakiet NuGet SQLite Vector Store Connector do projektu.

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

Magazyn wektorów można dodać do kontenera IServiceCollection wstrzykiwania zależności przy użyciu metod rozszerzających udostępnianych przez Semantic Kernel.

using Microsoft.Extensions.DependencyInjection;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSqliteVectorStore(_ => "Data Source=:memory:");
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

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

Instancję magazynu wektorów SQLite można stworzyć bezpośrednio.

using Microsoft.SemanticKernel.Connectors.SqliteVec;

var vectorStore = new SqliteVectorStore("Data Source=:memory:");

Istnieje możliwość utworzenia bezpośredniego odwołania do nazwanej kolekcji.

using Microsoft.SemanticKernel.Connectors.SqliteVec;

var collection = new SqliteCollection<string, Hotel>("Data Source=:memory:", "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.

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 SqliteCollection pliku to skhotels, nazwa tabeli wirtualnej z wektorami będzie .vec_skhotels Można zastąpić nazwę tabeli wirtualnej, korzystając z właściwości SqliteVectorStoreOptions.VectorVirtualTableName lub SqliteCollectionOptions<TRecord>.VectorVirtualTableName.

Nadpisanie nazwy właściwości

Możesz podać własne nazwy właściwości do użycia w magazynie innym niż nazwy właściwości w modelu danych. Nadpisanie nazwy właściwości odbywa się przez ustawienie opcji StorageName za pomocą atrybutów właściwości modelu danych lub definicji rekordu.

Oto przykład modelu danych z StorageName ustawionym na jego atrybuty i sposób, w jaki będzie on reprezentowany w poleceniu SQLite.

using Microsoft.Extensions.VectorData;

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

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

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

    [VectorStoreVector(Dimensions: 4, DistanceFunction = 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.

JDBC

Łącznik JDBC może służyć do nawiązywania połączenia z bazą danych SQLite.