Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Warnung
Die Funktionalität des Pinecone-Vektor-Speichers 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 Semantic 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 Semantic 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 |
|
| Unterstützte Vektor-Eigenschaftstypen |
|
| Unterstützte Indextypen | PGA (Pinecone Graph Algorithm) |
| Unterstützte Entfernungsfunktionen |
|
| Unterstützte Filterklauseln |
|
| 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 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 an die Pinecone-Sammlung zu übergeben, wenn sie erstellt wird, und diesen stattdessen für alle Operationen 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 stellt einen Standard-Mapper bereit, 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.
Eigenschaftsname überschreiben
Für Daten-Eigenschaften können Sie überschreibbare Feldnamen angeben, die in der Speicherung verwendet werden 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.
Der Eigenschaftsname wird überschrieben, indem die Option StorageName über die Datenmodellattribute oder die Datensatzdefinition festgelegt wird.
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.
| Featurebereich | Unterstützung |
|---|---|
| Sammlung wird zugeordnet zu | Pinecone serverloser Index |
| Unterstützte Schlüssel-Eigenschaftstypen | string |
| Unterstützte Dateneigenschaftstypen |
|
| Unterstützte Vektor-Eigenschaftstypen |
|
| Unterstützte Indextypen | PGA (Pinecone Graph Algorithm) |
| Unterstützte Entfernungsfunktionen |
|
| Unterstützte Filterklauseln |
|
| 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.