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 |
|
Dataegenskapstyper som stöds |
|
Egenskapstyper för vektorer som stöds | ReadOnlyMemory-flyttal<> |
Indextyper som stöds | Ej tillämpligt |
Avståndsfunktioner som stöds |
|
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 skhotels
blir 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.