Weaviate ベクター ストア コネクタの使用 (プレビュー)
警告
セマンティック カーネル ベクター ストア機能はプレビュー段階であり、破壊的変更を必要とする機能強化は、リリース前の限られた状況で引き続き発生する可能性があります。
概要
Weaviate Vector Store コネクタを使用して、Weaviate のデータにアクセスして管理できます。 コネクタには次の特性があります。
機能領域 | サポート |
---|---|
コレクションのマップ | Weaviate コレクション |
サポートされているキー プロパティの種類 | GUID |
サポートされているデータ プロパティ型 |
|
サポートされているベクター プロパティ型 |
|
サポートされているインデックスの種類 |
|
サポートされている距離関数 |
|
サポートされているフィルター句 |
|
レコード内の複数のベクターをサポートします | はい |
IsFilterable がサポートされていますか? | はい |
IsFullTextSearchable がサポートされていますか? | はい |
StoragePropertyName がサポートされていますか? | いいえ。代わりに JsonSerializerOptions と JsonPropertyNameAttribute を使用してください。
詳細については、こちらを参照してください。 |
制限事項
Weaviate コネクタの機能に関する重要な制限事項。
機能領域 | 回避策 |
---|---|
単一ベクター オブジェクトに対する 'vector' プロパティの使用はサポートされていません | 代わりに、'vector' プロパティの使用がサポートされています。 |
警告
Weaviate では、大文字で始まるコレクション名が必要です。 大文字のコレクション名を指定しない場合、Weaviate はコレクションを作成しようとしたときにエラーを返します。 エラー Cannot query field "mycollection" on type "GetObjectsObj". Did you mean "Mycollection"?
は、mycollection
がコレクション名であることを示します。 この例では、代わりにコレクション名を Mycollection
に変更すると、エラーが修正されます。
作業の開始
Weaviate Vector Store コネクタ NuGet パッケージをプロジェクトに追加します。
dotnet add package Microsoft.SemanticKernel.Connectors.Weaviate --prerelease
セマンティック カーネルによって提供される拡張メソッドを使用して、 KernelBuilder
で使用できる依存関係挿入コンテナーまたは IServiceCollection
依存関係挿入コンテナーにベクター ストアを追加できます。
Weaviate ベクター ストアでは、 HttpClient
を使用して Weaviate サービスと通信します。 Weaviate サービスの URL/エンドポイントを指定するには、2 つのオプションがあります。
オプションを使用するか、 HttpClient
のベース アドレスを設定して指定できます。
この最初の例では、オプションを使用してサービス URL を設定する方法を示します。
また、これらのメソッドは、依存関係挿入サービス プロバイダーから Weaviate サービスを呼び出す HttpClient
インスタンスを取得することにも注意してください。
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel
.CreateBuilder()
.AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/") });
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/") });
独自の HttpClient
を指定できるオーバーロードも用意されています。
この場合、 HttpClient
BaseAddress
オプションを使用してサービス URL を設定できます。
using System.Net.Http;
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
using HttpClient client = new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") };
kernelBuilder.AddWeaviateVectorStore(client);
using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
using HttpClient client = new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") };
builder.Services.AddWeaviateVectorStore(client);
Weaviate Vector Store インスタンスを直接構築することもできます。
using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;
var vectorStore = new WeaviateVectorStore(
new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") });
名前付きコレクションへの直接参照を構築できます。
using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;
var collection = new WeaviateVectorStoreRecordCollection<Hotel>(
new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") },
"Skhotels");
必要に応じて、上記のいずれかのメカニズムを使用する場合に、オプションとして API キーを渡すことができます。例:
using Microsoft.SemanticKernel;
var kernelBuilder = Kernel
.CreateBuilder()
.AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/"), ApiKey = secretVar });
データ マッピング
Weaviate Vector Store コネクタは、データ モデルからストレージへのマッピング時に既定のマッパーを提供します。 Weaviate では、プロパティを ID、ペイロード、およびベクターのグループ化にマップする必要があります。 既定のマッパーは、モデルの注釈またはレコード定義を使用して各プロパティの型を決定し、このマッピングを実行します。
- キーとして注釈が付けられたデータ モデル プロパティは、Weaviate
id
プロパティにマップされます。 - データとして注釈が付けられたデータ モデルのプロパティは、Weaviate
properties
オブジェクトにマップされます。 - ベクトルとして注釈が付けられたデータ モデルのプロパティは、Weaviate
vectors
オブジェクトにマップされます。
既定のマッパーは、 System.Text.Json.JsonSerializer
を使用してストレージ スキーマに変換します。
つまり、データ モデルのプロパティ名に別のストレージ名が必要な場合は、 JsonPropertyNameAttribute
の使用がサポートされます。
JsonPropertyNameAttribute
セットを持つデータ モデルの例と、Weaviate での表現方法を次に示します。
using System.Text.Json.Serialization;
using Microsoft.Extensions.VectorData;
public class Hotel
{
[VectorStoreRecordKey]
public ulong HotelId { get; set; }
[VectorStoreRecordData(IsFilterable = true)]
public string HotelName { get; set; }
[VectorStoreRecordData(IsFullTextSearchable = true)]
public string Description { get; set; }
[JsonPropertyName("HOTEL_DESCRIPTION_EMBEDDING")]
[VectorStoreRecordVector(4, DistanceFunction.EuclideanDistance, IndexKind.QuantizedFlat)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
{
"id": 1,
"properties": { "HotelName": "Hotel Happy", "Description": "A place where everyone can be happy." },
"vectors": {
"HOTEL_DESCRIPTION_EMBEDDING": [0.9, 0.1, 0.1, 0.1],
}
}
間もなく利用できます
詳細については、近日公開予定です。
間もなく利用できます
詳細については、近日公開予定です。