次の方法で共有


Faiss コネクタの使用 (プレビュー)

警告

セマンティック カーネル ベクター ストア機能はプレビュー段階であり、破壊的変更を必要とする機能強化は、リリース前の限られた状況で引き続き発生する可能性があります。

現時点ではサポートされていません

概要

Faiss Vector Store コネクタは、外部データベースを使用せず、Faiss インデックス内のメモリとベクターにデータを格納するセマンティック カーネルによって提供されるベクター ストア実装です。 検索には Faiss インデックスを使用しながら、レコードの他の部分に対して InMemoryVectorCollection を使用します。 このベクター ストアは、プロトタイプ作成のシナリオや、高速なメモリ内操作が必要な場合に役立ちます。

コネクタには次の特性があります。

機能分野 サポート
コレクション マップ先 インメモリおよび Faiss インデックス辞書
サポートされているキー プロパティの種類 辞書のキーとして許可されているものについては、Pythonのドキュメントを参照して詳細を確認してください。 ここ
サポートされているデータ プロパティ型 任意の型
サポートされているベクター プロパティ型
  • リスト[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 コネクタは、フラット インデックスの種類に制限されます。

Faiss インデックスの複雑さを考えると、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
)

現時点ではサポートされていません