Verwenden des Pinecone-Connectors (Vorschau)

Warnung

Pinecone hat die Unterstützung für das .NET SDK eingestellt, indem sein Repository archiviert wurde.

Warnung

Die Funktionalität des Semantischer Kernel Vector Store befindet sich in der Vorschau, und Verbesserungen, die Änderungen erfordern, können in begrenzten Fällen vor der Veröffentlichung noch auftreten.

Warnung

Die Funktionalität des Semantischer Kernel Vector Store befindet sich in der Vorschau, und Verbesserungen, die Änderungen erfordern, können in begrenzten Fällen vor der Veröffentlichung noch 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
Sammlung wird zugeordnet zu Pinecone serverloser Index
Unterstützte Schlüssel-Eigenschaftstypen string
Unterstützte Dateneigenschaftstypen
  • string
  • INT
  • long
  • double
  • float
  • decimal
  • Boolesch
  • Datum/Uhrzeit
  • und Iterables dieser Typen
Unterstützte Vektor-Eigenschaftstypen
  • list[float]
  • Liste[int]
  • numpy array
Unterstützte Indextypen PGA (Pinecone Graphalgorithmus)
Unterstützte Entfernungsfunktionen
  • CosineSimilarity
  • DotProductSimilarity
  • EuclideanSquaredDistance
Unterstützte Filterklauseln
  • EqualTo
  • AnyTagEqualTo
Unterstützt mehrere Vektoren in einem Datensatz Nein
IstFilterbar unterstützt? Ja
WirdFullTextSearchable unterstützt? Nein
Integrierte Einbettungen unterstützt? Ja, siehe hier
Wird GRPC unterstützt? Ja, siehe hier

Erste Schritte

Hinzufügen des Pinecone Vector Store Connector-Extras zu Ihrem Projekt

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.pinecone import PineconeStore

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

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

from semantic_kernel.connectors.pinecone import PineconeCollection

collection = PineconeCollection(collection_name="collection_name", record_type=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.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-Support

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

from semantic_kernel.connectors.pinecone import PineconeCollection

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

Oder mit Ihrem eigenen Kunden:

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)

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-Dokumentation und dann die Use integrated embeddings Abschnitte.

from semantic_kernel.connectors.pinecone import PineconeCollection

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

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

from semantic_kernel.connectors.pinecone import PineconeCollection

collection = PineconeCollection(collection_name="collection_name", record_type=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 ensure_collection_exists-Methode übergeben. Dadurch werden die standardeinstellungen außer Kraft gesetzt, die während der Initialisierung festgelegt wurden.

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

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 an die Pinecone-Sammlung zu übergeben, wenn sie erstellt wird, und diesen stattdessen für alle Operationen zu verwenden.

from semantic_kernel.connectors.pinecone import PineconeCollection

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

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