Uso de abstracciones de almacén de vectores sin definir su propio modelo de datos (versión preliminar)
Advertencia
La funcionalidad Almacén de vectores de kernel semántico está en versión preliminar y las mejoras que requieren cambios importantes pueden producirse en circunstancias limitadas antes de la versión.
Información general
Los conectores de almacén de vectores de kernel semántico usan un primer enfoque de modelo para interactuar con las bases de datos. Esto facilita y simplifica el uso de los conectores, ya que el modelo de datos refleja el esquema de los registros de base de datos y para agregar cualquier información de esquema adicional necesaria, simplemente puede agregar atributos a las propiedades del modelo de datos.
Aunque hay casos en los que no es deseable o posible definir su propio modelo de datos. Por ejemplo, supongamos que no sabe en tiempo de compilación el aspecto del esquema de la base de datos y que el esquema solo se proporciona a través de la configuración. La creación de un modelo de datos que refleje el esquema sería imposible en este caso.
Para satisfacer este escenario, proporcionamos un modelo de datos genérico.
Modelo de datos genérico
El modelo de datos genérico es una clase denominada VectorStoreGenericDataModel
y está disponible en el Microsoft.Extensions.VectorData.Abstractions
paquete.
Para admitir cualquier tipo de base de datos, el tipo de la clave de se especifica a través de VectorStoreGenericDataModel
un parámetro genérico.
Todas las demás propiedades se dividen en Data
y Vector
. Cualquier propiedad que no sea un vector o una clave se considera una propiedad de datos.
Data
y Vector
los conjuntos de propiedades se almacenan como diccionarios con clave de cadena de objetos.
Proporcionar información de esquema al usar el modelo de datos genérico
Al usar el modelo de datos genérico, los conectores todavía necesitan saber cuál es el aspecto del esquema de la base de datos. Sin la información de esquema, el conector no podría crear una colección o saber cómo asignar a y desde la representación de almacenamiento que usa cada base de datos.
Se puede usar una definición de registro para proporcionar la información del esquema. A diferencia de un modelo de datos, se puede crear una definición de registro a partir de la configuración en tiempo de ejecución, lo que proporciona una solución para cuando la información del esquema no se conoce en tiempo de compilación.
Sugerencia
Para ver cómo crear una definición de registro, consulte definición del esquema con una definición de registro.
Ejemplo
Para usar el modelo de datos genérico con un conector, simplemente especifíquelo como modelo de datos al crear una colección y proporcione simultáneamente una definición 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"])
Al construir directamente una instancia de colección, la definición de registro se pasa como opción. Por ejemplo, este es un ejemplo de creación de una instancia de colección de Azure AI Search con el modelo de datos genérico.
new AzureAISearchVectorStoreRecordCollection<VectorStoreGenericDataModel<string>>(
searchIndexClient,
"glossary",
new() { VectorStoreRecordDefinition = vectorStoreRecordDefinition });
Próximamente
Más información próximamente.
Próximamente
Más información próximamente.