Dela via


Använda SQLite Vector Store-anslutningsappen (förhandsversion)

Varning

Funktionen Semantic Kernel Vector Store är i förhandsversion, och förbättringar som kräver icke-bakåtkompatibla ändringar kan fortfarande ske under begränsade omständigheter före lanseringen.

Översikt

SQLite Vector Store-anslutningsappen kan användas för att komma åt och hantera data i SQLite. Anslutningsappen har följande egenskaper.

Funktionsområde Support
Samlingskartor till SQLite-tabell
Nyckelegenskapstyper som stöds
  • ulong
  • sträng
Dataegenskapstyper som stöds
  • heltal
  • lång
  • ulong
  • short
  • ushort
  • sträng
  • bool
  • flyttal
  • dubbel
  • decimal
  • byte[]
Egenskapstyper för vektorer som stöds ReadOnlyMemory-flyttal<>
Indextyper som stöds Ej tillämpligt
Avståndsfunktioner som stöds
  • CosineDistance
  • ManhattanDistance
  • EuclideanDistance
Stöder flera vektorer i en post Ja
Stöds IsFilterable? Nej
Stöds IsFullTextSearchable? Nej
Stöds StoragePropertyName? Ja

Begränsningar

SQLite stöder inte vektorsökning direkt. SQLite-tillägget bör läsas in först för att aktivera vektorsökningsfunktionen. Den aktuella implementeringen av SQLite-anslutningsappen är kompatibel med söktillägget sqlite-vec-vektor .

För att installera tillägget använder du en av versionerna med den specifika tilläggsversion som du väljer. Det går att hämta en förkompilerad version med skriptet install.sh . Det här skriptet skapar vec0.dll, som måste finnas i samma mapp som det program som körs. På så sätt kan programmet anropa SqliteConnection.LoadExtension("vec0") metoden och läsa in vektorsökningstillägget.

Komma igång

Lägg till NuGet-paketet för SQLite Vector Store-anslutningsappen i projektet.

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

Du kan lägga till vektorlagret i containern IServiceCollection för beroendeinmatning med hjälp av tilläggsmetoder som tillhandahålls av semantisk kernel.

I det här fallet initieras en instans av Microsoft.Data.Sqlite.SqliteConnection klassen, anslutningen öppnas och vektorsökningstillägget läses in. Standardnamnet för vektorsökningstillägget är vec0, men det kan åsidosättas med hjälp SqliteVectorStoreOptions.VectorSearchExtensionName av egenskapen .

using Microsoft.SemanticKernel;

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

Tilläggsmetoder som inte har några parametrar tillhandahålls också. Dessa kräver att en instans av Microsoft.Data.Sqlite.SqliteConnection klassen registreras separat med containern för beroendeinmatning.

I det här fallet öppnas anslutningen endast om den inte öppnades tidigare och tilläggsmetoden förutsätter att vektorsökningstillägget redan har lästs in för den registrerade Microsoft.Data.Sqlite.SqliteConnection instansen.

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

Du kan skapa en SQLite Vector Store-instans direkt.

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

Det går att skapa en direktreferens till en namngiven samling.

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

Mappning av data

SQLite Vector Store-anslutningsappen tillhandahåller en standardmappare vid mappning från datamodellen till lagring. Den här mapparen utför en direkt konvertering av listan med egenskaper i datamodellen till kolumnerna i SQLite.

Det går också att åsidosätta standardbeteendet för mappningsmappning genom att tillhandahålla en anpassad mappare via egenskapen SqliteVectorStoreRecordCollectionOptions<TRecord>.DictionaryCustomMapper .

Med vektorsökningstillägget lagras vektorer i virtuella tabeller, separat från nyckel- och dataegenskaper. Som standard använder den virtuella tabellen med vektorer samma namn som tabellen med nyckel- och dataegenskaper, men med ett vec_ prefix. Om samlingsnamnet i SqliteVectorStoreRecordCollection till exempel är skhotelsblir namnet på den virtuella tabellen med vektorer vec_skhotels. Det går att åsidosätta det virtuella tabellnamnet med hjälp SqliteVectorStoreOptions.VectorVirtualTableName av egenskaperna eller SqliteVectorStoreRecordCollectionOptions<TRecord>.VectorVirtualTableName .

Åsidosättning av egenskapsnamn

Du kan åsidosätta egenskapsnamn som ska användas i lagring som skiljer sig från egenskapsnamnen i datamodellen. Åsidosättningen StoragePropertyName av egenskapsnamnet görs genom att alternativet anges via egenskapsattributen för datamodellen eller postdefinitionen.

Här är ett exempel på en datamodell som StoragePropertyName har angetts för dess attribut och hur den ska representeras i SQLite-frågan.

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

Kommer snart

Mer information kommer snart.

Kommer snart

Mer information kommer snart.