Partilhar via


Armazenamentos de memória do kernel semântico herdado

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 de memória vs armazenamento vetorial

Como parte de um esforço para evoluir e expandir o armazenamento vetorial e as capacidades de 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.

Characteristic Armazenamentos de memória herdados Lojas de vetores
Interface Principal IMemoryStore IVectorStore
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 upsert, obter e excluir registros 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 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 No

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# Python
Banco de dados vetorial no Azure Cosmos DB baseado em vCore para MongoDB C# Python
Pesquisa de IA do Azure C# Python
Azure PostgreSQL Server C#
Base de Dados SQL do Azure C#
Cromo C# Python
DuckDB C#
Milvus C# Python
Pesquisa vetorial do Atlas MongoDB C# Python
Pinecone C# Python
Postgres C# Python
Qdrant C#
Redis C#
Sqlite C#
Tecelagem C# Python

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 abtraçõ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
{
    [VectorStoreRecordKey]
    public string Id { get; set; }

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

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

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

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

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

    [VectorStoreRecordVector(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 diferentes da incorporação ou carimbo de data/hora são armazenados como uma cadeia de caracteres 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.