Pinecone コネクタの使用 (プレビュー)
警告
セマンティック カーネル ベクター ストア機能はプレビュー段階であり、破壊的変更を必要とする機能強化は、リリース前の限られた状況で引き続き発生する可能性があります。
概要
Pinecone Vector Store コネクタを使用して、Pinecone のデータにアクセスして管理できます。 コネクタには次の特性があります。
機能領域 | サポート |
---|---|
コレクションのマップ | Pinecone サーバーレス インデックス |
サポートされているキー プロパティの種類 | string |
サポートされているデータ プロパティ型 |
|
サポートされているベクター プロパティ型 | ReadOnlyMemory<float> |
サポートされているインデックスの種類 | PGA (Pinecone Graph アルゴリズム) |
サポートされている距離関数 |
|
レコード内の複数のベクターをサポートします | いいえ |
IsFilterable がサポートされていますか? | はい |
IsFullTextSearchable がサポートされていますか? | いいえ |
StoragePropertyName がサポートされていますか? | はい |
作業の開始
Pinecone Vector Store コネクタ NuGet パッケージをプロジェクトに追加します。
dotnet add package Microsoft.SemanticKernel.Connectors.Pinecone --prerelease
セマンティック カーネルによって提供される拡張メソッドを使用して、 KernelBuilder
で使用できる依存関係挿入コンテナーまたは IServiceCollection
依存関係挿入コンテナーにベクター ストアを追加できます。
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel
.CreateBuilder()
.AddPineconeVectorStore(pineconeApiKey);
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddPineconeVectorStore(pineconeApiKey);
パラメーターを受け取たない拡張メソッドも提供されます。 これには、依存関係挿入コンテナーに個別に登録する PineconeClient
のインスタンスが必要です。
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
using PineconeClient = Pinecone.PineconeClient;
// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.Services.AddSingleton<PineconeClient>(
sp => new PineconeClient(pineconeApiKey));
kernelBuilder.AddPineconeVectorStore();
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
using PineconeClient = Pinecone.PineconeClient;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<PineconeClient>(
sp => new PineconeClient(pineconeApiKey));
builder.Services.AddPineconeVectorStore();
Pinecone Vector Store インスタンスを直接構築できます。
using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;
var vectorStore = new PineconeVectorStore(
new PineconeClient(pineconeApiKey));
名前付きコレクションへの直接参照を構築できます。
using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;
var collection = new PineconeVectorStoreRecordCollection<Hotel>(
new PineconeClient(pineconeApiKey),
"skhotels");
インデックス名前空間
ベクター ストアの抽象化では、多層レコードグループ化メカニズムはサポートされていません。 抽象化内のコレクションは Pinecone サーバーレス インデックスにマップされ、抽象化に 2 番目のレベルは存在しません。 Pinecone では、名前空間と呼ばれる第 2 レベルのグループ化がサポートされます。
既定では、Pinecone コネクタはすべての操作の名前空間として null を渡します。 ただし、構築時に 1 つの名前空間を Pinecone コレクションに渡し、代わりにこれをすべての操作に使用することができます。
using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;
var collection = new PineconeVectorStoreRecordCollection<Hotel>(
new PineconeClient(pineconeApiKey),
"skhotels",
new() { IndexNamespace = "seasidehotels" });
データ マッピング
Pinecone コネクタは、データ モデルからストレージにデータをマッピングするときに、既定のマッパーを提供します。 Pinecone では、プロパティを ID、メタデータ、値のグループにマップする必要があります。 既定のマッパーは、モデルの注釈またはレコード定義を使用して各プロパティの型を決定し、このマッピングを実行します。
- キーとして注釈が付けられたデータ モデル プロパティは、Pinecone id プロパティにマップされます。
- データとして注釈が付けられたデータ モデルのプロパティは、Pinecone メタデータ オブジェクトにマップされます。
- ベクターとして注釈が付けられたデータ モデル プロパティは、Pinecone ベクター プロパティにマップされます。
プロパティ名のオーバーライド
データ プロパティの場合、データ モデルのプロパティ名とは異なるストレージで使用するオーバーライド フィールド名を指定できます。 これは、キーには Pinecone の固定名があるため、キーではサポートされていません。
ベクターは固定名 values
の下に格納されるため、ベクターでもサポートされていません。
プロパティ名のオーバーライドは、データ モデル属性またはレコード定義を使用して StoragePropertyName
オプションを設定することによって行われます。
属性に StoragePropertyName
が設定されたデータ モデルの例と、それが Pinecone でどのように表されるかを次に示します。
using Microsoft.Extensions.VectorData;
public class Hotel
{
[VectorStoreRecordKey]
public ulong HotelId { get; set; }
[VectorStoreRecordData(IsFilterable = true, StoragePropertyName = "hotel_name")]
public string HotelName { get; set; }
[VectorStoreRecordData(IsFullTextSearchable = true, StoragePropertyName = "hotel_description")]
public string Description { get; set; }
[VectorStoreRecordVector(Dimensions: 4, DistanceFunction.CosineDistance, IndexKind.Hnsw)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
{
"id": "h1",
"values": [0.9, 0.1, 0.1, 0.1],
"metadata": { "hotel_name": "Hotel Happy", "hotel_description": "A place where everyone can be happy." }
}
Pinecone コネクタは Python ではまだ使用できません。
Pinecone コネクタは、Java ではまだ使用できません。