Delen via


De Pinecone-connector gebruiken (Voorbeeld)

Waarschuwing

De functionaliteit van de Semantische Kernel Vector Store is in preview, en verbeteringen waartoe brekende wijzigingen behoren, kunnen nog steeds in beperkte omstandigheden optreden voor de release.

Overzicht

De Pinecone Vector Store-connector kan worden gebruikt voor toegang tot en beheer van gegevens in Pinecone. De verbindingslijn heeft de volgende kenmerken.

Functiegebied Ondersteuning
Verzameling komt overeen met Serverloze Index van Pinecone
Ondersteunde sleuteleigenschapstypen tekenreeks
Ondersteunde gegevenseigenschapstypen
  • tekenreeks
  • int
  • lang
  • dubbel
  • zwevend
  • bool
  • decimaal
  • enumerables van het type string
Ondersteunde vectoreigenschappentypen ReadOnlyMemory<float>
Ondersteunde indextypen PGA (Pinecone Graph Algorithm)
Ondersteunde afstandsfuncties
  • CosineSimilariteit
  • DotProductSimilariteit
  • EuclideanSquaredDistance
Ondersteunde filterclausules
  • EqualTo
Ondersteunt meerdere vectoren in een record Nee
Wordt Filterable ondersteund? Ja
WordtFullTextSearchable ondersteund? Nee
Wordt StoragePropertyName ondersteund? Ja
HybridSearch ondersteund? Nee

Aan de slag

Voeg het NuGet-pakket van de Pinecone Vector Store-connector toe aan uw project.

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

U kunt het vectorarchief toevoegen aan de container voor afhankelijkheidsinjectie die beschikbaar is op KernelBuilder of aan de IServiceCollection container voor afhankelijkheidsinjectie met behulp van extensiemethoden die worden geleverd door Semantische 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);

Extensiemethoden waarvoor geen parameters worden gebruikt, worden ook opgegeven. Hiervoor moet een exemplaar van PineconeClient apart worden geregistreerd bij de container voor afhankelijkheidsinjectie.

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();

U kunt rechtstreeks een Pinecone Vector Store-exemplaar maken.

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

var vectorStore = new PineconeVectorStore(
    new PineconeClient(pineconeApiKey));

Het is mogelijk om een directe verwijzing naar een benoemde verzameling te maken.

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

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

Indexnamespace

De Vector Store-abstractie biedt geen ondersteuning voor een groepeermechanisme met meerdere lagen. Verzamelingen in de abstractie komen overeen met een serverloze Pinecone-index en er is geen tweede niveau in de abstractie. Pinecone biedt wel ondersteuning voor een tweede groepeerniveau genaamd naamruimten.

Standaard geeft de Pinecone-connector null door als de naamruimte voor alle bewerkingen. Het is echter mogelijk om een enkele naamruimte aan de Pinecone-verzameling door te geven bij het samenstellen, en deze vervolgens voor alle bewerkingen te gebruiken.

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

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

Gegevenstoewijzing

De Pinecone-connector biedt een standaardtoewijzingsfunctie bij het toewijzen van gegevens uit het gegevensmodel aan de opslag. Voor Pinecone moeten eigenschappen worden toegewezen aan ID-, metadata- en waardengroepen. De standaardmapper gebruikt de modelaantekeningen of recorddefinitie om het type van elke eigenschap te bepalen en deze mapping uit te voeren.

  • De eigenschap van het gegevensmodel die als sleutel wordt geannoteerd, wordt toegewezen aan de eigenschap Pinecone-id.
  • De eigenschappen van het gegevensmodel die zijn geannoteerd als gegevens, worden toegewezen aan het metagegevensobject Pinecone.
  • De eigenschap van het gegevensmodel die is geannoteerd als een vector, wordt toegewezen aan de eigenschap Pinecone Vector.

Eigenschapsnaam overschrijven

Voor gegevenseigenschappen kunt u veldnamen overschrijven die moeten worden gebruikt in de opslag die verschilt van de eigenschapsnamen in het gegevensmodel. Dit wordt niet ondersteund voor sleutels, omdat een sleutel een vaste naam heeft in Pinecone. Het wordt ook niet ondersteund voor vectoren, omdat de vector wordt opgeslagen onder een vaste naam values. De eigenschapsnaam wordt overschreven door de optie StoragePropertyName in te stellen via de attributen van het gegevensmodel of de recorddefinitie.

Hier is een voorbeeld van een gegevensmodel met StoragePropertyName ingesteld voor zijn attributen en hoe dat in Pinecone wordt weergegeven.

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.CosineSimilarity, 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." }
}

De Pinecone-connector is nog niet beschikbaar in Python.

De Pinecone-connector is nog niet beschikbaar in Java.