Delen via


De Pinecone-connector gebruiken (Voorbeeld)

Waarschuwing

De functionaliteit van Pinecone Vector Store is in preview, en verbeteringen die grote veranderingen vereisen, kunnen in beperkte omstandigheden nog steeds plaatsvinden voordat zij worden uitgebracht.

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.

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 (integer)
  • lang
  • dubbel
  • zwevend
  • Bool
  • decimaal
  • enumerables van het type string
Ondersteunde vectoreigenschappentypen
  • ReadOnlyMemory<float>
  • Float voor insluiten<>
  • float[]
Ondersteunde indextypen PGA (Pinecone Graph Algorithm)
Ondersteunde afstandsfuncties
  • CosineSimilariteit
  • DotProductSimilariteit
  • Euclidische Kwadratische Afstand
Ondersteunde filterclausules
  • EqualTo
Ondersteunt meerdere vectoren in een record Nee
WordtIndexed ondersteund? Ja
Wordt Ondersteund doorFullTextIndexed? Nee
Wordt StorageName ondersteund? Ja
HybridSearch ondersteund? Nee
Geïntegreerde insluitingen 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.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder();
kernelBuilder.Services
    .AddPineconeVectorStore(pineconeApiKey);
using Microsoft.Extensions.DependencyInjection;

// 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.Services.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 PineconeCollection<string, 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 PineconeCollection<string, Hotel>(
    new PineconeClient(pineconeApiKey),
    "skhotels",
    new() { IndexNamespace = "seasidehotels" });

Datamapping

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.

Overschrijven van eigenschapsnaam

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 StorageName in te stellen via de attributen van het gegevensmodel of de recorddefinitie.

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

using Microsoft.Extensions.VectorData;

public class Hotel
{
    [VectorStoreKey]
    public string HotelId { get; set; }

    [VectorStoreData(IsIndexed = true, StorageName = "hotel_name")]
    public string HotelName { get; set; }

    [VectorStoreData(IsFullTextIndexed = true, StorageName = "hotel_description")]
    public string Description { get; set; }

    [VectorStoreVector(Dimensions: 4, DistanceFunction = DistanceFunction.CosineSimilarity, IndexKind = 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." }
}

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 (integer)
  • lang
  • dubbel
  • zwevend
  • decimaal
  • Bool
  • Datum/tijd
  • en iterables van elk van deze typen
Ondersteunde vectoreigenschappentypen
  • lijst[float]
  • lijst[int]
  • numpy-array
Ondersteunde indextypen PGA (Pinecone Graph Algorithm)
Ondersteunde afstandsfuncties
  • CosineSimilariteit
  • DotProductSimilariteit
  • Euclidische Kwadratische Afstand
Ondersteunde filterclausules
  • EqualTo
  • AnyTagEqualTo
Ondersteunt meerdere vectoren in een record Nee
Wordt Filterable ondersteund? Ja
WordtFullTextSearchable ondersteund? Nee
Geïntegreerde insluitingen ondersteund? Ja, zie hier
GRPC ondersteund? Ja, zie hier

Aan de slag

Voeg de Pinecone Vector Store-connector extra toe aan uw project.

pip install semantic-kernel[pinecone]

Vervolgens kunt u een PineconeStore-exemplaar maken en deze gebruiken om een verzameling te maken. Hiermee wordt de API-sleutel van Pinecone uit de omgevingsvariabele PINECONE_API_KEYgelezen.

from semantic_kernel.connectors.pinecone import PineconeStore

store = PineconeStore()
collection = store.get_collection(collection_name="collection_name", record_type=DataModel)

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

from semantic_kernel.connectors.pinecone import PineconeCollection

collection = PineconeCollection(collection_name="collection_name", record_type=DataModel)

U kunt ook uw eigen Pinecone-client maken en doorgeven aan de constructor. De client moet PineconeAsyncio of PineconeGRPC zijn (zie GRPC-ondersteuning).

from semantic_kernel.connectors.pinecone import PineconeStore, PineconeCollection
from pinecone import PineconeAsyncio

client = PineconeAsyncio(api_key="your_api_key") 
store = PineconeStore(client=client)
collection = store.get_collection(collection_name="collection_name", record_type=DataModel)

GRPC-ondersteuning

We ondersteunen ook twee opties voor de verzamelingsconstructor, de eerste is om GRPC-ondersteuning in te schakelen:

from semantic_kernel.connectors.pinecone import PineconeCollection

collection = PineconeCollection(collection_name="collection_name", record_type=DataModel, use_grpc=True)

Of met uw eigen client:

from semantic_kernel.connectors.pinecone import PineconeStore
from pinecone.grpc import PineconeGRPC

client = PineconeGRPC(api_key="your_api_key")
store = PineconeStore(client=client)
collection = store.get_collection(collection_name="collection_name", record_type=DataModel)

Geïntegreerde insluitingen

De tweede is het gebruik van de geïntegreerde insluitingen van Pinecone. Hiermee wordt gecontroleerd op een omgevingsvariabele genaamd PINECONE_EMBED_MODEL met de modelnaam, of u kunt een embed_settings dict aanleveren, die alleen de modelsleutel kan bevatten, of de volledige instellingen voor het embeddermodel. In het eerste geval worden de andere instellingen afgeleid van de definitie van het gegevensmodel.

Zie Pinecone-documenten en bekijk daarna de Use integrated embeddings secties.

from semantic_kernel.connectors.pinecone import PineconeCollection

collection = PineconeCollection(collection_name="collection_name", record_type=DataModel)

Als u de omgevingsvariabele niet wilt instellen, kunt u de insluitinstellingen ook doorgeven aan de constructor:

from semantic_kernel.connectors.pinecone import PineconeCollection

collection = PineconeCollection(collection_name="collection_name", record_type=DataModel, embed_settings={"model": "multilingual-e5-large"})

Dit kan andere details bevatten over de vectorinstallatie, zoals metrische gegevens en veldtoewijzing. U kunt de insluitinstellingen ook doorgeven aan de methode ensure_collection_exists. Hierdoor worden de standaardinstellingen die tijdens de initialisatie zijn ingesteld, overschreven.

from semantic_kernel.connectors.pinecone import PineconeCollection

collection = PineconeCollection(collection_name="collection_name", record_type=DataModel)
await collection.ensure_collection_exists(embed_settings={"model": "multilingual-e5-large"})

Belangrijk: GRPC en geïntegreerde insluitingen kunnen niet samen worden gebruikt.

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 '' door als 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.

from semantic_kernel.connectors.pinecone import PineconeCollection

collection = PineconeCollection(
    collection_name="collection_name", 
    record_type=DataModel, 
    namespace="seasidehotels"
)

De Pinecone-connector is nog niet beschikbaar in Java.