Anteckning
Å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
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 |
|
Egenskapstyper för vektorer som stöds | ReadOnlyMemory |
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 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 |
|
Egenskapstyper för vektorer som stöds |
|
Indextyper som stöds | PGA (Pinecone Graph Algorithm) |
Avståndsfunktioner som stöds |
|
Filtersatser som stöds |
|
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.