共用方式為


使用 Pinecone 連接器 (預覽)

警告

語意核心向量存放區功能處於預覽狀態,且需要重大變更的改善可能仍會在發行前有限的情況下發生。

概觀

Pinecone Vector Store 連接器可用來存取和管理 Pinecone 中的數據。 連接器具有下列特性。

功能區域 支援
集合對應至 Pinecone 無伺服器索引
支援的索引鍵屬性類型 字串
支援的數據類型
  • 字串
  • int
  • long
  • double
  • float
  • bool
  • decimal
  • 字串類型的 可列舉專案
支援的向量屬性類型 ReadOnlyMemory<float>
支援的索引類型 PGA (Pinecone Graph 算法)
支援的距離函式
  • CosineSimilarity
  • DotProductSimilarity
  • EuclideanDistance
支援記錄中的多個向量 No
是否支援IsFilterable? Yes
是否支援IsFullTextSearchable? No
支援的 StoragePropertyName? Yes

開始使用

將 Pinecone Vector Store 連接器 NuGet 套件新增至您的專案。

dotnet add package Microsoft.SemanticKernel.Connectors.Pinecone --prerelease

您可以使用 Semantic Kernel 所提供的擴充方法,將向量存放區新增至 IServiceCollectionKernelBuilder可用的相依性插入容器或相依性插入容器。

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 無伺服器索引,而且抽象概念中沒有第二層。 Pinecone 支援稱為命名空間的第二層分組。

根據預設,Pinecone 連接器會傳遞 null 作為所有作業的命名空間。 不過,建構單一命名空間時,可以將單一命名空間傳遞至 Pinecone 集合,並改為針對所有作業使用此命名空間。

using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;

var collection = new PineconeVectorStoreRecordCollection<Hotel>(
    new PineconeClient(pineconeApiKey),
    "skhotels",
    new() { IndexNamespace = "seasidehotels" });

資料對應

當將數據從數據模型對應至記憶體時,Pinecone 連接器會提供預設對應程式。 Pinecone 需要將屬性對應至標識碼、元數據和值群組。 默認對應程式會使用模型批註或記錄定義來判斷每個屬性的類型,並執行此對應。

  • 批注為索引鍵的數據模型屬性將會對應至 Pinecone 識別符屬性。
  • 標記為數據的數據模型屬性會對應至 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 中使用。