Compartilhar via


Usando abstrações do Repositório de Vetores sem definir seu próprio modelo de dados (versão prévia)

Aviso

A funcionalidade do Repositório de Vetores do Kernel Semântico está em versão prévia e as melhorias que exigem alterações significativas ainda podem ocorrer em circunstâncias limitadas antes do lançamento.

Visão geral

Os conectores do Repositório de Vetores do Kernel Semântico usam uma abordagem de primeiro modelo para interagir com bancos de dados. Isso torna o uso dos conectores fácil e simples, já que seu modelo de dados reflete o esquema de seus registros de banco de dados e, para adicionar qualquer informação de esquema adicional necessária, 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 seu próprio modelo de dados. Por exemplo, digamos que você não saiba em tempo de compilação como é o esquema do banco de dados e o esquema seja fornecido apenas por meio da configuração. Criar um modelo de dados que reflita o esquema seria impossível nesse caso.

Para atender a esse cenário, fornecemos um modelo de dados genérico.

Modelo de dados genérico

O modelo de dados genérico é uma classe nomeada VectorStoreGenericDataModel e está disponível no Microsoft.Extensions.VectorData.Abstractions pacote.

Para dar suporte a qualquer tipo de banco de dados, o tipo da chave do é especificado por meio de VectorStoreGenericDataModel um parâmetro genérico.

Todas as outras propriedades são divididas em Data e Vector propriedades. Qualquer propriedade que não seja um vetor ou uma chave é considerada uma propriedade de dados. Data e Vector os conjuntos de propriedades são armazenados como dicionários de objetos com chave de string.

Fornecendo informações de esquema ao usar o Modelo de Dados Genérico

Ao usar o modelo de dados genérico, os conectores ainda precisam saber como é o esquema de banco de dados. Sem as informações de 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.

Dica

Para ver como criar uma definição de registro, consulte definindo seu esquema com uma definição de registro.

Exemplo

Para usar o modelo de dados genérico 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.
VectorStoreRecordDefinition vectorStoreRecordDefinition = new()
{
    Properties = new List<VectorStoreRecordProperty>
    {
        new VectorStoreRecordKeyProperty("Key", typeof(string)),
        new VectorStoreRecordDataProperty("Term", typeof(string)),
        new VectorStoreRecordDataProperty("Definition", typeof(string)),
        new VectorStoreRecordVectorProperty("DefinitionEmbedding", typeof(ReadOnlyMemory<float>)) { Dimensions = 1536 }
    }
};

// When getting your collection instance from a vector store instance
// specify the generic data model, using the appropriate key type for your database
// and also pass your record definition.
var genericDataModelCollection = vectorStore.GetCollection<string, VectorStoreGenericDataModel<string>>(
    "glossary",
    vectorStoreRecordDefinition);

// 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 genericDataModelCollection.CreateCollectionIfNotExistsAsync();

// When retrieving a record from the collection, data and vectors can
// now be accessed via the Data and Vector dictionaries respectively.
var record = await genericDataModelCollection.GetAsync("SK");
Console.WriteLine(record.Data["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 modelo de dados genérico.

new AzureAISearchVectorStoreRecordCollection<VectorStoreGenericDataModel<string>>(
    searchIndexClient,
    "glossary",
    new() { VectorStoreRecordDefinition = vectorStoreRecordDefinition });

Em breve

Mais informações em breve.

Em breve

Mais informações em breve.