Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.