Dela via


Använda Pinecone-anslutningsappen (förhandsversion)

Varning

Funktionen Semantic Kernel Vector Store är i förhandsversion, och förbättringar som kräver icke-bakåtkompatibla ändringar kan fortfarande ske under begränsade omständigheter före lanseringen.

Översikt

Anslutningsprogrammet för Pinecone Vector Store kan användas för att komma åt och hantera data i Pinecone. Anslutningsappen har följande egenskaper.

Funktionsområde Stöd
Samlingskartor till Pinecone-serverlöst index
Nyckelegenskapstyper som stöds sträng
Dataegenskapstyper som stöds
  • sträng
  • int
  • lång
  • dubbel
  • flyttal
  • bool
  • decimal
  • uppräkningar av typsträng
Egenskapstyper för vektorer som stöds ReadOnlyMemory
Indextyper som stöds PGA (Pinecone Graph Algorithm)
Avståndsfunktioner som stöds
  • CosineSimilarity
  • DotProductSimilarity
  • Euklidiskt kvadrerat avstånd
Filtersatser som stöds
  • EqualTo
Stöder flera vektorer i en post Nej
Stöds IsFilterable? Ja
Stöds IsFullTextSearchable? Nej
Stöds StoragePropertyName? Ja
Stöds HybridSearch? Nej
Stöds integrerade inbäddningar? Nej

Komma igång

Lägg till NuGet-paketet för Pinecone Vector Store-anslutning i projektet.

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

Du kan lägga till vektorlagret i den beroendeinmatningscontainer som är tillgänglig i containern KernelBuilder eller till containern för IServiceCollection beroendeinmatning med hjälp av tilläggsmetoder som tillhandahålls av semantisk kernel.

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

Tilläggsmetoder som inte har några parametrar tillhandahålls också. Dessa kräver att en instans av PineconeClient registreras separat i beroendeinjektionscontainern.

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

Du kan skapa en Pinecone Vector Store-instans direkt.

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

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

Det går att skapa en direktreferens till en namngiven samling.

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

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

Indexnamnområde

Abstraktionen för Vector Store stöder inte en mekanism för gruppering av poster i flera nivåer. Samlingar i abstraktionskartan mappar till ett Pinecone-serverlöst index och det finns ingen andra nivå i abstraktionen. Pinecone stöder en andra nivå av gruppering som kallas namnrymder.

Som standard skickar Pinecone-anslutningsappen null som namnrymd för alla åtgärder. Det är dock möjligt att skicka ett enda namnområde till Pinecone-samlingen när du skapar den och använda den i stället för alla åtgärder.

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

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

Mappning av data

Pinecone-anslutningen tillhandahåller en standardmappare när data mappas från datamodellen till lagringen. Pinecone kräver att egenskaper mappas till id-, metadata- och värdegruppering. Standardmapparen använder modellanteckningarna eller postdefinitionen för att fastställa typen av varje egenskap och för att utföra den här mappningen.

  • Egenskapen i datamodellen som har annoterats som en nyckel kommer att mappas till egenskapen Pinecone-id.
  • Datamodellens egenskaper som är annoterade som data mappas till Pinecone-metadataobjektet.
  • Datamodellens egenskap som är markerad som en vektor mappas till Pinecone-vektoregenskapen.

Åsidosättning av egenskapsnamn

För dataegenskaper kan du ange åsidosättningsfältnamn som ska användas i lagring som skiljer sig från egenskapsnamnen i datamodellen. Detta stöds inte för nycklar eftersom en nyckel har ett fast namn i Pinecone. Det stöds inte heller för vektorer, eftersom vektorn lagras under ett fast namn values. Inställningen för att åsidosätta egenskapsnamnet görs genom att StoragePropertyName-alternativet anges via datamodellattributen eller postdefinitionen.

Här är ett exempel på en datamodell med StoragePropertyName angivna attribut och hur den representeras i 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.CosineSimilarity, 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." }
}

Översikt

Anslutningsprogrammet för Pinecone Vector Store kan användas för att komma åt och hantera data i Pinecone. Anslutningsappen har följande egenskaper.

Funktionsområde Stöd
Samlingskartor till Pinecone-serverlöst index
Nyckelegenskapstyper som stöds sträng
Dataegenskapstyper som stöds
  • sträng
  • heltal
  • lång
  • dubbel
  • flyttal
  • decimal
  • bool
  • Datum och tid
  • och iterbara objekt av var och en av dessa typer
Egenskapstyper för vektorer som stöds
  • list[float]
  • lista[int]
  • numpy-matris
Indextyper som stöds PGA (Pinecone Graph Algorithm)
Avståndsfunktioner som stöds
  • CosineSimilarity
  • DotProductSimilarity
  • Euklidiskt kvadrerat avstånd
Filtersatser som stöds
  • EqualTo
  • AnyTagEqualTo
Supporterar flera vektorer i en postering Nej
Stöds IsFilterable? Ja
Stöds IsFullTextSearchable? Nej
Stöds integrerade inbäddningar? Ja, se här
Stöds GRPC? Ja, se här

Komma igång

Lägg till anslutningen till Pinecone Vector Store i ditt projekt.

pip install semantic-kernel[pinecone]

Du kan sedan skapa en PineconeStore-instans och använda den för att skapa en samling. Då läses Pinecone API-nyckeln från miljövariabeln PINECONE_API_KEY.

from semantic_kernel.connectors.memory.pinecone import PineconeStore

store = PineconeStore()
collection = store.get_collection(collection_name="collection_name", data_model=DataModel)

Det går att skapa en direktreferens till en namngiven samling.

from semantic_kernel.connectors.memory.pinecone import PineconeCollection

collection = PineconeCollection(collection_name="collection_name", data_model=DataModel)

Du kan också skapa en egen Pinecone-klient och skicka den till konstruktorn. Klienten måste vara antingen PineconeAsyncio eller PineconeGRPC (se 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-stöd

Vi stöder också två alternativ för samlingskonstruktorn, den första är att aktivera GRPC-stöd:

from semantic_kernel.connectors.memory.pinecone import PineconeCollection

collection = PineconeCollection(collection_name="collection_name", data_model=DataModel, use_grpc=True)

Eller med din egen klient:

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)

Integrerade inbäddningar

Den andra är att använda integrerade inbäddningar av Pinecone, detta söker efter en miljövariabel som heter PINECONE_EMBED_MODEL med modellnamnet, eller så kan du skicka in en embed_settings diktat, som bara kan innehålla modellnyckeln eller de fullständiga inställningarna för inbäddningsmodellen. I det tidigare fallet härleds de andra inställningarna från datamodelldefinitionen.

Se Pinecone-dokument och sedan de Use integrated embeddings avsnitten.

from semantic_kernel.connectors.memory.pinecone import PineconeCollection

collection = PineconeCollection(collection_name="collection_name", data_model=DataModel)

Om du inte anger miljövariabeln kan du skicka inbäddningsinställningarna till konstruktorn:

from semantic_kernel.connectors.memory.pinecone import PineconeCollection

collection = PineconeCollection(collection_name="collection_name", data_model=DataModel, embed_settings={"model": "multilingual-e5-large"})

Detta kan innehålla annan information om vektorkonfigurationen, till exempel mått- och fältmappning. Du kan också skicka inbäddningsinställningarna till metoden create_collection. Detta åsidosätter standardinställningarna som angetts under initieringen.

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

Viktigt: GRPC och integrerade inbäddningar kan inte användas tillsammans.

Indexnamnområde

Abstraktionen för Vector Store stöder inte en mekanism för gruppering av poster i flera nivåer. Samlingar i abstraktionskartan mappar till ett Pinecone-serverlöst index och det finns ingen andranivå i abstraktionen. Pinecone stöder en andra nivå av gruppering som kallas namnrymder.

Som standardinställning skickar Pinecone-anslutningen '' som namespace för alla åtgärder. Det är dock möjligt att skicka ett enda namnområde till Pinecone-samlingen när du skapar den och använda den i stället för alla åtgärder.

from semantic_kernel.connectors.memory.pinecone import PineconeCollection

collection = PineconeCollection(
    collection_name="collection_name", 
    data_model=DataModel, 
    namespace="seasidehotels"
)

Pinecone-anslutningsappen är ännu inte tillgänglig i Java.