Compartir a través de


Almacenes de memoria del núcleo semántico heredados

Sugerencia

Recomendamos utilizar las abstracciones de los almacenes 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 almacenamiento de memoria frente a almacenamiento de vectores

Como parte de un esfuerzo por evolucionar y expandir las funcionalidades de almacenamiento de vectores y búsqueda del kernel semántico, hemos publicado un nuevo conjunto de abstracciones para reemplazar las abstracciones del almacén de memoria. Estamos llamando a las abstracciones de almacenamiento vectorial 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 la inserción o actualización, obtención y eliminación de registros.
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 varios tipos de vectores 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:

Servicio C# Python
Base de datos vectorial en Azure Cosmos DB for noSQL C# Python
Base de datos vectorial en Azure Cosmos DB basado en vCore para MongoDB C# Python
Azure AI Search C# Python
Azure PostgreSQL Server C#
Azure SQL Database C#
Chroma C# Python
DuckDB C#
Milvus C# Python
MongoDB Atlas Vector Search C# Python
Cono de pino C# Python
Postgres C# Python
Qdrant C# Python
Redis C# Python
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 abstracciones del almacén de vectores, hay varias maneras en las que puede hacerlo.

Usar la colección existente con las abstracciones de Vector Store

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 Vector Store permite seleccionar el esquema que desea utilizar. 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 prolongada
  • 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í.