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 |
|
Ondersteunde vectoreigenschappentypen | ReadOnlyMemory<float> |
Ondersteunde indextypen | PGA (Pinecone Graph Algorithm) |
Ondersteunde afstandsfuncties |
|
Ondersteunde filterclausules |
|
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.