Sdílet prostřednictvím


Použití konektoru Pinecone (Preview)

Upozorňující

Funkce sémantického úložiště vektorů jádra je ve verzi Preview a vylepšení, která vyžadují zásadní změny, se můžou vyskytovat za omezených okolností před vydáním.

Přehled

Konektor Pinecone Vector Store lze použít pro přístup k datům v Pineconu a jejich správě. Konektor má následující charakteristiky.

Oblast funkcí Technická podpora
Kolekce map na Borovice bezserverový index
Podporované typy vlastností klíče string
Podporované typy datových vlastností
  • string
  • int
  • long
  • double
  • float (číslo s plovoucí řádovou čárkou)
  • bool
  • decimal
  • enumerables of type string
Podporované typy vektorových vlastností ReadOnlyMemory<float>
Podporované typy indexů PGA (Pinecone Graph Algorithm)
Podporované funkce vzdálenosti
  • KosineSimilarita
  • DotProductSimilarity
  • EuclideanDistance
Podporuje více vektorů v záznamu. No
Je podporováno Filtrování? Ano
Podporuje se IsFullTextSearchable? No
StoragePropertyName se podporuje? Ano

Začínáme

Přidejte do projektu balíček NuGet konektoru Pinecone Vector Store.

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

Vektorové úložiště můžete přidat do kontejneru injektáže závislostí dostupného IServiceCollection v KernelBuilder kontejneru injektáže závislostí nebo do kontejneru injektáže závislostí pomocí rozšiřujících metod poskytovaných sémantickým jádrem.

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

K dispozici jsou také metody rozšíření, které nepoužívají žádné parametry. Vyžadují samostatnou registraci instance PineconeClient kontejneru injektáže závislostí.

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

Instanci Pinecone Vector Store můžete vytvořit přímo.

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

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

Je možné vytvořit přímý odkaz na pojmenovanou kolekci.

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

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

Obor názvů indexu

Abstrakce vektorového úložiště nepodporuje mechanismus seskupování více vrstev záznamů. Kolekce v abstrakci mapují na bezserverový index Pinecone a v abstrakci neexistuje žádná druhá úroveň. Pinecone podporuje druhou úroveň seskupování označovaných jako obory názvů.

Ve výchozím nastavení konektor Pinecone předá hodnotu null jako obor názvů pro všechny operace. Při vytváření kolekce Pinecone je však možné předat jeden obor názvů a místo toho ho použít pro všechny operace.

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

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

Mapování dat

Konektor Pinecone poskytuje výchozí mapovač při mapování dat z datového modelu do úložiště. Pinecone vyžaduje, aby vlastnosti byly mapovány na ID, metadata a seskupení hodnot. Výchozí mapovač používá k určení typu každé vlastnosti a k tomuto mapování poznámky modelu nebo definici záznamu.

  • Vlastnost datového modelu anotovaná jako klíč bude mapována na vlastnost Pinecone ID.
  • Vlastnosti datového modelu anotované jako data budou mapovány na objekt metadat Pinecone.
  • Vlastnost datového modelu anotovaná jako vektor se mapuje na vlastnost Pinecone vector.

Přepsání názvu vlastnosti

U vlastností dat můžete zadat názvy polí přepsání pro použití v úložišti, které se liší od názvů vlastností datového modelu. U klíčů to není podporováno, protože klíč má pevný název v Pinecone. Také není podporován pro vektory, protože vektor je uložen pod pevným názvem values. Přepsání názvu vlastnosti se provádí nastavením StoragePropertyName možnosti prostřednictvím atributů datového modelu nebo definice záznamu.

Tady je příklad datového modelu se StoragePropertyName sadou jeho atributů a způsob, jak bude reprezentován v 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." }
}

Konektor Pinecone ještě není v Pythonu k dispozici.

Konektor Pinecone ještě není v Javě k dispozici.