Поделиться через


Использование соединителя Pinecone (предварительная версия)

Предупреждение

Функции хранилища векторов семантического ядра доступны в предварительной версии и улучшения, требующие критических изменений, могут по-прежнему возникать в ограниченных обстоятельствах перед выпуском.

Обзор

Соединитель Pinecone Vector Store можно использовать для доступа к данным и управления ими в Pinecone. Соединитель имеет следующие характеристики.

Область функций Поддержка
Коллекция сопоставляется с Бессерверный индекс Pinecone
Поддерживаемые типы свойств ключей строка
Поддерживаемые типы свойств данных
  • строка
  • INT
  • длинный
  • двойной точности
  • с плавающей запятой
  • bool
  • десятичное
  • Перечисление строк типа
Поддерживаемые типы свойств вектора ReadOnlyMemory<float>
Поддерживаемые типы индексов PGA (Алгоритм Графа Снайконе)
Поддерживаемые функции расстояния
  • CosineSimilarity
  • DotProductSimilarity
  • EuclideanDistance
Поддержка нескольких векторов в записи No
Поддерживается IsFilterable? Да
Поддерживается ЛиFullTextSearchable? No
Поддерживается StoragePropertyName? Да

Начало работы

Добавьте в проект пакет NuGet соединителя Pinecone Vector Store.

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

Хранилище векторов можно добавить в контейнер внедрения зависимостей, доступный в KernelBuilder контейнере внедрения зависимостей или в IServiceCollection контейнер внедрения зависимостей, используя методы расширения, предоставляемые семантического ядра.

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

Методы расширения, которые не принимают параметров, также предоставляются. Для них требуется, чтобы экземпляр отдельно PineconeClient регистрировался в контейнере внедрения зависимостей.

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

Экземпляр векторного хранилища Pinecone можно создать напрямую.

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

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

Можно создать прямую ссылку на именованную коллекцию.

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

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

Пространство имен индекса

Абстракция векторного хранилища не поддерживает многоуровневый механизм группировки записей. Коллекции в карте абстракции с бессерверным индексом Pinecone и во втором уровне не существуют в абстракции. Pinecone поддерживает второй уровень группирования имен, называемых пространствами имен.

По умолчанию соединитель Pinecone будет передавать значение NULL в качестве пространства имен для всех операций. Однако при создании коллекции Pinecone можно передать одно пространство имен и использовать его для всех операций.

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

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

Сопоставление данных

Соединитель Pinecone предоставляет схему по умолчанию при сопоставлении данных из модели данных в хранилище. Pinecone требует, чтобы свойства сопоставлялись с идентификаторами, метаданными и группами значений. Средство сопоставления по умолчанию использует заметки модели или определение записи для определения типа каждого свойства и для этого сопоставления.

  • Свойство модели данных, помеченное как ключ, будет сопоставлено с свойством Идентификатора Pinecone.
  • Свойства модели данных, аннотированные как данные будут сопоставлены с объектом метаданных Pinecone.
  • Свойство модели данных, помеченное как вектор, будет сопоставлено со свойством вектора Pinecone.

Переопределение имени свойства

Для свойств данных можно указать переопределение имен полей для использования в хранилище, которое отличается от имен свойств в модели данных. Это не поддерживается для ключей, так как ключ имеет фиксированное имя в Pinecone. Он также не поддерживается для векторов, так как вектор хранится под фиксированным именем values. Переопределение имени свойства выполняется путем задания StoragePropertyName параметра с помощью атрибутов модели данных или определения записи.

Ниже приведен пример модели данных с StoragePropertyName набором атрибутов и способом представления в 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." }
}

Соединитель Pinecone еще недоступен в Python.

Соединитель Pinecone еще недоступен в Java.