次の方法で共有


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

警告

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

概要

Pinecone Vector Store コネクタを使用して、Pinecone のデータにアクセスして管理できます。 コネクタには次の特性があります。

機能領域 サポート
コレクションのマップ Pinecone サーバーレス インデックス
サポートされているキー プロパティの種類 string
サポートされているデータ プロパティ型
  • string
  • INT
  • long
  • 倍精度浮動小数点
  • float
  • [bool]
  • 小数
  • 文字列型の列挙可能な
サポートされているベクター プロパティ型 ReadOnlyMemory<float>
サポートされているインデックスの種類 PGA (Pinecone Graph アルゴリズム)
サポートされている距離関数
  • CosineSimilarity
  • DotProductSimilarity
  • EuclideanDistance
レコード内の複数のベクターをサポートします いいえ
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 ではまだ使用できません。