Partilhar via


Usando abstrações do Vetor Store sem definir seu próprio modelo de dados (Visualização)

Aviso

A funcionalidade Semantic Kernel Vetor Store está em pré-visualização, e melhorias que exigem alterações de quebra ainda podem ocorrer em circunstâncias limitadas antes do lançamento.

Descriçã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, fornecemos um modelo de dados genérico.

Modelo de dados genérico

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

Para suportar qualquer tipo de banco de dados, o tipo da chave do VectorStoreGenericDataModel é especificado através de 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 cadeia de caracteres.

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 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.

Gorjeta

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 });

Brevemente

Mais informações em breve.

Brevemente

Mais informações em breve.