Freigeben über


Verwenden des Pinecone-Connectors (Vorschau)

Warnung

Die Funktionen des Pinecone-Vektorspeichers befinden sich in der Vorschau, und Verbesserungen, die kompatibilitätsbrechende Änderungen erfordern, können unter bestimmten Umständen noch vor der Veröffentlichung auftreten.

Warnung

Die Funktionalität des Semantic Kernel Vektor-Speichers befindet sich in der Vorschau. Unter bestimmten Bedingungen können vor der Veröffentlichung noch Verbesserungen auftreten, die grundlegende Änderungen erfordern.

Warnung

Die Funktionalität des Semantic Kernel Vektor-Speichers befindet sich in der Vorschau. Unter bestimmten Bedingungen können vor der Veröffentlichung noch Verbesserungen auftreten, die grundlegende Änderungen erfordern.

Ü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.

Feature-Bereich Unterstützung
Sammlungszuordnungen Pinecone serverloser Index
Unterstützte Schlüssel-Eigenschaftstypen Zeichenfolge
Unterstützte Dateneigenschaftstypen
  • Zeichenfolge
  • INT
  • lang
  • doppelt
  • schwebend
  • Boolesch
  • Dezimal
  • Auflistungen vom Typ String
Unterstützte Vektor-Eigenschaftstypen
  • ReadOnlyMemory<float>
  • Einbetten von<Float>
  • float[]
Unterstützte Indextypen PGA (Pinecone Graph-Algorithmus)
Unterstützte Entfernungsfunktionen
  • KosinusSimilarität
  • Punktprodukt-Ähnlichkeit
  • Euklidische Quadratische Distanz
Unterstützte Filterklauseln
  • EqualTo
Unterstützt mehrere Vektoren in einem Datensatz Nein
Wird Indized unterstützt? Ja
WirdFullTextIndexed unterstützt? Nein
Wird StorageName unterstützt? Ja
HybridSearch wird unterstützt? Nein
Integrierte Einbettungen werden unterstützt? Nein

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 für den KernelBuilder verfügbaren Abhängigkeitsinjektionscontainer oder dem IServiceCollection-Abhängigkeitsinjektionscontainer hinzufügen, indem Sie Erweiterungsmethoden verwenden, die vom semantischen Kernel bereitgestellt werden.

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);

Erweiterungsmethoden, die keine Parameter verwenden, werden ebenfalls bereitgestellt. Diese erfordern, dass eine Instanz des PineconeClient separat im Dependency Injection Container registriert wird.

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();

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 PineconeCollection<string, Hotel>(
    new PineconeClient(pineconeApiKey),
    "skhotels");

Index-Namespace

Die Vektorspeicher-Abstraktion unterstützt keinen Mechanismus für mehrstufige Datensatzgruppierung. Auflistungen innerhalb der Abstraktion werden einem serverlosen Pinecone-Index zugeordnet und es gibt keine zweite Ebene in der Abstraktion. 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 der Pinecone-Auflistung zu übergeben und diesen stattdessen für alle Vorgänge zu verwenden.

using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;

var collection = new PineconeCollection<string, Hotel>(
    new PineconeClient(pineconeApiKey),
    "skhotels",
    new() { IndexNamespace = "seasidehotels" });

Datenzuordnung

Der Pinecone-Connector bietet einen Standard-Mapper, wenn Daten vom Datenmodell in den Speicher abgebildet 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 angeben, die im Speicher verwendet werden sollen und sich von den Eigenschaftsnamen 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 StorageName Option über die Datenmodellattribute oder Datensatzdefinition.

Hier ist ein Beispiel für ein Datenmodell, bei dem StorageName auf seinen Attributen gesetzt ist, und wie dies in Pinecone dargestellt wird.

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." }
}

Ü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.

Feature-Bereich Unterstützung
Sammlungszuordnungen Pinecone serverloser Index
Unterstützte Schlüssel-Eigenschaftstypen Zeichenfolge
Unterstützte Dateneigenschaftstypen
  • Zeichenfolge
  • INT
  • lang
  • doppelt
  • schwebend
  • Dezimal
  • Boolesch
  • Datum/Uhrzeit
  • und Iterables von jedem dieser Typen
Unterstützte Vektor-Eigenschaftstypen
  • Liste[float]
  • list[int]
  • numpy array
Unterstützte Indextypen PGA (Pinecone Graph-Algorithmus)
Unterstützte Entfernungsfunktionen
  • KosinusSimilarität
  • Punktprodukt-Ähnlichkeit
  • Euklidische Quadratische Distanz
Unterstützte Filterklauseln
  • EqualTo
  • AnyTagEqualTo
Unterstützt mehrere Vektoren in einem Datensatz Nein
IstFilterbar unterstützt? Ja
WirdFullTextSearchable unterstützt? Nein
Integrierte Einbettungen werden unterstützt? Ja, siehe hier
Wird GRPC unterstützt? Ja, siehe hier

Erste Schritte

Fügen Sie dem Projekt den Pinecone Vector Store-Connector hinzu.

pip install semantic-kernel[pinecone]

Anschließend können Sie eine PineconeStore-Instanz erstellen und sie zum Erstellen einer Sammlung verwenden. Dadurch wird der Pinecone-API-Schlüssel aus der Umgebungsvariablen PINECONE_API_KEYgelesen.

from semantic_kernel.connectors.memory.pinecone import PineconeStore

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

Es ist möglich, einen direkten Verweis auf eine benannte Auflistung zu erstellen.

from semantic_kernel.connectors.memory.pinecone import PineconeCollection

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

Sie können auch Ihren eigenen Pinecone-Client erstellen und an den Konstruktor übergeben. Der Client muss entweder PineconeAsyncio oder PineconeGRPC sein (siehe GRPC-Support).

from semantic_kernel.connectors.memory.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", data_model=DataModel)

GRPC-Unterstützung

Außerdem unterstützen wir zwei Optionen für den Sammlungskonstruktor: Zunächst wird die GRPC-Unterstützung aktiviert:

from semantic_kernel.connectors.memory.pinecone import PineconeCollection

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

Oder mit Ihrem eigenen Kunden:

from semantic_kernel.connectors.memory.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", data_model=DataModel)

Integrierte Einbettungen

Die zweite besteht darin, die integrierten Einbettungen von Pinecone zu verwenden. Dadurch wird eine Umgebungsvariable namens PINECONE_EMBED_MODEL mit dem Modellnamen überprüft, oder Sie können ein embed_settings Dict übergeben, das nur den Modellschlüssel oder die vollständigen Einstellungen für das Einbettungsmodell enthalten kann. Im früheren Fall werden die anderen Einstellungen aus der Datenmodelldefinition abgeleitet.

Siehe Pinecone-Dokumente und dann die Use integrated embeddings Abschnitte.

from semantic_kernel.connectors.memory.pinecone import PineconeCollection

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

Wenn Sie die Umgebungsvariable nicht festlegen, können Sie alternativ die Einbettungseinstellungen an den Konstruktor übergeben:

from semantic_kernel.connectors.memory.pinecone import PineconeCollection

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

Dies kann weitere Details zum Vektorsetup enthalten, z. B. Metrik und Feldzuordnung. Sie können die Einbettungseinstellungen auch an die create_collection-Methode übergeben. Dadurch werden die standardeinstellungen außer Kraft gesetzt, die während der Initialisierung festgelegt wurden.

from semantic_kernel.connectors.memory.pinecone import PineconeCollection

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

Wichtig: GRPC und integrierte Einbettungen können nicht zusammen verwendet werden.

Index-Namespace

Die Vektorspeicher-Abstraktion unterstützt keinen Mechanismus für mehrstufige Datensatzgruppierung. Auflistungen innerhalb der Abstraktion werden einem serverlosen Pinecone-Index zugeordnet und es gibt keine zweite Ebene in der Abstraktion. Pinecone unterstützt eine zweite Ebene der Gruppierung namens Namespaces.

Standardmäßig übergibt der Pinecone-Connector '' als Namespace für alle Vorgänge. Es ist jedoch möglich, einen einzelnen Namespace beim Erstellen der Pinecone-Auflistung zu übergeben und diesen stattdessen für alle Vorgänge zu verwenden.

from semantic_kernel.connectors.memory.pinecone import PineconeCollection

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

Der Pinecone-Connector ist in Java noch nicht verfügbar.