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 |
|
Cláusulas de filtro com suporte |
|
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 |
|
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.