警告
Weaviate Vector Store の機能はプレビュー段階であり、破壊的変更を必要とする機能強化は、リリース前の限られた状況で引き続き発生する可能性があります。
警告
セマンティック カーネル ベクター ストア機能はプレビュー段階であり、破壊的変更を必要とする機能強化は、リリース前の限られた状況で引き続き発生する可能性があります。
警告
セマンティック カーネル ベクター ストア機能はプレビュー段階であり、破壊的変更を必要とする機能強化は、リリース前の限られた状況で引き続き発生する可能性があります。
概要
Weaviate Vector Store コネクタを使用して、Weaviate のデータにアクセスして管理できます。 コネクタには次の特性があります。
| 機能領域 | サポート |
|---|---|
| コレクションは...にマップされます | Weaviate コレクション |
| サポートされているキー プロパティの種類 | GUID |
| サポートされているデータ プロパティ型 |
|
| サポートされているベクター プロパティ型 |
|
| サポートされているインデックスの種類 |
|
| サポートされている距離関数 |
|
| サポートされているフィルター句 |
|
| レコード内の複数のベクターをサポートします | はい |
| IsIndexed はサポートされていますか? | はい |
| IsFullTextIndexed がサポートされていますか? | はい |
| StorageName がサポートされていますか? | いいえ。代わりに JsonSerializerOptions と JsonPropertyNameAttribute を使用してください。
詳細については、こちらを参照してください。 |
| HybridSearch はサポートされていますか? | はい |
| 機能領域 | サポート |
|---|---|
| コレクションは...にマップされます | Weaviate コレクション |
| サポートされているキー プロパティの種類 | GUID |
| サポートされているデータ プロパティ型 |
|
| サポートされているベクター プロパティ型 |
|
| サポートされているインデックスの種類 |
|
| サポートされている距離関数 |
|
| サポートされているフィルター句 |
|
| レコード内の複数のベクターをサポートします | はい |
| IsFilterable がサポートされていますか? | はい |
| IsFullTextSearchable がサポートされていますか? | はい |
もうすぐです。
制限事項
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.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel
.CreateBuilder();
kernelBuilder.Services
.AddWeaviateVectorStore(new Uri("http://localhost:8080/v1/"), apiKey: null);
using Microsoft.Extensions.DependencyInjection;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddWeaviateVectorStore(new Uri("http://localhost:8080/v1/"), apiKey: null);
独自の HttpClient を指定できるオーバーロードも用意されています。
この場合、 HttpClientBaseAddress オプションを使用してサービス URL を設定できます。
using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
using HttpClient client = new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") };
kernelBuilder.Services.AddWeaviateVectorStore(_ => client);
using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;
// 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 WeaviateCollection<Guid, Hotel>(
new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") },
"Skhotels");
必要に応じて、上記のいずれかのメカニズムを使用する場合に、オプションとして API キーを渡すことができます。例:
using Microsoft.SemanticKernel;
var kernelBuilder = Kernel
.CreateBuilder();
kernelBuilder.Services
.AddWeaviateVectorStore(new Uri("http://localhost:8080/v1/"), 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
{
[VectorStoreKey]
public Guid HotelId { get; set; }
[VectorStoreData(IsIndexed = true)]
public string HotelName { get; set; }
[VectorStoreData(IsFullTextIndexed = true)]
public string Description { get; set; }
[JsonPropertyName("HOTEL_DESCRIPTION_EMBEDDING")]
[VectorStoreVector(4, DistanceFunction = DistanceFunction.CosineDistance, IndexKind = IndexKind.QuantizedFlat)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
{
"id": "11111111-1111-1111-1111-111111111111",
"properties": { "HotelName": "Hotel Happy", "Description": "A place where everyone can be happy." },
"vectors": {
"HOTEL_DESCRIPTION_EMBEDDING": [0.9, 0.1, 0.1, 0.1],
}
}
はじめに
Weaviate Vector Store コネクタの依存関係をプロジェクトに追加します。
pip install semantic-kernel[weaviate]
その後、ベクター ストアを作成し、環境設定を使用して接続できます。
Weaviate Cloud を使用する場合:
- url: WEAVIATE_URL
- api_key: WEAVIATE_API_KEY
Weaviate Local (つまり、Docker コンテナー内の Weaviate) を使用する場合:
- local_host: WEAVIATE_LOCAL_HOST
- local_port: WEAVIATE_LOCAL_PORT
- local_grpc_port: WEAVIATE_LOCAL_GRPC_PORT
埋め込みを使用する場合:
- use_embed: WEAVIATE_USE_EMBED
これらは排他的に設定する必要があるため、上記のセットが 1 つだけ存在し、それ以外の場合は例外が発生します。
from semantic_kernel.connectors.weaviate import WeaviateStore
store = WeaviateStore()
または、クライアントの構築をより詳細に制御する場合は、独自の mongodb クライアントを渡すこともできます。
import weaviate
from semantic_kernel.connectors.weaviate import WeaviateStore
client = weaviate.WeaviateAsyncClient(...)
store = WeaviateStore(async_client=client)
ストアを使用せずにコレクションを直接作成することもできます。
from semantic_kernel.connectors.weaviate import WeaviateCollection
# `hotel` is a class created with the @vectorstoremodel decorator
collection = WeaviateCollection(
collection_name="my_collection",
record_type=hotel
)
シリアル化
Weaviate クライアントは、通常のフローで解析されてディクテーションに変換される独自のオブジェクトを返します。この概念の詳細については、シリアル化のドキュメントを参照してください。
近日公開
詳細については、近日公開予定です。