警告
セマンティック カーネル ベクター ストア機能はプレビュー段階であり、破壊的変更を必要とする機能強化は、リリース前の限られた状況で引き続き発生する可能性があります。
現時点ではサポートされていません
概要
Faiss Vector Store コネクタは、外部データベースを使用せず、Faiss インデックス内のメモリとベクターにデータを格納するセマンティック カーネルによって提供されるベクター ストア実装です。 検索には Faiss インデックスを使用しながら、レコードの他の部分に対して InMemoryVectorCollection を使用します。
このベクター ストアは、プロトタイプ作成のシナリオや、高速なメモリ内操作が必要な場合に役立ちます。
コネクタには次の特性があります。
| 機能分野 | サポート |
|---|---|
| コレクション マップ先 | インメモリおよび Faiss インデックス辞書 |
| サポートされているキー プロパティの種類 | 辞書のキーとして許可されているものについては、Pythonのドキュメントを参照して詳細を確認してください。 ここ |
| サポートされているデータ プロパティ型 | 任意の型 |
| サポートされているベクター プロパティ型 |
|
| サポートされているインデックスの種類 | フラット (カスタム インデックス 参照) |
| サポートされている距離関数 |
|
| レコード内の複数のベクターをサポートします | はい |
| 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
)