Compartir a través de


Uso del conector faiss (versión preliminar)

Advertencia

La funcionalidad de almacenamiento de vectores del kernel semántico se encuentra en versión preliminar y las mejoras que requieren modificaciones significativas pueden producirse en circunstancias limitadas antes de su lanzamiento.

No está disponible actualmente

Visión general

El conector Faiss Vector Store es una implementación del almacén de vectores proporcionada por el Kernel Semántico que no usa ninguna base de datos externa y almacena datos en memoria y vectores en un Índice Faiss. Utiliza el InMemoryVectorCollection para las otras partes de los registros, mientras utiliza los índices Faiss para la búsqueda. 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 Apoyo
La colección asigna a Diccionario de índices en memoria y Faiss
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
  • lista[flotante]
  • lista[int]
  • numpy array
Tipos de índice admitidos Plano (consulte los índices personalizados)
Funciones de distancia compatibles
  • Similitud de producto de puntos
  • Distancia cuadrada euclidiana
Admite varios vectores en un registro
¿is_filterable es compatible?
¿is_full_text_searchable es compatible?

Empezar

Agregue el paquete kernel semántico al proyecto.

pip install semantic-kernel[faiss]

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

from semantic_kernel.connectors.faiss import FaissStore

vector_store = FaissStore()
vector_collection = vector_store.get_collection("collection_name", DataModel)

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

from semantic_kernel.connectors.faiss import FaissCollection

vector_collection = FaissCollection(DataModel, collection_name="collection_name")

Índices personalizados

El conector Faiss se limita al tipo de índice Plano.

Dada la complejidad de los índices de Faiss, puede crear sus propios índices, incluida la creación del paquete faiss-gpu y el uso de índices de ese tipo. Al hacerlo, se omiten las métricas definidas en un campo vectorial. Si tiene varios vectores en el modelo de datos, puede pasar índices personalizados solo para los que desee y permitir que se creen los índices integrados, con un índice plano y la métrica definida en el modelo.

Es importante tener en cuenta que, si el índice requiere entrenamiento, asegúrese de hacerlo también, siempre que usemos el índice, se realiza una comprobación en el atributo is_trained del índice.

El índice siempre está disponible (personalizado o integrado) en la propiedad indexes de la colección. Puede usar esto para obtener el índice y asegurarse de realizar las operaciones que desee en él. Así podrá entrenar después, siempre asegurándose de completar estos pasos antes de querer aplicar cualquier operación CRUD sobre él.

Para pasar su índice personalizado, use:


import faiss

from semantic_kernel.connectors.faiss import FaissCollection

index = faiss.IndexHNSW(d=768, M=16, efConstruction=200) # or some other index
vector_collection = FaissCollection(
    record_type=DataModel, 
    collection_name="collection_name", 
    indexes={"vector_field_name": index}
)

o:


import faiss

from semantic_kernel.connectors.faiss import FaissCollection

index = faiss.IndexHNSW(d=768, M=16, efConstruction=200) # or some other index
vector_collection = FaissCollection(
    record_type=DataModel,
    collection_name="collection_name", 
)
await vector_collection.ensure_collection_exists(
    indexes={"vector_field_name": index}
)
# or when you have only one vector field:
await vector_collection.ensure_collection_exists(
    index=index
)

No está disponible actualmente