Usando o conector Pinecone (versão prévia)
Aviso
A funcionalidade do Repositório de Vetores do Kernel Semântico está em versão prévia e as melhorias que exigem alterações significativas ainda podem ocorrer em circunstâncias limitadas antes do lançamento.
Visão geral
O conector do Repositório de Vetores da Pinha pode ser usado para acessar e gerenciar dados na Pinha. O conector tem as seguintes características.
Área de recurso | Suporte |
---|---|
A coleção é mapeada para | Índice sem servidor Pinecone |
Tipos de propriedade de chave com suporte | string |
Tipos de propriedade de dados com suporte |
|
Tipos de propriedade de vetor com suporte | Float ReadOnlyMemory<> |
Tipos de índice com suporte | PGA (Algoritmo de Gráfico de Pinha) |
Funções de distância suportadas |
|
Suporta vários vetores em um registro | Não |
IsFilterable suportado? | Sim |
IsFullTextSearchable suportado? | Não |
StoragePropertyName com suporte? | Sim |
Introdução
Adicione o pacote NuGet do conector do Repositório de Vetores de Pinha ao seu projeto.
dotnet add package Microsoft.SemanticKernel.Connectors.Pinecone --prerelease
Você pode adicionar o repositório de vetores ao contêiner de injeção de dependência disponível no KernelBuilder
ou ao IServiceCollection
contêiner de injeção de dependência usando métodos de extensão fornecidos pelo Semantic 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);
Métodos de extensão que não usam parâmetros também são fornecidos. Isso exige que uma instância do PineconeClient
seja registrada separadamente com o contêiner de injeção de dependência.
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();
Você pode construir uma instância do Repositório de Vetores de Pinha diretamente.
using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;
var vectorStore = new PineconeVectorStore(
new PineconeClient(pineconeApiKey));
É possível construir uma referência direta a uma coleção nomeada.
using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;
var collection = new PineconeVectorStoreRecordCollection<Hotel>(
new PineconeClient(pineconeApiKey),
"skhotels");
Namespace de índice
A abstração do Repositório de Vetores não oferece suporte a um mecanismo de agrupamento de registros de várias camadas. As coleções na abstração são mapeadas para um índice sem servidor Pinecone e não existe nenhum segundo nível na abstração. O Pinecone suporta um segundo nível de agrupamento chamado namespaces.
Por padrão, o conector Pinecone passará null como o namespace para todas as operações. No entanto, é possível passar um único namespace para a coleção Pinecone ao construí-la e usá-lo para todas as operações.
using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;
var collection = new PineconeVectorStoreRecordCollection<Hotel>(
new PineconeClient(pineconeApiKey),
"skhotels",
new() { IndexNamespace = "seasidehotels" });
Mapeamento de dados
O conector Pinecone fornece um mapeador padrão ao mapear dados do modelo de dados para armazenamento. O Pinecone requer que as propriedades sejam mapeadas em agrupamentos de id, metadados e valores. O mapeador padrão usa as anotações do modelo ou a definição de registro para determinar o tipo de cada propriedade e fazer esse mapeamento.
- A propriedade do modelo de dados anotada como uma chave será mapeada para a propriedade id do Pinecone.
- As propriedades do modelo de dados anotadas como dados serão mapeadas para o objeto de metadados Pinecone.
- A propriedade do modelo de dados anotada como um vetor será mapeada para a propriedade vetorial Pinecone.
Substituição do nome da propriedade
Para propriedades de dados, você pode fornecer nomes de campo de substituição a serem usados no armazenamento que sejam diferentes dos nomes de propriedade no modelo de dados. Isso não é suportado para chaves, pois uma chave tem um nome fixo no Pinecone.
Também não é suportado para vetores, uma vez que o vetor é armazenado sob um nome values
fixo .
A substituição do nome da propriedade é feita definindo a StoragePropertyName
opção por meio dos atributos do modelo de dados ou da definição de registro.
Aqui está um exemplo de um modelo de dados com StoragePropertyName
conjunto em seus atributos e como isso será representado no 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." }
}
O conector Pinecone ainda não está disponível em Python.
O conector Pinecone ainda não está disponível em Java.