Freigeben über


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
  • Zeichenfolge
  • int
  • long
  • double
  • float
  • bool
  • Decimal
  • Enumerationen des Typs Zeichenfolge
Unterstützte Vektoreigenschaftentypen ReadOnlyMemory<float>
Unterstützte Indextypen PGA (Pinecone Graph-Algorithmus)
Unterstützte Entfernungsfunktionen
  • KosinusSimilarität
  • DotProductSimilarity
  • EuklideanDistance
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 valuesgespeichert 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.