使用 Pinecone 連接器 (預覽)
警告
語意核心向量存放區功能處於預覽狀態,且需要重大變更的改善可能仍會在發行前有限的情況下發生。
概觀
Pinecone Vector Store 連接器可用來存取和管理 Pinecone 中的數據。 連接器具有下列特性。
功能區域 | 支援 |
---|---|
集合對應至 | Pinecone 無伺服器索引 |
支援的索引鍵屬性類型 | 字串 |
支援的數據類型 |
|
支援的向量屬性類型 | ReadOnlyMemory<float> |
支援的索引類型 | PGA (Pinecone Graph 算法) |
支援的距離函式 |
|
支援記錄中的多個向量 | No |
是否支援IsFilterable? | Yes |
是否支援IsFullTextSearchable? | No |
支援的 StoragePropertyName? | Yes |
開始使用
將 Pinecone Vector Store 連接器 NuGet 套件新增至您的專案。
dotnet add package Microsoft.SemanticKernel.Connectors.Pinecone --prerelease
您可以使用 Semantic Kernel 所提供的擴充方法,將向量存放區新增至 IServiceCollection
上KernelBuilder
可用的相依性插入容器或相依性插入容器。
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 中使用。