Compartilhar via


Armazenamentos herdados de memória semântica de kernel

Dica

Recomendamos usar as abstrações do Repositório de Vetores em vez dos Armazenamentos de Memória herdados. Para obter mais informações sobre como usar as abstrações do Vector Store, comece aqui.

O Kernel Semântico fornece um conjunto de abstrações do Armazenamento de Memória em que a interface primária é Microsoft.SemanticKernel.Memory.IMemoryStore.

Abstrações de Armazenamento em Memória vs Armazenamento de Vetores

Como parte de um esforço para evoluir e expandir os recursos de armazenamento e pesquisa de vetores do Kernel Semântico, lançamos um novo conjunto de abstrações para substituir as abstrações do Repositório de Memória. Estamos chamando as abstrações de substituição de abstrações do "Vector Store". A finalidade de ambos é semelhante, mas suas interfaces diferem e as abstrações do Vector Store fornecem funcionalidade expandida.

Característica Armazenamentos de memória legados Repositórios de Vetores
Interface principal IMemoryStore VectorStore
Pacote nuget de abstrações Microsoft.SemanticKernel.Abstractions Microsoft.Extensions.VectorData.Abstractions
Convenção de nomenclatura {Provedor}MemoryStore, por exemplo, RedisMemoryStore {Provedor}VectorStore, por exemplo, RedisVectorStore
Suporta inserção ou atualização, obtenção e exclusão de registros Sim Sim
Suporta criação e exclusão de coleção Sim Sim
Suporta pesquisa vetorial Sim Sim
Suporta a escolha de seu índice de pesquisa vetorial preferido e função de distância Não Sim
Suporta vários vetores por registro Não Sim
Suporta esquemas personalizados Não Sim
Dá suporte a vários tipos de vetor Não Sim
Suporta pré-filtragem de metadados para pesquisa vetorial Não Sim
Suporta pesquisa vetorial em bancos de dados não vetoriais, baixando todo o conjunto de dados no cliente e fazendo uma pesquisa vetorial local Sim Não

Conectores de armazenamento de memória disponíveis

O Semantic Kernel oferece vários conectores de armazenamento de memória para bancos de dados vetoriais que você pode usar para armazenar e recuperar informações. Estão incluídos:

Serviço C# Python
Banco de Dados Vetorial no Azure Cosmos DB para NoSQL C# Python
Banco de Dados Vetorial no Azure Cosmos DB for MongoDB baseado em vCore C# Python
Pesquisa de IA do Azure C# Python
Servidor PostgreSQL do Azure C#
Banco de Dados SQL do Azure C#
Croma C# Python
DuckDB C#
Milvus C# Python
Busca em vetores do MongoDB Atlas C# Python
Pinha C# Python
Postgres C# Python
Qdrant C# Python
Redis C# Python
Sqlite C#
Weaviate C# Python

Migrando de armazenamentos de memória para armazenamentos de vetores

Se você quiser migrar do uso das abstrações do Repositório de Memória para as abstrações do Repositório vetor, há várias maneiras pelas quais você pode fazer isso.

Use a coleção existente com as abstrações do Repositório de Vetores

A maneira mais simples, em muitos casos, pode ser apenas usar as abstrações do Repositório de Vetores para acessar uma coleção que foi criada usando as abstrações do Repositório de Memória. Em muitos casos, isso é possível, pois a abstração do Repositório de Vetores permite que você escolha o esquema que deseja usar. O principal requisito é criar um modelo de dados que corresponda ao esquema usado pela implementação herdada do Armazenamento de Memória.

Por exemplo, para acessar uma coleção criada pelo Repositório de Memória do Azure AI Search, você pode usar o seguinte modelo de dados do Repositório de Vetores.

using Microsoft.Extensions.VectorData;

class VectorStoreRecord
{
    [VectorStoreKey]
    public string Id { get; set; }

    [VectorStoreData]
    public string Description { get; set; }

    [VectorStoreData]
    public string Text { get; set; }

    [VectorStoreData]
    public bool IsReference { get; set; }

    [VectorStoreData]
    public string ExternalSourceName { get; set; }

    [VectorStoreData]
    public string AdditionalMetadata { get; set; }

    [VectorStoreVector(VectorSize)]
    public ReadOnlyMemory<float> Embedding { get; set; }
}

Dica

Para obter exemplos mais detalhados sobre como usar as abstrações do Repositório de Vetores para acessar coleções criadas usando um Repositório de Memória, consulte aqui.

Criar uma nova coleção

Em alguns casos, migrar para uma nova coleção pode ser preferível do que usar a coleção existente diretamente. O esquema escolhido pelo Repositório de Memória pode não corresponder aos seus requisitos, especialmente no que diz respeito à filtragem.

Por exemplo, o repositório de memória do Redis usa um esquema com três campos:

  • metadados de string
  • carimbo de data/hora longo
  • incorporação flutuante

Todos os dados, exceto a incorporação ou o carimbo de data/hora, são armazenados como uma cadeia de caracteres json serializada no campo Metadados. Isso significa que não é possível indexar os valores individuais e filtrá-los. Por exemplo, talvez você queira filtrar usando o ExternalSourceName, mas isso não é possível enquanto estiver dentro de uma string json.

Nesse caso, talvez seja melhor migrar os dados para uma nova coleção com um esquema simples. Existem duas opções aqui. Você pode criar uma nova coleção a partir de seus dados de origem ou simplesmente mapear e copiar os dados do antigo para o novo. A primeira opção pode ser mais cara, pois você precisará regenerar as incorporações dos dados de origem.

Dica

Para obter um exemplo usando o Redis mostrando como copiar dados de uma coleção criada usando as abstrações do Armazenamento de Memória para uma criada usando as abstrações do Repositório de Vetores, consulte aqui.