Partager via


Utilisation du connecteur Pinecone (préversion)

Avertissement

La fonctionnalité de magasin de vecteurs du noyau sémantique est en préversion et des améliorations nécessitant des modifications cassants peuvent toujours se produire dans des circonstances limitées avant la mise en production.

Vue d’ensemble

Le connecteur Pinecone Vector Store peut être utilisé pour accéder aux données et les gérer dans Pinecone. Le connecteur présente les caractéristiques suivantes.

Zone Fonctionnalités Support
Mappages de collection à Pinecone serverless Index
Types de propriétés de clé pris en charge string
Types de propriétés de données pris en charge
  • string
  • int
  • long
  • double
  • virgule flottante
  • bool
  • decimal
  • énumérables de type string
Types de propriétés vectorielles pris en charge Float ReadOnlyMemory<>
Types d’index pris en charge PGA (Algorithme graph Pinecone)
Fonctions de distance prises en charge
  • CosineSimilarity
  • DotProductSimilarity
  • EuclideanDistance
Prend en charge plusieurs vecteurs dans un enregistrement Non
Est-il pris en charge ? Oui
IsFullTextSearchable pris en charge ? Non
StoragePropertyName pris en charge ? Oui

Mise en route

Ajoutez le package NuGet du connecteur Pinecone Vector Store à votre projet.

dotnet add package Microsoft.SemanticKernel.Connectors.Pinecone --prerelease

Vous pouvez ajouter le magasin de vecteurs au conteneur d’injection de dépendances disponible sur le KernelBuilder conteneur ou au conteneur d’injection de dépendances à l’aide IServiceCollection de méthodes d’extension fournies par le noyau sémantique.

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

Les méthodes d’extension qui ne prennent aucun paramètre sont également fournies. Celles-ci nécessitent l’inscription distincte d’une PineconeClient instance du conteneur d’injection de dépendances.

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

Vous pouvez construire directement une instance pinecone Vector Store.

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

var vectorStore = new PineconeVectorStore(
    new PineconeClient(pineconeApiKey));

Il est possible de construire une référence directe à une collection nommée.

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

var collection = new PineconeVectorStoreRecordCollection<Hotel>(
    new PineconeClient(pineconeApiKey),
    "skhotels");

Espace de noms d’index

L’abstraction vector store ne prend pas en charge un mécanisme de regroupement d’enregistrements multiniveau. Les collections de la carte d’abstraction à un index serverless Pinecone et aucun deuxième niveau n’existe dans l’abstraction. Pinecone prend en charge un deuxième niveau de regroupement appelé espaces de noms.

Par défaut, le connecteur Pinecone passe null comme espace de noms pour toutes les opérations. Toutefois, il est possible de passer un espace de noms unique à la collection Pinecone lors de sa construction et de l’utiliser à la place pour toutes les opérations.

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

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

Mappage de données

Le connecteur Pinecone fournit un mappeur par défaut lors du mappage des données du modèle de données au stockage. Pinecone nécessite que les propriétés soient mappées en id, métadonnées et regroupements de valeurs. Le mappeur par défaut utilise les annotations de modèle ou la définition d’enregistrement pour déterminer le type de chaque propriété et effectuer ce mappage.

  • La propriété de modèle de données annotée en tant que clé sera mappée à la propriété d’ID Pinecone.
  • Les propriétés du modèle de données annotées en tant que données seront mappées à l’objet de métadonnées Pinecone.
  • La propriété de modèle de données annotée en tant que vecteur sera mappée à la propriété de vecteur Pinecone.

Remplacement du nom de propriété

Pour les propriétés de données, vous pouvez fournir des noms de champs de remplacement à utiliser dans le stockage différent des noms de propriétés sur le modèle de données. Cela n’est pas pris en charge pour les clés, car une clé a un nom fixe dans Pinecone. Il n’est pas non plus pris en charge pour les vecteurs, car le vecteur est stocké sous un nom valuesfixe. Le remplacement du nom de propriété est effectué en définissant l’option StoragePropertyName via les attributs du modèle de données ou la définition d’enregistrement.

Voici un exemple de modèle de données avec StoragePropertyName un ensemble sur ses attributs et comment cela sera représenté dans Pinecone.

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

Le connecteur Pinecone n’est pas encore disponible en Python.

Le connecteur Pinecone n’est pas encore disponible en Java.