Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Varning
Funktionerna i Pinecone 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 innan de släpps.
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.
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 |
|---|---|
| Samlingar som matchar med | Pinecone-serverlöst index |
| Nyckelegenskapstyper som stöds | sträng |
| Dataegenskapstyper som stöds |
|
| Egenskapstyper för vektorer som stöds |
|
| Indextyper som stöds | PGA (Pinecone Graph Algorithm) |
| Avståndsfunktioner som stöds |
|
| Filtersatser som stöds |
|
| Stöder flera vektorer i en post | Nej |
| Stöds IsIndexed-funktionen? | Ja |
| Stöds fulltextindexerad? | Nej |
| Stöds StorageName? | 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.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using Kernel Builder.
var kernelBuilder = Kernel
.CreateBuilder();
kernelBuilder.Services
.AddPineconeVectorStore(pineconeApiKey);
using Microsoft.Extensions.DependencyInjection;
// 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.Services.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 PineconeCollection<string, 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 standardinställning överför Pinecone-anslutningsappen null 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.
using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;
var collection = new PineconeCollection<string, 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 StorageName-alternativet anges via datamodellattributen eller postdefinitionen.
Här är ett exempel på en datamodell med StorageName angivna attribut och hur den representeras i Pinecone.
using Microsoft.Extensions.VectorData;
public class Hotel
{
[VectorStoreKey]
public string HotelId { get; set; }
[VectorStoreData(IsIndexed = true, StorageName = "hotel_name")]
public string HotelName { get; set; }
[VectorStoreData(IsFullTextIndexed = true, StorageName = "hotel_description")]
public string Description { get; set; }
[VectorStoreVector(Dimensions: 4, DistanceFunction = DistanceFunction.CosineSimilarity, IndexKind = 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 |
|---|---|
| Samlingar som matchar med | Pinecone-serverlöst index |
| Nyckelegenskapstyper som stöds | sträng |
| Dataegenskapstyper som stöds |
|
| Egenskapstyper för vektorer som stöds |
|
| Indextyper som stöds | PGA (Pinecone Graph Algorithm) |
| Avståndsfunktioner som stöds |
|
| Filtersatser som stöds |
|
| Stöder flera vektorer i en post | 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.pinecone import PineconeStore
store = PineconeStore()
collection = store.get_collection(collection_name="collection_name", record_type=DataModel)
Det går att skapa en direktreferens till en namngiven samling.
from semantic_kernel.connectors.pinecone import PineconeCollection
collection = PineconeCollection(collection_name="collection_name", record_type=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.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", record_type=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.pinecone import PineconeCollection
collection = PineconeCollection(collection_name="collection_name", record_type=DataModel, use_grpc=True)
Eller med din egen klient:
from semantic_kernel.connectors.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", record_type=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.pinecone import PineconeCollection
collection = PineconeCollection(collection_name="collection_name", record_type=DataModel)
Om du inte anger miljövariabeln kan du skicka inbäddningsinställningarna till konstruktorn:
from semantic_kernel.connectors.pinecone import PineconeCollection
collection = PineconeCollection(collection_name="collection_name", record_type=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 ensure_collection_exists. Detta åsidosätter standardinställningarna som angetts under initieringen.
from semantic_kernel.connectors.pinecone import PineconeCollection
collection = PineconeCollection(collection_name="collection_name", record_type=DataModel)
await collection.ensure_collection_exists(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 andra nivå 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.pinecone import PineconeCollection
collection = PineconeCollection(
collection_name="collection_name",
record_type=DataModel,
namespace="seasidehotels"
)
Pinecone-anslutningsappen är ännu inte tillgänglig i Java.