Udostępnij za pośrednictwem


Korzystanie z łącznika Pinecone (wersja zapoznawcza)

Ostrzeżenie

Funkcja semantycznego magazynu wektorów jądra jest dostępna w wersji zapoznawczej, a ulepszenia wymagające zmian powodujących niezgodność mogą nadal występować w ograniczonych okolicznościach przed wydaniem.

Omówienie

Łącznik Pinecone Vector Store może służyć do uzyskiwania dostępu do danych w Pinecone i zarządzania nimi. Łącznik ma następujące cechy.

Obszar funkcji Pomoc techniczna
Mapowania kolekcji na Indeks bezserwerowy Pinecone
Obsługiwane typy właściwości kluczy string
Obsługiwane typy właściwości danych
  • string
  • int
  • długi
  • double
  • liczba zmiennoprzecinkowa
  • bool
  • decimal
  • wyliczanie ciągu typu
Obsługiwane typy właściwości wektorów ReadOnlyMemory<float>
Obsługiwane typy indeksów PGA (Algorytm grafu Pinecone)
Obsługiwane funkcje odległości
  • CosineSimilarity
  • DotProductSimilarity
  • EuclideanDistance
Obsługuje wiele wektorów w rekordzie Nie.
Czy filtrowanie jest obsługiwane? Tak
Czy jest obsługiwany element IsFullTextSearchable? Nie.
Obsługiwana nazwa_właściwości_magazynu? Tak

Wprowadzenie

Dodaj pakiet NuGet łącznika Pinecone Vector Store do projektu.

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

Magazyn wektorów można dodać do kontenera iniekcji zależności dostępnego w KernelBuilder kontenerze iniekcji zależności lub IServiceCollection przy użyciu metod rozszerzeń udostępnianych przez jądro semantyczne.

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

Dostępne są również metody rozszerzeń, które nie przyjmują parametrów. Wymagają one osobnego zarejestrowania PineconeClient wystąpienia obiektu w kontenerze wstrzykiwania zależności.

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

Wystąpienie sklepu Pinecone Vector Store można skonstruować bezpośrednio.

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

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

Istnieje możliwość utworzenia bezpośredniego odwołania do nazwanej kolekcji.

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

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

Przestrzeń nazw indeksu

Abstrakcja magazynu wektorów nie obsługuje wielowarstwowego mechanizmu grupowania rekordów. Kolekcje na mapie abstrakcji na indeks bezserwerowy Pinecone i nie ma drugiego poziomu w abstrakcji. Pinecone obsługuje drugi poziom grupowania nazywanych przestrzeniami nazw.

Domyślnie łącznik Pinecone przekaże wartość null jako przestrzeń nazw dla wszystkich operacji. Można jednak przekazać pojedynczą przestrzeń nazw do kolekcji Pinecone podczas jej konstruowania i użyć jej zamiast tego dla wszystkich operacji.

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

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

Mapowanie danych

Łącznik Pinecone udostępnia domyślny maper podczas mapowania danych z modelu danych do magazynu. Pinecone wymaga mapowania właściwości na grupy identyfikatorów, metadanych i wartości. Domyślny maper używa adnotacji modelu lub definicji rekordu, aby określić typ każdej właściwości i wykonać to mapowanie.

  • Właściwość modelu danych oznaczona adnotacją jako klucz zostanie zamapowana na właściwość Pinecone id.
  • Właściwości modelu danych oznaczone jako dane zostaną zamapowane na obiekt metadanych Pinecone.
  • Właściwość modelu danych oznaczona adnotacją jako wektor zostanie zamapowana na właściwość wektora Pinecone.

Zastępowanie nazwy właściwości

W przypadku właściwości danych można podać nazwy pól przesłonięcia do użycia w magazynie, który różni się od nazw właściwości w modelu danych. Nie jest to obsługiwane w przypadku kluczy, ponieważ klucz ma stałą nazwę w Pinecone. Nie jest on również obsługiwany dla wektorów, ponieważ wektor jest przechowywany pod stałą nazwą values. Zastąpienie nazwy właściwości odbywa się przez ustawienie StoragePropertyName opcji za pomocą atrybutów modelu danych lub definicji rekordu.

Oto przykład modelu danych z StoragePropertyName ustawionym na jego atrybuty i sposób, w jaki będzie on reprezentowany w 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." }
}

Łącznik Pinecone nie jest jeszcze dostępny w języku Python.

Łącznik Pinecone nie jest jeszcze dostępny w języku Java.