Delen via


De Pinecone-connector gebruiken (preview)

Waarschuwing

De Semantische Kernel Vector Store-functionaliteit is in preview en verbeteringen waarvoor wijzigingen die fouten veroorzaken, kunnen nog steeds in beperkte omstandigheden optreden voordat ze worden uitgebracht.

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
Verzamelingstoewijzingen aan Serverloze index van pinecone
Ondersteunde sleuteleigenschapstypen tekenreeks
Ondersteunde gegevenseigenschapstypen
  • tekenreeks
  • int
  • long
  • dubbel
  • zwevend
  • bool
  • decimal
  • enumerables van het type tekenreeks
Ondersteunde vectoreigenschappentypen ReadOnlyMemory<float>
Ondersteunde indextypen PGA (Pinecone Graph Algorithm)
Ondersteunde afstandsfuncties
  • CosineSimilariteit
  • DotProductsimilarity
  • EuclideanDistance
Ondersteunt meerdere vectoren in een record Nee
Wordt Filterable ondersteund? Ja
WordtFullTextSearchable ondersteund? Nee
Ondersteunde StoragePropertyName? Ja

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 of KernelBuilder 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 de PineconeClient instantie afzonderlijk 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");

Indexnaamruimte

De Vector Store-abstractie biedt geen ondersteuning voor een groepeermechanisme met meerdere lagen. Verzamelingen in de abstractiekaart naar een serverloze Pinecone-index en er bestaat 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 één naamruimte door te geven aan de Pinecone-verzameling bij het samenstellen en gebruiken van deze in plaats daarvan voor alle bewerkingen.

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-, metagegevens- en waardengroeperingen. De standaardtoewijzing gebruikt de modelaantekeningen of recorddefinitie om het type van elke eigenschap te bepalen en om deze toewijzing 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 StoragePropertyName optie in te stellen via de kenmerken van het gegevensmodel of de recorddefinitie.

Hier volgt een voorbeeld van een gegevensmodel dat StoragePropertyName is ingesteld op de kenmerken en hoe dat wordt weergegeven in 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." }
}

De Pinecone-connector is nog niet beschikbaar in Python.

De Pinecone-connector is nog niet beschikbaar in Java.