Usando o conector SQLite Vetor Store (Visualização)
Aviso
A funcionalidade Semantic Kernel Vetor Store está em pré-visualização, e melhorias que exigem alterações de quebra ainda podem ocorrer em circunstâncias limitadas antes do lançamento.
Descrição geral
O conector SQLite Vetor Store pode ser usado para acessar e gerenciar dados no SQLite. O conector tem as seguintes características.
Área de funcionalidades | Suporte |
---|---|
Mapas da coleção para | Tabela SQLite |
Tipos de propriedade de chave suportados |
|
Tipos de propriedade de dados suportados |
|
Tipos de propriedade vetorial suportados | Float ReadOnlyMemory<> |
Tipos de índice suportados | N/A |
Funções de distância suportadas |
|
Suporta vários vetores em um registro | Sim |
IsFilterable suportado? | Não |
IsFullTextSearchable suportado? | Não |
StoragePropertyName suportado? | Sim |
Limitações
SQLite não suporta pesquisa vetorial pronta para uso. A extensão SQLite deve ser carregada primeiro para habilitar o recurso de pesquisa vetorial. A implementação atual do conector SQLite é compatível com a extensão de pesquisa vetorial sqlite-vec .
Para instalar a extensão, use uma das versões com a versão de extensão específica de sua escolha. É possível obter uma versão pré-compilada com o install.sh
script. Este script produzirá vec0.dll
, que deve estar localizado na mesma pasta que o aplicativo em execução. Isso permitirá que o aplicativo chame o SqliteConnection.LoadExtension("vec0")
método e carregue a extensão de pesquisa vetorial.
Introdução
Adicione o pacote NuGet do conector do SQLite Vetor Store ao seu projeto.
dotnet add package Microsoft.SemanticKernel.Connectors.Sqlite --prerelease
Você pode adicionar o armazenamento vetorial ao contêiner de injeção de IServiceCollection
dependência usando métodos de extensão fornecidos pelo Kernel Semântico.
Nesse caso, uma instância da Microsoft.Data.Sqlite.SqliteConnection
classe será inicializada, a conexão será aberta e a extensão de pesquisa vetorial será carregada. O nome da extensão de pesquisa vetorial padrão é vec0
, mas pode ser substituído usando a SqliteVectorStoreOptions.VectorSearchExtensionName
propriedade.
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSqliteVectorStore("Data Source=:memory:");
Métodos de extensão que não usam parâmetros também são fornecidos. Isso requer que uma instância da Microsoft.Data.Sqlite.SqliteConnection
classe seja registrada separadamente com o contêiner de injeção de dependência.
Nesse caso, a conexão será aberta somente se não tiver sido aberta antes e o método de extensão assumirá que a extensão de pesquisa vetorial já foi carregada para a instância registrada Microsoft.Data.Sqlite.SqliteConnection
.
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();
Você pode construir uma instância do SQLite Vetor Store diretamente.
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);
É possível construir uma referência direta a uma coleção nomeada.
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");
Mapeamento de dados
O conector SQLite Vetor Store fornece um mapeador padrão ao mapear do modelo de dados para o armazenamento. Este mapeador faz uma conversão direta da lista de propriedades no modelo de dados para as colunas no SQLite.
Também é possível substituir o comportamento padrão do mapeador fornecendo um mapeador personalizado por meio da SqliteVectorStoreRecordCollectionOptions<TRecord>.DictionaryCustomMapper
propriedade.
Com a extensão de pesquisa vetorial, os vetores são armazenados em tabelas virtuais, separadamente das propriedades de chave e dados.
Por padrão, a tabela virtual com vetores usará o mesmo nome da tabela com propriedades de chave e dados, mas com um vec_
prefixo. Por exemplo, se o nome da coleção em SqliteVectorStoreRecordCollection
for skhotels
, o nome da tabela virtual com vetores será vec_skhotels
. É possível substituir o nome da tabela virtual usando as SqliteVectorStoreOptions.VectorVirtualTableName
propriedades or SqliteVectorStoreRecordCollectionOptions<TRecord>.VectorVirtualTableName
.
Substituição do nome da propriedade
Você pode substituir nomes de propriedade para usar no armazenamento que é diferente dos nomes de propriedade no modelo de dados.
A substituição do nome da propriedade é feita definindo a StoragePropertyName
opção por meio dos atributos de propriedade do modelo de dados ou da definição do registro.
Aqui está um exemplo de um modelo de dados com StoragePropertyName
definido em seus atributos e como isso será representado na consulta SQLite.
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
);
Brevemente
Mais informações em breve.
Brevemente
Mais informações em breve.