Compartir a través de


Almacenes de memoria del kernel semántico heredados

Sugerencia

Se recomienda usar las abstracciones del almacén de vectores en lugar de los almacenes de memoria heredados. Para obtener más información sobre cómo usar las abstracciones del almacén de vectores, empiece aquí.

El kernel semántico proporciona un conjunto de abstracciones del almacén de memoria donde la interfaz principal es Microsoft.SemanticKernel.Memory.IMemoryStore.

Abstracciones de almacén de memoria frente a almacén de vectores

Como parte de un esfuerzo por evolucionar y expandir el almacenamiento de vectores y las capbilidades de búsqueda del kernel semántico, hemos lanzado un nuevo conjunto de abstracciones para reemplazar las abstracciones del almacén de memoria. Estamos llamando a las abstracciones de vector store de reemplazo. El propósito de ambos son similares, pero sus interfaces difieren y las abstracciones del almacén de vectores proporcionan funcionalidad expandida.

Característica Almacenes de memoria heredados Almacenes de vectores
Interfaz principal IMemoryStore IVectorStore
Abstracciones del paquete nuget Microsoft.SemanticKernel.Abstractions Microsoft.Extensions.VectorData.Abstractions
Convención de nomenclatura {Provider}MemoryStore, por ejemplo, RedisMemoryStore {Provider}VectorStore, por ejemplo, RedisVectorStore
Admite el registro upsert, get y delete
Admite la creación y eliminación de colecciones
Admite la búsqueda de vectores
Admite la elección del índice de búsqueda vectorial preferido y la función de distancia. No
Admite varios vectores por registro No
Admite esquemas personalizados No
Admite el filtrado previo de metadatos para la búsqueda de vectores No
Admite la búsqueda de vectores en bases de datos no vectoriales descargando todo el conjunto de datos en el cliente y realizando una búsqueda de vectores local. No

Conectores de almacenamiento de memoria disponibles

El kernel semántico ofrece varios conectores de almacenamiento de memoria a bases de datos vectoriales que puede usar para almacenar y recuperar información. Entre ellas se incluyen las siguientes:

Service C# Python
Base de datos vectorial en Azure Cosmos DB for noSQL C# Python
Base de datos vectorial basada en núcleo virtual de Azure Cosmos DB for MongoDB C# Python
Azure AI Search C# Python
Azure PostgreSQL Server C#
Azure SQL Database C#
Chroma C# Python
DuckDB C#
Milvus C# Python
Vector de búsqueda de MongoDB Atlas C# Python
Pinecone C# Python
Postgres C# Python
Qdrant C#
Redis C#
Sqlite C#
Weaviate C# Python

Migración de almacenes de memoria a almacenes de vectores

Si desea migrar desde el uso de las abstracciones del almacén de memoria a las abtracciones del almacén de vectores, hay varias maneras en las que puede hacerlo.

Uso de la colección existente con las abstracciones del almacén de vectores

La manera más sencilla en muchos casos podría ser simplemente usar las abstracciones del almacén de vectores para acceder a una colección que se creó mediante las abstracciones del almacén de memoria. En muchos casos esto es posible, ya que la abstracción del almacén de vectores permite elegir el esquema que le gustaría usar. El requisito principal es crear un modelo de datos que coincida con el esquema que usó la implementación del almacén de memoria heredada.

Por ejemplo, para acceder a una colección creada por el almacén de memoria de Azure AI Search, puede usar el siguiente modelo de datos del almacén de vectores.

using Microsoft.Extensions.VectorData;

class VectorStoreRecord
{
    [VectorStoreRecordKey]
    public string Id { get; set; }

    [VectorStoreRecordData]
    public string Description { get; set; }

    [VectorStoreRecordData]
    public string Text { get; set; }

    [VectorStoreRecordData]
    public bool IsReference { get; set; }

    [VectorStoreRecordData]
    public string ExternalSourceName { get; set; }

    [VectorStoreRecordData]
    public string AdditionalMetadata { get; set; }

    [VectorStoreRecordVector(VectorSize)]
    public ReadOnlyMemory<float> Embedding { get; set; }
}

Sugerencia

Para obtener ejemplos más detallados sobre cómo usar las abstracciones del almacén de vectores para acceder a las colecciones creadas mediante un almacén de memoria, consulte aquí.

Crear una nueva colección

En algunos casos, la migración a una nueva colección puede ser preferible que usar directamente la colección existente. Es posible que el esquema elegido por el almacén de memoria no coincida con sus requisitos, especialmente en lo que respecta al filtrado.

Por ejemplo, el almacén de memoria de Redis usa un esquema con tres campos:

  • metadatos de cadena
  • marca de tiempo larga
  • float[] inserción

Todos los datos que no sean la inserción o la marca de tiempo se almacenan como una cadena json serializada en el campo Metadatos. Esto significa que no es posible indexar los valores individuales y filtrarlos. Por ejemplo, quizás quiera filtrar mediante ExternalSourceName, pero esto no es posible mientras está dentro de una cadena json.

En este caso, puede ser mejor migrar los datos a una nueva colección con un esquema plano. Hay dos opciones aquí. Puede crear una nueva colección a partir de los datos de origen o simplemente asignar y copiar los datos del antiguo al nuevo. La primera opción puede ser más costosa, ya que tendrá que volver a generar las inserciones a partir de los datos de origen.

Sugerencia

Para obtener un ejemplo con Redis en el que se muestra cómo copiar datos de una colección creada mediante las abstracciones del almacén de memoria en una creada mediante las abstracciones del almacén de vectores, consulte aquí.