Поделиться через


Использование соединителя Faiss (предварительная версия)

Предупреждение

Функции хранилища векторов семантического ядра доступны в предварительной версии, и улучшения, требующие существенных изменений, могут по-прежнему возникать в ограниченных случаях перед выпуском.

В настоящее время не поддерживается

Обзор

Соединитель Faiss Vector Store — это реализация векторного хранилища, предоставляемая семантическим ядром, которая не использует внешнюю базу данных и сохраняет данные в памяти, а векторы — в индексе Faiss. Он использует InMemoryVectorCollection для других частей записей, используя индексы Faiss для поиска. Это векторное хранилище полезно для сценариев прототипа или для выполнения высокоскоростных операций в памяти.

Соединитель имеет следующие характеристики.

Область функций Поддержка
Коллекция сопоставляется с Словарь индексов в оперативной памяти и Faiss
Поддерживаемые типы свойств ключей Все, что разрешено использовать в качестве ключа словаря, см. документацию по Python для получения подробных сведений здесь
Поддерживаемые типы свойств данных Любой тип
Поддерживаемые типы свойств вектора
  • список[float]
  • список[int]
  • массив numpy
Поддерживаемые типы индексов Плоский (см. пользовательские индексы)
Поддерживаемые функции расстояния
  • Сходство продуктов dot
  • Евклидово расстояние в квадрате
Поддержка нескольких векторов в записи Да
Поддерживается ли is_filterable? Да
Поддерживается ли is_full_text_searchable? Да

Начало работы

Добавьте пакет семантического ядра в проект.

pip install semantic-kernel[faiss]

В фрагментах ниже предполагается, что у вас есть класс модели данных, определенный с именем DataModel.

from semantic_kernel.connectors.faiss import FaissStore

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

Можно создать прямую ссылку на именованную коллекцию.

from semantic_kernel.connectors.faiss import FaissCollection

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

Пользовательские индексы

Соединитель Faiss поддерживает только тип плоского индекса.

Учитывая сложность индексов Faiss, вы можете создать собственный индекс(es), включая создание пакета faiss-gpu и использование индексов из этого. При этом все метрики, определенные в поле вектора, игнорируются. Если в вашей модели данных есть несколько векторов, вы можете передать пользовательские индексы только для тех, которые вам нужны, и позволить создавать встроенные индексы с плоским индексом и метрикой, определенной в модели.

Важно отметить, что если индекс требует обучения, обязательно сделайте это; когда мы используем индекс, выполняется проверка атрибута is_trained индекса.

Индекс всегда доступен (настраиваемый или встроенный) в свойстве indexes коллекции. Вы можете использовать это для получения индекса и выполнения любых операций, которые вам нужны, чтобы затем произвести обучение; только убедитесь, что сделали это до любых операций CRUD над ним.

Чтобы передать пользовательский индекс, используйте один из следующих методов:


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}
)

или:


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
)

В настоящее время не поддерживается