Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предупреждение
Функция векторного хранилища Pinecone находится в предварительной версии, и улучшения, требующие критических изменений, могут по-прежнему возникать в ограниченных обстоятельствах перед выпуском.
Предупреждение
Функции хранилища векторов семантического ядра доступны в предварительной версии, и улучшения, требующие кардинальных изменений, все еще могут возникнуть в отдельных случаях перед выпуском.
Предупреждение
Функции хранилища векторов семантического ядра доступны в предварительной версии, и улучшения, требующие кардинальных изменений, все еще могут возникнуть в отдельных случаях перед выпуском.
Обзор
Соединитель Pinecone Vector Store можно использовать для доступа к данным и управления ими в Pinecone. Соединитель имеет следующие характеристики.
Область функций | Поддержка |
---|---|
Коллекция сопоставляется с | Бессерверный индекс Pinecone |
Поддерживаемые типы свойств ключей | строка |
Поддерживаемые типы свойств данных |
|
Поддерживаемые типы свойств вектора |
|
Поддерживаемые типы индексов | PGA (Алгоритм Графа Снайконе) |
Поддерживаемые функции расстояния |
|
Поддерживаемые условия фильтрации |
|
Поддержка нескольких векторов в записи | Нет |
Поддерживается ли функция IsIndexed? | Да |
Поддерживается ли полнотекстовый индекс? | Нет |
Поддерживается StorageName? | Да |
Поддерживается гибридный поиск? | Нет |
Поддерживаемые интегрированные внедрения? | Нет |
Начало работы
Добавьте в проект пакет NuGet коннектора Pinecone Vector Store.
dotnet add package Microsoft.SemanticKernel.Connectors.Pinecone --prerelease
Хранилище векторов можно добавить либо в контейнер внедрения зависимостей, доступный на KernelBuilder
, либо в контейнер внедрения зависимостей IServiceCollection
, используя методы расширения, предоставляемые семантическим ядром.
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);
Методы расширения, которые не принимают параметров, также предоставляются. Для них требуется, чтобы 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.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();
Вы можете напрямую создать экземпляр векторного хранилища 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 PineconeCollection<string, Hotel>(
new PineconeClient(pineconeApiKey),
"skhotels");
Пространство имен индекса
Абстракция векторного хранилища не поддерживает многоуровневый механизм группировки записей. Коллекции в карте абстракции отображаются на бессерверный индекс Pinecone, и второго уровня в абстракции не существует. Pinecone поддерживает второй уровень группировки, называемый пространствами имен.
По умолчанию соединитель Pinecone будет передавать значение NULL в качестве пространства имен для всех операций. Однако при конструировании коллекции Pinecone можно передать единственное пространство имен и использовать его для всех операций.
using Microsoft.SemanticKernel.Connectors.Pinecone;
using PineconeClient = Pinecone.PineconeClient;
var collection = new PineconeCollection<string, Hotel>(
new PineconeClient(pineconeApiKey),
"skhotels",
new() { IndexNamespace = "seasidehotels" });
Сопоставление данных
Соединитель Pinecone предоставляет мэппер по умолчанию для сопоставления данных из модели данных в хранилище. Pinecone требует, чтобы свойства сопоставлялись с идентификаторами, метаданными и группами значений. Средство сопоставления по умолчанию использует аннотации модели или определение записи для определения типа каждого свойства и выполнения сопоставления.
- Свойство модели данных, помеченное как ключ, будет сопоставлено с свойством Идентификатора Pinecone.
- Свойства модели данных, аннотированные как данные будут сопоставлены с объектом метаданных Pinecone.
- Свойство модели данных, помеченное как вектор, будет сопоставлено со свойством вектора Pinecone.
Переопределение имени свойства
Для свойств данных можно указать заменяющие имена полей для использования в хранилище, отличающемся от имен свойств в модели данных. Это не поддерживается для ключей, так как ключ имеет фиксированное имя в Pinecone.
Он также не поддерживается для векторов, так как вектор хранится под фиксированным именем values
.
Переопределение имени свойства выполняется путем установки параметра StorageName
с помощью атрибутов модели данных или определения записи.
Приведен пример модели данных с установленными атрибутами StorageName
и как это будет представлено в 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." }
}
Обзор
Соединитель Pinecone Vector Store можно использовать для доступа к данным и управления ими в Pinecone. Соединитель имеет следующие характеристики.
Область функций | Поддержка |
---|---|
Коллекция сопоставляется с | Бессерверный индекс Pinecone |
Поддерживаемые типы свойств ключей | строка |
Поддерживаемые типы свойств данных |
|
Поддерживаемые типы свойств вектора |
|
Поддерживаемые типы индексов | PGA (Алгоритм Графа Снайконе) |
Поддерживаемые функции расстояния |
|
Поддерживаемые условия фильтрации |
|
Поддержка нескольких векторов в записи | Нет |
Поддерживается IsFilterable? | Да |
Поддерживается ЛиFullTextSearchable? | Нет |
Поддерживаемые интегрированные внедрения? | Да, смотрите здесь |
Поддерживается GRPC? | Да, смотрите здесь |
Начало работы
Добавьте в проект дополнительный коннектор Pinecone Vector Store.
pip install semantic-kernel[pinecone]
Затем можно создать экземпляр PineconeStore и использовать его для создания коллекции.
Это будет считывать ключ API Pinecone из переменной среды PINECONE_API_KEY
.
from semantic_kernel.connectors.pinecone import PineconeStore
store = PineconeStore()
collection = store.get_collection(collection_name="collection_name", record_type=DataModel)
Можно создать прямую ссылку на именованную коллекцию.
from semantic_kernel.connectors.pinecone import PineconeCollection
collection = PineconeCollection(collection_name="collection_name", record_type=DataModel)
Вы также можете создать собственный клиент Pinecone и передать его в конструктор.
Клиент должен быть PineconeAsyncio
или PineconeGRPC
(см. поддержку GRPC в разделе ).
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
Мы также поддерживаем два варианта конструктора коллекции, первое — включить поддержку GRPC:
from semantic_kernel.connectors.pinecone import PineconeCollection
collection = PineconeCollection(collection_name="collection_name", record_type=DataModel, use_grpc=True)
Или с собственным клиентом:
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)
Интегрированные внедрения
Во-вторых, следует использовать интегрированные вложения Pinecone, это проверяет переменную среды, которая называется PINECONE_EMBED_MODEL
с именем модели, или можно передать в embed_settings
словарь, который может содержать только ключ модели или полные параметры для модели вложения. В предыдущем случае другие параметры будут производными от определения модели данных.
Обратитесь к документации по Pinecone , а затем к разделам Use integrated embeddings
.
from semantic_kernel.connectors.pinecone import PineconeCollection
collection = PineconeCollection(collection_name="collection_name", record_type=DataModel)
Кроме того, если переменная среды не задана, можно передать параметры внедрения в конструктор:
from semantic_kernel.connectors.pinecone import PineconeCollection
collection = PineconeCollection(collection_name="collection_name", record_type=DataModel, embed_settings={"model": "multilingual-e5-large"})
Это может включать другие сведения о настройке векторов, таких как сопоставление метрик и полей.
Вы также можете передать настройки внедрения в метод ensure_collection_exists
, это переопределит настройки по умолчанию, установленные во время инициализации.
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"})
Важно: интеграции GRPC и внедренные в систему элементы нельзя использовать вместе.
Пространство имен индекса
Абстракция векторного хранилища не поддерживает многоуровневый механизм группировки записей. Коллекции в карте абстракции отображаются на бессерверный индекс Pinecone, и второго уровня в абстракции не существует. Pinecone поддерживает второй уровень группировки, называемый пространствами имен.
По умолчанию соединитель Pinecone передает ''
в качестве пространства имен для всех операций. Однако при конструировании коллекции Pinecone можно передать единственное пространство имен и использовать его для всех операций.
from semantic_kernel.connectors.pinecone import PineconeCollection
collection = PineconeCollection(
collection_name="collection_name",
record_type=DataModel,
namespace="seasidehotels"
)
Соединитель Pinecone еще недоступен в Java.