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