Compartir a través de


Uso del conector en memoria (versión preliminar)

Advertencia

La funcionalidad del almacén de vectores de In-Memory está en versión preliminar y las mejoras que requieren cambios importantes pueden seguir teniendo lugar en circunstancias limitadas antes de la versión.

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.

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

El conector del almacén de vectores en memoria es una implementación del almacén de vectores proporcionada por kernel semántico que no usa ninguna base de datos externa y almacena datos en memoria. Este almacén de vectores es útil para escenarios de creación de prototipos o en los que se requieren operaciones de alta velocidad en memoria.

El conector tiene las siguientes características.

Área de características Soporte técnico
La colección se asigna a Diccionario en memoria
Tipos de propiedades de clave admitidos Cualquier tipo que se pueda comparar
Tipos de propiedad de datos admitidos Cualquier tipo
Tipos de propiedades vectoriales admitidos
  • Memoria de solo lectura<float>
  • Inserción de<float>
  • flotante[]
Tipos de índice admitidos Plano
Funciones de distancia admitidas
  • CosineSimilarity
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Cláusulas de filtro admitidas
  • AnyTagEqualTo
  • EqualTo
Admite varios vectores en un registro
¿Está IsIndexed soportado?
¿Está IsFullTextIndexed soportado?
¿Se admite StorageName? No, dado que el almacenamiento está en memoria y la reutilización de datos no es posible, por lo tanto, no es posible asignar nombres personalizados.
¿Se admite HybridSearch? No

Introducción

Agregue el paquete nuget Kernel Core semántico al proyecto.

dotnet add package Microsoft.SemanticKernel.Connectors.InMemory --prerelease

Puede agregar el almacén de vectores al contenedor de inserción de dependencias disponible en KernelBuilder o al IServiceCollection contenedor de inserción de dependencias mediante métodos de extensión proporcionados por kernel semántico.

using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder();
kernelBuilder.Services
    .AddInMemoryVectorStore();
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddInMemoryVectorStore();

Puede construir directamente una instancia de Almacén de vectores de InMemory.

using Microsoft.SemanticKernel.Connectors.InMemory;

var vectorStore = new InMemoryVectorStore();

Es posible construir una referencia directa a una colección con nombre.

using Microsoft.SemanticKernel.Connectors.InMemory;

var collection = new InMemoryCollection<string, Hotel>("skhotels");

Información general

Advertencia

El almacén de vectores de In-Memory admite filtros personalizados que se pueden expresar como funciones lambda de Python, estas funciones se ejecutan en el mismo proceso que la aplicación principal y, por tanto, pueden ejecutar código arbitrario. Filtramos por determinadas operaciones permitidas, pero no debería permitir que los filtros se establezcan mediante orígenes que no son de confianza, incluidas las entradas LLM. Consulte la sección Filtrado para obtener más detalles.

El conector del almacén de vectores en memoria es una implementación del almacén de vectores proporcionada por kernel semántico que no usa ninguna base de datos externa y almacena datos en memoria. Este almacén de vectores es útil para escenarios de creación de prototipos o en los que se requieren operaciones de alta velocidad en memoria.

El conector tiene las siguientes características.

Área de características Soporte técnico
La colección se asigna a Diccionario en memoria
Tipos de propiedades de clave admitidos Cualquiera que pueda ser una clave dict, consulte la documentación de Python para obtener más información aquí
Tipos de propiedad de datos admitidos Cualquier tipo
Tipos de propiedades vectoriales admitidos list[float | int] | matriz numpy
Tipos de índice admitidos Plano
Funciones de distancia admitidas
  • Similitud de coseno
  • Distancia de coseno
  • Similitud de producto de puntos
  • Distancia euclidiana
  • Distancia cuadrada euclidiana
  • Distancia de Manhattan
  • Distancia de Hamming
Admite varios vectores en un registro
¿Se admite is_filterable?
¿Está admitido is_full_text_searchable?

Introducción

Agregue el paquete kernel semántico al proyecto.

pip install semantic-kernel

Puede crear el almacén y las colecciones desde allí o crear las colecciones directamente.

En los fragmentos de código siguientes, se supone que tiene una clase de modelo de datos definida denominada "DataModel".

from semantic_kernel.connectors.in_memory import InMemoryVectorStore

vector_store = InMemoryVectorStore()
vector_collection = vector_store.get_collection(record_type=DataModel, collection_name="collection_name")

Es posible construir una referencia directa a una colección con nombre.

from semantic_kernel.connectors.in_memory import InMemoryCollection

vector_collection = InMemoryCollection(record_type=DataModel, collection_name="collection_name")

Filtros

Advertencia

El almacén de vectores de In-Memory admite filtros personalizados que se pueden expresar como funciones lambda de Python, estas funciones se ejecutan en el mismo proceso que la aplicación principal y, por tanto, pueden ejecutar código arbitrario. Filtramos por determinadas operaciones permitidas, pero no debería permitir que los filtros se establezcan mediante orígenes que no son de confianza, incluidas las entradas LLM.

El conector de In-Memory usa un enfoque de lista de permitidos para la seguridad del filtro. Solo se permiten las siguientes operaciones en expresiones de filtro:

Operaciones permitidas

Categoría Operaciones permitidas
Comparaciones ==, !=, <, <=, >, >=, in, not in, is, is not
Operaciones booleanas and, , or, not
acceso a datos Acceso a atributos (por ejemplo, x.field), acceso de subíndice (por ejemplo, x['field']), segmentación
literales Constantes, listas, tuplas, conjuntos, diccionarios
Aritmética básica +, -, *, /, , %, //

Funciones permitidas

Las siguientes funciones y métodos integrados se pueden usar en expresiones de filtro:

  • Conversión de tipos: str, int, float, bool
  • Agregación: len, abs, min, max, sum, any, all
  • Métodos de cadena: lower, upper, strip, startswith, , endswith, contains
  • Métodos de diccionario: get, keys, values, items

Examples

# Simple equality filter
results = await collection.search(vector, filter="lambda x: x.category == 'electronics'")

# Numeric comparison
results = await collection.search(vector, filter="lambda x: x.price < 100")

# Boolean combination
results = await collection.search(vector, filter="lambda x: x.in_stock and x.rating >= 4.0")

# String method
results = await collection.search(vector, filter="lambda x: x.name.startswith('A')")

# Membership test
results = await collection.search(vector, filter="lambda x: x.status in ['active', 'pending']")

Próximamente

Más información próximamente.