Verwenden des Pinecone-Connectors (Vorschau)
Warnung
Die Funktionalität des semantischen Kernelvektorspeichers befindet sich in der Vorschau, und Verbesserungen, die fehlerhafte Änderungen erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung auftreten.
Übersicht
Der Pinecone Vector Store-Connector kann verwendet werden, um auf Daten in Pinecone zuzugreifen und sie zu verwalten. Der Verbinder weist die folgenden Merkmale auf.
Featurebereich | Unterstützung |
---|---|
Auflistungszuordnungen | Pinecone serverless Index |
Unterstützte Schlüsseleigenschaftentypen | Zeichenfolge |
Unterstützte Datentypen für Datentypen |
|
Unterstützte Vektoreigenschaftentypen | ReadOnlyMemory<float> |
Unterstützte Indextypen | PGA (Pinecone Graph-Algorithmus) |
Unterstützte Entfernungsfunktionen |
|
Unterstützt mehrere Vektoren in einem Datensatz | No |
IstFilterbar unterstützt? | Ja |
WirdFullTextSearchable unterstützt? | No |
StoragePropertyName wird unterstützt? | Ja |
Erste Schritte
Fügen Sie ihrem Projekt das NuGet-Paket des Pinecone Vector Store-Connectors hinzu.
dotnet add package Microsoft.SemanticKernel.Connectors.Pinecone --prerelease
Sie können den Vektorspeicher dem Container zum Einfügen von Abhängigkeiten hinzufügen, der für den KernelBuilder
Container für Abhängigkeitseinfügungen verfügbar ist, oder dem IServiceCollection
Container zum Einfügen von Abhängigkeiten mithilfe von Erweiterungsmethoden, die vom semantischen Kernel bereitgestellt werden.
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);
Erweiterungsmethoden, die keine Parameter verwenden, werden ebenfalls bereitgestellt. Diese erfordern eine Instanz des PineconeClient
separat registrierten Abhängigkeitseinfügungscontainers.
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();
Sie können eine Pinecone Vector Store-Instanz direkt erstellen.
using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;
var vectorStore = new PineconeVectorStore(
new PineconeClient(pineconeApiKey));
Es ist möglich, einen direkten Verweis auf eine benannte Auflistung zu erstellen.
using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;
var collection = new PineconeVectorStoreRecordCollection<Hotel>(
new PineconeClient(pineconeApiKey),
"skhotels");
Indexnamespace
Die Vektorspeicher-Abstraktion unterstützt keinen Mechanismus für mehrstufige Datensatzgruppierung. Auflistungen in der Abstraktionskarte zu einem serverlosen Pinecone-Index und keine zweite Ebene ist in der Abstraktion vorhanden. Pinecone unterstützt eine zweite Ebene der Gruppierung namens Namespaces.
Standardmäßig übergibt der Pinecone-Connector NULL als Namespace für alle Vorgänge. Es ist jedoch möglich, einen einzelnen Namespace beim Erstellen an die Pinecone-Auflistung zu übergeben und stattdessen für alle Vorgänge zu verwenden.
using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;
var collection = new PineconeVectorStoreRecordCollection<Hotel>(
new PineconeClient(pineconeApiKey),
"skhotels",
new() { IndexNamespace = "seasidehotels" });
Datenzuordnung
Der Pinecone-Connector stellt eine Standardzuordnung bereit, wenn Daten vom Datenmodell zum Speicher zugeordnet werden. Pinecone erfordert, dass Eigenschaften in ID-, Metadaten- und Wertegruppierungen zugeordnet werden. Der Standardzuordnungs-Mapper verwendet die Modellanmerkungen oder die Datensatzdefinition, um den Typ jeder Eigenschaft zu bestimmen und diese Zuordnung auszuführen.
- Die als Schlüssel gekennzeichnete Datenmodelleigenschaft wird der Pinecone-ID-Eigenschaft zugeordnet.
- Die Datenmodelleigenschaften, die als Daten gekennzeichnet sind, werden dem Pinecone-Metadatenobjekt zugeordnet.
- Die Als Vektor gekennzeichnete Datenmodelleigenschaft wird der Pinecone-Vektoreigenschaft zugeordnet.
Außerkraftsetzung des Eigenschaftsnamens
Für Dateneigenschaften können Sie Feldnamen außer Kraft setzen, die im Speicher verwendet werden sollen, die sich von den Eigenschaftennamen im Datenmodell unterscheiden. Dies wird für Schlüssel nicht unterstützt, da ein Schlüssel einen festen Namen in Pinecone hat.
Es wird auch für Vektoren nicht unterstützt, da der Vektor unter einem festen Namen values
gespeichert wird.
Die Außerkraftsetzung des Eigenschaftsnamens erfolgt durch Festlegen der StoragePropertyName
Option über die Datenmodellattribute oder datensatzdefinition.
Hier sehen Sie ein Beispiel für ein Datenmodell, das StoragePropertyName
seine Attribute festgelegt hat und wie dies in Pinecone dargestellt wird.
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." }
}
Der Pinecone Connector ist in Python noch nicht verfügbar.
Der Pinecone-Connector ist in Java noch nicht verfügbar.