共用方式為


使用 Faiss 連接器 (預覽)

警告

語意核心向量存放區功能處於預覽狀態,且需要重大變更的改善可能仍會在發行前有限的情況下發生。

目前不支援

概述

Faiss Vector Store 連接器是 Semantic Kernel 提供的向量存放區實作,該實作不會使用外部資料庫,並將數據儲存在 Faiss 索引中的記憶體和向量中。 它會針對記錄的其他部分使用 InMemoryVectorCollection,同時使用 Faiss 索引進行搜尋。 此向量存放區適用於開發原型的情境,或需要在記憶體內部進行高速操作的情況。

連接器具有下列特性。

功能範圍 支援
集合映射到 內存和 Faiss 索引字典
支援的鍵屬性類型 任何允許作為字典鍵的東西,請參閱 Python 文件以取得詳細資訊,這裡
支援的數據類型 任何類型
支援的向量屬性類型
  • list[float]
  • 清單[整數]
  • numpy 陣列
支援的索引類型 平(請參閱 自定義索引
支援的距離函式
  • 點產品相似性
  • 歐幾里得平方距離
支援記錄中的多個向量 是的
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 連接器僅限於 Flat 索引類型。

考量 Faiss 索引的複雜性,您可以自由建立自己的索引,包括建置 faiss-gpu 套件,並從中使用索引。 執行此動作時,會忽略向量字段上定義的任何計量。 如果您的資料模型中有多個向量,您可以僅對您希望的向量傳入自定義索引,並讓內建索引自行建立,其中包括平面化索引,而度量則在模型中定義。

請務必注意,如果索引需要定型,則請務必也這樣做,每當我們使用索引時,就會對索引的 is_trained 屬性執行檢查。

集合的 indexes 屬性中一律提供索引(自定義或內建)。 您可以使用這個來取得索引,並對其執行任何您想要的操作,因此您可以在之後進行訓練,只需確保在想要對其進行任何增刪查改操作之前完成這些步驟。

若要傳入您的自訂索引,請使用下列其中一項:


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
)

目前不支援