Använda Pinecone-anslutningsappen (förhandsversion)
Varning
Funktionen Semantic Kernel Vector Store är i förhandsversion, och förbättringar som kräver icke-bakåtkompatibla ändringar kan fortfarande ske under begränsade omständigheter före lanseringen.
Översikt
Anslutningsprogrammet för Pinecone Vector Store kan användas för att komma åt och hantera data i Pinecone. Anslutningsappen har följande egenskaper.
Funktionsområde | Support |
---|---|
Samlingskartor till | Pinecone-serverlöst index |
Nyckelegenskapstyper som stöds | sträng |
Dataegenskapstyper som stöds |
|
Egenskapstyper för vektorer som stöds | ReadOnlyMemory-flyttal<> |
Indextyper som stöds | PGA (Pinecone Graph Algorithm) |
Avståndsfunktioner som stöds |
|
Stöder flera vektorer i en post | Nej |
Stöds IsFilterable? | Ja |
Stöds IsFullTextSearchable? | Nej |
Stöds StoragePropertyName? | Ja |
Komma igång
Lägg till NuGet-paketet för Pinecone Vector Store-anslutningsappen i projektet.
dotnet add package Microsoft.SemanticKernel.Connectors.Pinecone --prerelease
Du kan lägga till vektorlagret i den beroendeinmatningscontainer som är tillgänglig i containern KernelBuilder
eller till containern för IServiceCollection
beroendeinmatning med hjälp av tilläggsmetoder som tillhandahålls av semantisk kernel.
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);
Tilläggsmetoder som inte har några parametrar tillhandahålls också. Dessa kräver att en instans av PineconeClient
den registreras separat med containern för beroendeinmatning.
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();
Du kan skapa en Pinecone Vector Store-instans direkt.
using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;
var vectorStore = new PineconeVectorStore(
new PineconeClient(pineconeApiKey));
Det går att skapa en direktreferens till en namngiven samling.
using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;
var collection = new PineconeVectorStoreRecordCollection<Hotel>(
new PineconeClient(pineconeApiKey),
"skhotels");
Indexnamnområde
Abstraktionen för Vector Store stöder inte en mekanism för gruppering av poster i flera nivåer. Samlingar i abstraktionskartan till ett pinecone-serverlöst index och det finns ingen andra nivå i abstraktionen. Pinecone stöder en andra nivå av gruppering som kallas namnrymder.
Som standard skickar Pinecone-anslutningsappen null som namnrymd för alla åtgärder. Det är dock möjligt att skicka ett enda namnområde till Pinecone-samlingen när du skapar den och använda den i stället för alla åtgärder.
using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;
var collection = new PineconeVectorStoreRecordCollection<Hotel>(
new PineconeClient(pineconeApiKey),
"skhotels",
new() { IndexNamespace = "seasidehotels" });
Mappning av data
Pinecone-anslutningsappen tillhandahåller en standardmappare när data mappas från datamodellen till lagringen. Pinecone kräver att egenskaper mappas till id-, metadata- och värdegruppering. Standardmapparen använder modellanteckningarna eller postdefinitionen för att fastställa typen av varje egenskap och för att utföra den här mappningen.
- Datamodellegenskapen som har kommenterats som en nyckel mappas till egenskapen Pinecone id.
- Datamodellegenskaperna som kommenteras som data mappas till Pinecone-metadataobjektet.
- Datamodellegenskapen som kommenteras som en vektor mappas till egenskapen Pinecone-vektor.
Åsidosättning av egenskapsnamn
För dataegenskaper kan du ange åsidosättningsfältnamn som ska användas i lagring som skiljer sig från egenskapsnamnen i datamodellen. Detta stöds inte för nycklar eftersom en nyckel har ett fast namn i Pinecone.
Det stöds inte heller för vektorer, eftersom vektorn lagras under ett fast namn values
.
Åsidosättningen StoragePropertyName
av egenskapsnamnet görs genom att alternativet anges via datamodellattributen eller postdefinitionen.
Här är ett exempel på en datamodell med StoragePropertyName
angivna attribut och hur den representeras i 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-anslutningsappen är ännu inte tillgänglig i Python.
Pinecone-anslutningsappen är ännu inte tillgänglig i Java.