Compartir a través de


Uso del conector de almacén de vectores de SQLite (versión preliminar)

Advertencia

La funcionalidad del Sqlite Vector Store está en versión preliminar, y las mejoras que requieran cambios importantes podrían seguir ocurriendo en circunstancias limitadas antes del lanzamiento.

Advertencia

La funcionalidad Almacén de vectores del Kernel Semántico está en fase de vista previa, y mejoras que requieren cambios importantes aún pueden producirse en circunstancias limitadas antes del lanzamiento.

Advertencia

La funcionalidad Almacén de vectores del Kernel Semántico está en fase de vista previa, y mejoras que requieren cambios importantes aún pueden producirse en circunstancias limitadas antes del lanzamiento.

Información general

El conector del almacén de vectores de SQLite se puede usar para acceder a los datos y administrarlos en SQLite. El conector tiene las siguientes características.

Área de características Soporte técnico
La colección se mapea a Tabla SQLite
Tipos de propiedades de clave admitidos
  • Int
  • largo
  • cadena
Tipos de propiedad de datos admitidos
  • Int
  • largo
  • corto
  • cadena
  • Bool
  • flotante
  • doble
  • byte[]
Tipos de propiedades vectoriales admitidos
  • Memoria de solo lectura<float>
  • Inserción de<float>
  • flotante[]
Tipos de índice admitidos N/D
Funciones de distancia admitidas
  • CosineDistance
  • ManhattanDistance
  • EuclideanDistance
Cláusulas de filtro admitidas
  • EqualTo
Admite varios vectores en un registro
¿Está IsIndexed soportado? No
¿Está IsFullTextIndexed soportado? No
¿Se admite StorageName?
¿Se admite HybridSearch? No

Comenzar

Agregue el paquete NuGet del conector SQLite Vector Store a tu proyecto.

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

Puede añadir el almacén de vectores en el IServiceCollection contenedor de inserción de dependencias mediante métodos de extensión proporcionados por el Kernel Semántico.

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

Puede construir una instancia de SQLite Vector Store directamente.

using Microsoft.SemanticKernel.Connectors.SqliteVec;

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

Es posible construir una referencia directa a una colección con nombre.

using Microsoft.SemanticKernel.Connectors.SqliteVec;

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

Asignación de datos

El conector de almacenamiento de vectores de SQLite proporciona un mapeador predeterminado al mapear desde el modelo de datos al almacenamiento. Este mapeador hace una conversión directa de la lista de propiedades del modelo de datos a las columnas de SQLite.

Con la extensión de búsqueda vectorial, los vectores se almacenan en tablas virtuales, independientemente de las propiedades de clave y datos. De forma predeterminada, la tabla virtual con vectores usará el mismo nombre que la tabla con propiedades de clave y datos, pero con un vec_ prefijo. Por ejemplo, si el nombre de la colección de SqliteCollection es skhotels, el nombre de la tabla virtual con vectores será vec_skhotels. Es posible invalidar el nombre de la tabla virtual mediante las SqliteVectorStoreOptions.VectorVirtualTableName propiedades o SqliteCollectionOptions<TRecord>.VectorVirtualTableName .

Invalidación del nombre de propiedad

Puede proporcionar nombres de propiedad de sobrescritura para usar en el almacenamiento que sean diferentes de los nombres de propiedad del modelo de datos. La anulación del nombre de propiedad se realiza mediante la configuración de la opción StorageName a través de los atributos de propiedad del modelo de datos o la definición de registro.

Este es un ejemplo de un modelo de datos con StorageName establecido en sus atributos y cómo se representará en un comando 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
);

Próximamente

Más información próximamente.

JDBC

El conector JDBC se puede usar para conectarse a SQLite.