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 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 |
|
Unterstützte Vektor-Eigenschaftstypen |
|
Unterstützte Indextypen | PGA (Pinecone Graph-Algorithmus) |
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 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 values
gespeichert 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 |
|
Unterstützte Vektor-Eigenschaftstypen |
|
Unterstützte Indextypen | PGA (Pinecone Graph-Algorithmus) |
Unterstützte Entfernungsfunktionen |
|
Unterstützte Filterklauseln |
|
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_KEY
gelesen.
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.