Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Advertência
A funcionalidade Semantic Kernel Vector Store está em fase de testes, e melhorias que exigem alterações significativas ainda podem ocorrer em circunstâncias limitadas antes do lançamento oficial.
Advertência
A funcionalidade Semantic Kernel Vector Store está em fase de testes, e melhorias que exigem alterações significativas ainda podem ocorrer em circunstâncias limitadas antes do lançamento oficial.
Visão geral
Os conectores do Semantic Kernel Vetor Store usam uma abordagem de modelo inicial para interagir com bancos de dados. Isso torna o uso dos conectores fácil e simples, uma vez que seu modelo de dados reflete o esquema de seus registros de banco de dados e, para adicionar quaisquer informações adicionais de esquema necessárias, você pode simplesmente adicionar atributos às propriedades do modelo de dados.
No entanto, há casos em que não é desejável ou possível definir o seu próprio modelo de dados. Por exemplo, digamos que você não sabe em tempo de compilação como é o esquema do banco de dados, e o esquema só é fornecido via configuração. Criar um modelo de dados que reflita o esquema seria impossível neste caso.
Para atender a esse cenário, permitimos o uso de um Dictionary<string, object?>
para o tipo de registro.
As propriedades são adicionadas ao dicionário com chave como o nome da propriedade e o valor como o valor da propriedade.
Fornecendo informações de esquema ao usar o dicionário
Ao usar o dicionário, os conectores ainda precisam saber como é o esquema do banco de dados. Sem as informações do esquema, o conector não seria capaz de criar uma coleção ou saber como mapear de e para a representação de armazenamento que cada banco de dados usa.
Uma definição de registro pode ser usada para fornecer as informações do esquema. Ao contrário de um modelo de dados, uma definição de registro pode ser criada a partir da configuração em tempo de execução, fornecendo uma solução para quando as informações do esquema não são conhecidas em tempo de compilação.
Sugestão
Para ver como criar uma definição de registro, consulte Definindo seu esquema com uma definição de registro.
Exemplo
Para usar o dicionário com um conector, basta especificá-lo como seu modelo de dados ao criar uma coleção e, simultaneamente, fornecer uma definição de registro.
// Create the definition to define the schema.
VectorStoreCollectionDefinition definition = new()
{
Properties = new List<VectorStoreProperty>
{
new VectorStoreKeyProperty("Key", typeof(string)),
new VectorStoreDataProperty("Term", typeof(string)),
new VectorStoreDataProperty("Definition", typeof(string)),
new VectorStoreVectorProperty("DefinitionEmbedding", typeof(ReadOnlyMemory<float>), dimensions: 1536)
}
};
// When getting your collection instance from a vector store instance
// specify the Dictionary, using object as the key type for your database
// and also pass your record definition.
// Note that you have to use GetDynamicCollection instead of the regular GetCollection method
// to get an instance of a collection using Dictionary<string, object?>.
var dynamicDataModelCollection = vectorStore.GetDynamicCollection(
"glossary",
definition);
// Since we have schema information available from the record definition
// it's possible to create a collection with the right vectors, dimensions,
// indexes and distance functions.
await dynamicDataModelCollection.EnsureCollectionExistsAsync();
// When retrieving a record from the collection, key, data and vector values can
// now be accessed via the dictionary entries.
var record = await dynamicDataModelCollection.GetAsync("SK");
Console.WriteLine(record["Definition"]);
Ao construir uma instância de coleção diretamente, a definição de registro é passada como uma opção. Por exemplo, aqui está um exemplo de construção de uma instância de coleção do Azure AI Search com o Dicionário.
Observe que cada implementação de coleção de armazenamento de vetores tem uma classe separada *DynamicCollection
que pode ser usada com a cadeia de caracteres Dictionary<, object?>.
Isso ocorre porque essas implementações podem oferecer suporte a NativeAOT/Trimming.
new AzureAISearchDynamicCollection(
searchIndexClient,
"glossary",
new() { Definition = definition });
Visão geral
Em python você pode usar o VectorStoreRecordDefinition em combinação com qualquer tipo genérico, como um dict ou um dataframe (Pandas). Veja mais informações aqui: Definindo seu esquema com uma definição de registro.
Brevemente
Mais informações em breve.