Compartir a través de


Uso del conector Pinecone (versión preliminar)

Advertencia

La funcionalidad Almacén de vectores de kernel semántico está en versión preliminar y las mejoras que requieren cambios importantes pueden producirse en circunstancias limitadas antes de la versión.

Información general

El conector pinecone Vector Store se puede usar para acceder a los datos y administrarlos en Pinecone. El conector tiene las siguientes características.

Área de características Soporte técnico
La colección se asigna a Índice sin servidor de Pinecone
Tipos de propiedades de clave admitidos string
Tipos de propiedad de datos admitidos
  • string
  • int
  • long
  • double
  • FLOAT
  • bool
  • decimal
  • enumerables de tipo string
Tipos de propiedades vectoriales admitidos ReadOnlyMemory<float>
Tipos de índice admitidos PGA (algoritmo de grafo pinecone)
Funciones de distancia admitidas
  • CosineSimilarity
  • DotProductSimilarity
  • EuclideanDistance
Admite varios vectores en un registro No
¿Se admite IsFilterable?
¿Se admite IsFullTextSearchable? No
¿Se admite StoragePropertyName?

Introducción

Agregue el paquete NuGet del conector Pinecone Vector Store al proyecto.

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

Puede agregar el almacén de vectores al contenedor de inserción de dependencias disponible en KernelBuilder o al IServiceCollection contenedor de inserción de dependencias mediante métodos de extensión proporcionados por kernel semántico.

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

También se proporcionan métodos de extensión que no toman parámetros. Estos requieren que se registre una instancia de para PineconeClient que se registre por separado con el contenedor de inserción de dependencias.

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

Puede construir una instancia de Pinecone Vector Store directamente.

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

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

Es posible construir una referencia directa a una colección con nombre.

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

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

Espacio de nombres de índice

La abstracción del almacén de vectores no admite un mecanismo de agrupación de registros de varios niveles. Las colecciones de la abstracción se asignan a un índice sin servidor de Pinecone y no existe ningún segundo nivel en la abstracción. Pinecone admite un segundo nivel de agrupación denominados espacios de nombres.

De forma predeterminada, el conector pinecone pasará null como espacio de nombres para todas las operaciones. Sin embargo, es posible pasar un solo espacio de nombres a la colección Pinecone al construirlo y usarlo en su lugar para todas las operaciones.

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

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

Asignación de datos

El conector Pinecone proporciona un asignador predeterminado al asignar datos del modelo de datos al almacenamiento. Pinecone requiere que las propiedades se asignen a identificadores, metadatos y agrupaciones de valores. El asignador predeterminado usa las anotaciones del modelo o la definición de registro para determinar el tipo de cada propiedad y para realizar esta asignación.

  • La propiedad del modelo de datos anotada como clave se asignará a la propiedad id de Pinecone.
  • Las propiedades del modelo de datos anotadas como datos se asignarán al objeto de metadatos de Pinecone.
  • La propiedad del modelo de datos anotada como vector se asignará a la propiedad de vector Pinecone.

Invalidación del nombre de propiedad

En el caso de las propiedades de datos, puede proporcionar nombres de campo de invalidación para usarlos en el almacenamiento que es diferente a los nombres de propiedad del modelo de datos. Esto no se admite para las claves, ya que una clave tiene un nombre fijo en Pinecone. Tampoco se admite para vectores, ya que el vector se almacena bajo un nombre valuesfijo . La invalidación del nombre de propiedad se realiza estableciendo la StoragePropertyName opción a través de los atributos del modelo de datos o la definición de registro.

Este es un ejemplo de un modelo de datos con StoragePropertyName establecido en sus atributos y cómo se representará en 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." }
}

El conector pinecone aún no está disponible en Python.

El conector Pinecone aún no está disponible en Java.