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.