Dela via


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
  • sträng
  • heltal
  • lång
  • dubbel
  • flyttal
  • bool
  • decimal
  • uppräkningar av typsträng
Egenskapstyper för vektorer som stöds ReadOnlyMemory-flyttal<>
Indextyper som stöds PGA (Pinecone Graph Algorithm)
Avståndsfunktioner som stöds
  • CosineSimilarity
  • DotProductSimilarity
  • EuclideanDistance
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.