Partager via


Utilisation du connecteur SQLite Vector Store (préversion)

Avertissement

La fonctionnalité de stockage vectoriel Sqlite est en version préliminaire, et des améliorations nécessitant des modifications disruptives peuvent toujours se produire dans des circonstances limitées avant la mise en production.

Avertissement

La fonctionnalité de stockage vectoriel du noyau sémantique est en phase de préversion et des améliorations nécessitant des modifications pouvant casser peuvent toujours intervenir dans des circonstances limitées avant la mise en production.

Avertissement

La fonctionnalité de stockage vectoriel du noyau sémantique est en phase de préversion et des améliorations nécessitant des modifications pouvant casser peuvent toujours intervenir dans des circonstances limitées avant la mise en production.

Vue d’ensemble

Le connecteur SQLite Vector Store peut être utilisé pour accéder aux données et les gérer dans SQLite. Le connecteur présente les caractéristiques suivantes.

Zone Fonctionnalités Soutien
Cartes de collection vers Table de SQLite
Types de propriétés de clé pris en charge
  • Int
  • long
  • ficelle
Types de propriétés de données pris en charge
  • Int
  • long
  • court
  • ficelle
  • Bool
  • flottant
  • double
  • byte[]
Types de propriétés vectorielles pris en charge
  • Float ReadOnlyMemory<>
  • Float d’incorporation<>
  • float[]
Types d’index pris en charge Non applicable
Fonctions de distance prises en charge
  • CosineDistance
  • ManhattanDistance
  • EuclideanDistance
Clauses de filtre prises en charge
  • EqualTo
Prend en charge plusieurs vecteurs dans un enregistrement Oui
Est-ce queIndexed est pris en charge ? Non
Est-ce queFullTextIndexed est pris en charge ? Non
Le StorageName est-il pris en charge ? Oui
HybridSearch est-il pris en charge ? Non

Mise en route

Ajoutez le package NuGet du connecteur SqLite Vector Store à votre projet.

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

Vous pouvez ajouter le magasin de vecteurs au conteneur d’injection de dépendances à l’aide de méthodes d’extension fournies par le Semantic Kernel IServiceCollection.

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

Vous pouvez construire une instance SQLite Vector Store directement.

using Microsoft.SemanticKernel.Connectors.SqliteVec;

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

Il est possible de construire une référence directe à une collection nommée.

using Microsoft.SemanticKernel.Connectors.SqliteVec;

var collection = new SqliteCollection<string, Hotel>("Data Source=:memory:", "skhotels");

Mappage de données

Le connecteur SQLite Vector Store fournit un mappeur par défaut lors du mappage du modèle de données au stockage. Ce mappeur effectue une conversion directe de la liste des propriétés du modèle de données vers les colonnes dans SQLite.

Avec l’extension de recherche vectorielle, les vecteurs sont stockés dans des tables virtuelles, séparément des propriétés de clé et de données. Par défaut, la table virtuelle avec des vecteurs utilise le même nom que la table avec des propriétés de clé et de données, mais avec un vec_ préfixe. Par exemple, si le nom de la collection est SqliteCollectionskhotels, le nom de la table virtuelle avec des vecteurs est vec_skhotels. Il est possible de remplacer le nom de la table virtuelle à l’aide des propriétés SqliteVectorStoreOptions.VectorVirtualTableName ou SqliteCollectionOptions<TRecord>.VectorVirtualTableName.

Surcharge du nom de propriété

Vous pouvez fournir des noms de propriétés de remplacement à utiliser dans un système de stockage différent par rapport aux noms de propriétés sur le modèle de données. Le remplacement du nom de propriété se fait en configurant l'option StorageName à l'aide des attributs de propriété du modèle de données ou de la définition d'enregistrement.

Voici un exemple de modèle de données avec StorageName défini sur ses attributs et comment cela sera représenté dans une commande 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
);

Bientôt disponible

Plus d’informations prochainement.

JDBC

Le connecteur JDBC peut être utilisé pour se connecter à SQLite.