De SQLite Vector Store-connector gebruiken (preview)
Waarschuwing
De Semantische Kernel Vector Store-functionaliteit is in preview en verbeteringen waarvoor wijzigingen die fouten veroorzaken, kunnen nog steeds in beperkte omstandigheden optreden voordat ze worden uitgebracht.
Overzicht
De SQLite Vector Store-connector kan worden gebruikt voor toegang tot en beheer van gegevens in SQLite. De verbindingslijn heeft de volgende kenmerken.
Functiegebied | Ondersteuning |
---|---|
Verzamelingstoewijzingen aan | SQLite-tabel |
Ondersteunde sleuteleigenschapstypen |
|
Ondersteunde gegevenseigenschapstypen |
|
Ondersteunde vectoreigenschappentypen | ReadOnlyMemory<float> |
Ondersteunde indextypen | N.v.t. |
Ondersteunde afstandsfuncties |
|
Ondersteunt meerdere vectoren in een record | Ja |
Wordt Filterable ondersteund? | Nee |
WordtFullTextSearchable ondersteund? | Nee |
Ondersteunde StoragePropertyName? | Ja |
Beperkingen
SQLite biedt geen ondersteuning voor out-of-the-box vectorzoekopdrachten. De SQLite-extensie moet eerst worden geladen om vectorzoekfunctionaliteit in te schakelen. De huidige implementatie van de SQLite-connector is compatibel met de zoekextensie sqlite-vec vector.
Als u de extensie wilt installeren, gebruikt u een van de releases met de specifieke extensieversie van uw keuze. Het is mogelijk om een vooraf gecompileerde versie met het install.sh
script op te halen. Dit script produceert vec0.dll
, die zich in dezelfde map moet bevinden als de actieve toepassing. Hierdoor kan de toepassing de SqliteConnection.LoadExtension("vec0")
methode aanroepen en de vectorzoekextensie laden.
Aan de slag
Voeg het NuGet-pakket SQLite Vector Store-connector toe aan uw project.
dotnet add package Microsoft.SemanticKernel.Connectors.Sqlite --prerelease
U kunt het vectorarchief toevoegen aan de IServiceCollection
container voor afhankelijkheidsinjectie met behulp van extensiemethoden van Semantic Kernel.
In dit geval wordt een exemplaar van de Microsoft.Data.Sqlite.SqliteConnection
klasse geïnitialiseerd, wordt de verbinding geopend en wordt de vectorzoekextensie geladen. De standaardnaam van de vectorzoekextensie is vec0
, maar kan worden overschreven met behulp van de SqliteVectorStoreOptions.VectorSearchExtensionName
eigenschap.
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSqliteVectorStore("Data Source=:memory:");
Extensiemethoden waarvoor geen parameters worden gebruikt, worden ook opgegeven. Hiervoor moet een exemplaar van de Microsoft.Data.Sqlite.SqliteConnection
klasse afzonderlijk worden geregistreerd bij de container voor afhankelijkheidsinjectie.
In dit geval wordt de verbinding alleen geopend als deze nog niet is geopend en wordt ervan uitgegaan dat de vectorzoekextensie al is geladen voor het geregistreerde Microsoft.Data.Sqlite.SqliteConnection
exemplaar.
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();
U kunt rechtstreeks een SQLite Vector Store-exemplaar maken.
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);
Het is mogelijk om een directe verwijzing naar een benoemde verzameling te maken.
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");
Gegevenstoewijzing
De SQLite Vector Store-connector biedt een standaardtoewijzingsfunctie bij het toewijzen van het gegevensmodel aan opslag. Deze mapper voert een directe conversie uit van de lijst met eigenschappen in het gegevensmodel naar de kolommen in SQLite.
Het is ook mogelijk om het standaardgedrag van mapper te overschrijven door een aangepaste mapper via de SqliteVectorStoreRecordCollectionOptions<TRecord>.DictionaryCustomMapper
eigenschap op te geven.
Met de vectorzoekuitbreiding worden vectoren opgeslagen in virtuele tabellen, los van sleutel- en gegevenseigenschappen.
De virtuele tabel met vectoren gebruikt standaard dezelfde naam als de tabel met sleutel- en gegevenseigenschappen, maar met een vec_
voorvoegsel. Als de naam SqliteVectorStoreRecordCollection
van de verzameling bijvoorbeeld is skhotels
, is vec_skhotels
de naam van de virtuele tabel met vectoren. Het is mogelijk om de naam van de virtuele tabel te overschrijven met behulp van de SqliteVectorStoreOptions.VectorVirtualTableName
of SqliteVectorStoreRecordCollectionOptions<TRecord>.VectorVirtualTableName
eigenschappen.
Eigenschapsnaam overschrijven
U kunt eigenschapsnamen overschrijven voor gebruik in opslag die afwijken van de eigenschapsnamen in het gegevensmodel.
De eigenschapsnaam wordt overschreven door de StoragePropertyName
optie in te stellen via de eigenschapskenmerken of recorddefinitie van het gegevensmodel.
Hier volgt een voorbeeld van een gegevensmodel dat StoragePropertyName
is ingesteld op de kenmerken ervan en hoe dit wordt weergegeven in de SQLite-query.
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
);
Binnenkort beschikbaar
Binnenkort meer informatie.
Binnenkort beschikbaar
Binnenkort meer informatie.