Compartilhar via


Usando o conector na memória (versão prévia)

Aviso

A funcionalidade do Repositório de Vetores do Kernel Semântico está em versão prévia e as melhorias que exigem alterações significativas ainda podem ocorrer em circunstâncias limitadas antes do lançamento.

Visão geral

O conector do Repositório de Vetores na Memória é uma implementação do Repositório de Vetores fornecida pelo Kernel Semântico que não usa nenhum banco de dados externo e armazena dados na memória. Esse Repositório de Vetores é útil para cenários de prototipagem ou onde operações na memória de alta velocidade são necessárias.

O conector tem as seguintes características.

Área de recurso Suporte
A coleção é mapeada para Dicionário na memória
Tipos de propriedade de chave com suporte Qualquer tipo que possa ser comparado
Tipos de propriedade de dados com suporte Qualquer tipo
Tipos de propriedade de vetor com suporte Float ReadOnlyMemory<>
Tipos de índice com suporte Plano
Funções de distância suportadas
  • CosineSimilaridade
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Cláusulas de filtro com suporte
  • AnyTagEqualTo
  • EqualTo
Suporta vários vetores em um registro Sim
IsFilterable suportado? Sim
IsFullTextSearchable suportado? Sim
StoragePropertyName com suporte? Não, como o armazenamento está na memória e, portanto, a reutilização de dados não é possível, a nomenclatura personalizada não é aplicável.

Introdução

Adicione o pacote nuget do Núcleo Semântico do Kernel ao seu projeto.

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

Você pode adicionar o repositório de vetores ao contêiner de injeção de dependência disponível no KernelBuilder ou ao IServiceCollection contêiner de injeção de dependência usando métodos de extensão fornecidos pelo Semantic Kernel.

using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder()
    .AddInMemoryVectorStore();
using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddInMemoryVectorStore();

Você pode construir uma instância do InMemory Vector Store diretamente.

using Microsoft.SemanticKernel.Connectors.InMemory;

var vectorStore = new InMemoryVectorStore();

É possível construir uma referência direta a uma coleção nomeada.

using Microsoft.SemanticKernel.Connectors.InMemory;

var collection = new InMemoryVectorStoreRecordCollection<string, Hotel>("skhotels");

Pesquisa de propriedade Key e Vector

Por padrão, o conector In-Memory Vector Store lerá os valores de chaves e vetores usando reflexão. Presume-se que as chaves e os vetores sejam propriedades diretas no modelo de dados.

Se for necessário um modelo de dados que tenha uma estrutura em que chaves e vetores não sejam propriedades diretas do modelo de dados, é possível fornecer funções para ler os valores deles.

Ao usar isso, também é necessário fornecer um VectorStoreRecordDefinition para que informações sobre o dimensionamento do vetor e a função de distância possam ser comunicadas ao repositório de vetores In-Memory.

var collection = new InMemoryVectorStoreRecordCollection<string, MyDataModel>(
    "mydata",
    new()
    {
        VectorStoreRecordDefinition = vectorStoreRecordDefinition,
        KeyResolver = (record) => record.Key,
        VectorResolver = (vectorName, record) => record.Vectors[vectorName]
    });

private class MyDataModel
{
    public string Key { get; set; }
    public Dictionary<string, ReadOnlyMemory<float>> Vectors { get; set; }
}

Visão geral

O conector do Repositório de Vetores na Memória é uma implementação do Repositório de Vetores fornecida pelo Kernel Semântico que não usa nenhum banco de dados externo e armazena dados na memória. Esse Repositório de Vetores é útil para cenários de prototipagem ou onde operações na memória de alta velocidade são necessárias.

O conector tem as seguintes características.

Área de recurso Suporte
A coleção é mapeada para Dicionário na memória
Tipos de propriedade de chave com suporte Qualquer um que tenha permissão para ser uma chave de dicionário, consulte a documentação do Python para mais detalhes aqui
Tipos de propriedade de dados com suporte Qualquer tipo
Tipos de propriedade de vetor com suporte list[float | int] | array numpy
Tipos de índice com suporte Plano
Funções de distância suportadas
  • Similaridade cossina
  • Distância do cosseno
  • Similaridade do produto Dot
  • Distância euclidiana
  • Distância quadrada euclidiana
  • Distância de Manhattan
  • Distância de Hamming
Suporta vários vetores em um registro Sim
is_filterable é suportado? Sim
is_full_text_searchable é suportado? Sim

Introdução

Adicione o pacote kernel semântico ao seu projeto.

pip install semantic-kernel

Você pode criar o repositório e as coleções a partir daí ou criar as coleções diretamente.

Nos snippets abaixo, supõe-se que você tenha uma classe de modelo de dados definida como 'DataModel'.

from semantic_kernel.connectors.memory.in_memory import InMemoryVectorStore

vector_store = InMemoryVectorStore()
vector_collection = vector_store.get_collection("collection_name", DataModel)

É possível construir uma referência direta a uma coleção nomeada.

from semantic_kernel.connectors.memory.in_memory import InMemoryCollection

vector_collection = InMemoryCollection("collection_name", DataModel)

Em breve

Mais informações em breve.