Partilhar via


Armazenamento de Memória do Kernel Semântico Legado

Gorjeta

Recomendamos o uso das abstrações do Vetor Store em vez dos Armazenamentos de Memória herdados. Para obter mais informações sobre como usar as abstrações do Vetor Store, comece aqui.

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

Abstrações de armazenamento em memória vs armazenamento vetorial

Como parte de um esforço para evoluir e expandir os recursos de armazenamento vetorial e pesquisa do Kernel Semântico, lançamos um novo conjunto de abstrações para substituir as abstrações do Memory Store. Estamos chamando as abstrações de substituição de abstrações de armazenamento vetorial. O objetivo de ambos é semelhante, mas suas interfaces diferem e as abstrações do Vetor Store fornecem funcionalidade expandida.

Característica Armazenamentos de memória herdados Armazéns 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 eliminação de registos. Sim Sim
Suporta a criação e exclusão de coleções Sim Sim
Suporta pesquisa vetorial Sim Sim
Suporta a escolha do 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
Suporta vários tipos de vetores 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 Kernel Semântico oferece vários conectores de armazenamento de memória para bancos de dados vetoriais que você pode usar para armazenar e recuperar informações. Estes são, entre outros:

Serviço C# Python
Banco de dados vetorial no Azure Cosmos DB para NoSQL C# Píton
Banco de dados vetorial no Azure Cosmos DB baseado em vCore para MongoDB C# Píton
Pesquisa de IA do Azure C# Píton
Azure PostgreSQL Server C#
Base de Dados SQL do Azure C#
Cromo C# Píton
DuckDB C#
Milvus C# Píton
Pesquisa vetorial do Atlas MongoDB C# Píton
Pinha C# Píton
Postgres C# Píton
Qdrant C# Píton
Redis C# Píton
Sqlite C#
Tecelagem C# Píton

Migrando de armazenamentos de memória para repositórios vetoriais

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

Use a coleção existente com as abstrações do Vetor Store

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

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

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; }
}

Gorjeta

Para obter exemplos mais detalhados sobre como usar as abstrações do Vetor Store para acessar coleções criadas usando um Memory Store, consulte aqui.

Criar uma nova coleção

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

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

  • metadados de cadeia de caracteres
  • carimbo de data/hora longo
  • float[] incorporação

Todos os dados, exceto a incorporação de dados ou o carimbo de data/hora, são armazenados como uma string JSON serializada no campo Metadados. Isto 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 cadeia de caracteres json.

Nesse caso, pode ser melhor migrar os dados para uma nova coleção com um esquema simples. Há 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.

Gorjeta

Para obter um exemplo usando o Redis, mostrando como copiar dados de uma coleção criada usando as abstrações do Memory Store para uma criada usando as abstrações do Vetor Store, veja aqui.