De SQLite Vector Store-connector gebruiken (preview)
Waarschuwing
De functionaliteit van de Semantische Kernel Vector Store is in preview en verbeteringen die ingrijpende wijzigingen vereisen, kunnen nog steeds in beperkte omstandigheden plaatsvinden voordat deze wordt 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 |
---|---|
Verzameling komt overeen met | SQLite-tabel |
Ondersteunde sleuteleigenschapstypen |
|
Ondersteunde gegevenseigenschapstypen |
|
Ondersteunde vectoreigenschappentypen | ReadOnlyMemory<float> |
Ondersteunde indextypen | N.v.t. |
Ondersteunde afstandsfuncties |
|
Ondersteunde filterclausules |
|
Ondersteunt meerdere vectoren in een record | Ja |
Wordt Filterable ondersteund? | Nee |
WordtFullTextSearchable ondersteund? | Nee |
Wordt StoragePropertyName ondersteund? | Ja |
HybridSearch ondersteund? | Nee |
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 vectorzoekextensie sqlite-vec.
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 eerder is geopend, en de extensiemethode gaat ervan uit dat de vectorzoekextensie al geladen is 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 standaardtoewijzing bij het in kaart brengen van het gegevensmodel naar 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 overschrijving van de eigenschapsnaam wordt gedaan door de StoragePropertyName
optie in te stellen via de gegevensmodel eigenschapskenmerken of de definitie van het record.
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.
JDBC
De JDBC--connector kan worden gebruikt om verbinding te maken met SQLite.