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


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

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

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

Обзор

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

Соединитель имеет следующие характеристики.

Область функций Поддержка
Коллекция сопоставляется с Словарь в памяти
Поддерживаемые типы свойств ключей Любой тип, который можно сравнить
Поддерживаемые типы свойств данных Любой тип
Поддерживаемые типы свойств вектора ReadOnlyMemory<float>
Поддерживаемые типы индексов Плоский
Поддерживаемые функции расстояния
  • CosineSimilarity
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
Поддерживаемые условия фильтра
  • AnyTagEqualTo
  • EqualTo
Поддержка нескольких векторов в записи Да
Поддерживается IsFilterable? Да
Поддерживается ЛиFullTextSearchable? Да
Поддерживается StoragePropertyName? Нет, так как хранилище находится в памяти и повторное использование данных, поэтому невозможно, настраиваемое именование неприменимо.

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

Добавьте пакет nuget семантического ядра ядра в проект.

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

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

using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder()
    .AddInMemoryVectorStore();
using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddInMemoryVectorStore();

Экземпляр InMemory Vector Store можно создать напрямую.

using Microsoft.SemanticKernel.Connectors.InMemory;

var vectorStore = new InMemoryVectorStore();

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

using Microsoft.SemanticKernel.Connectors.InMemory;

var collection = new InMemoryVectorStoreRecordCollection<string, Hotel>("skhotels");

Поиск свойств ключа и вектора

По умолчанию соединитель In-Memory Vector Store считывает значения ключей и векторов с помощью отражения. Предполагается, что ключи и векторы являются прямыми свойствами модели данных.

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

При использовании этой функции также требуется предоставить VectorStoreRecordDefinition, чтобы сведения о размере векторного измерения и функции расстояния могли передаваться в хранилище векторов In-Memory.

var collection = new InMemoryVectorStoreRecordCollection<string, MyDataModel>(
    "mydata",
    new()
    {
        VectorStoreRecordDefinition = vectorStoreRecordDefinition,
        KeyResolver = (record) => record.Key,
        VectorResolver = (vectorName, record) => record.Vectors[vectorName]
    });

private class MyDataModel
{
    public string Key { get; set; }
    public Dictionary<string, ReadOnlyMemory<float>> Vectors { get; set; }
}

Обзор

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

Соединитель имеет следующие характеристики.

Область функций Поддержка
Коллекция сопоставляется с Словарь в памяти
Поддерживаемые типы свойств ключей Все, что разрешено быть ключом дикта, см. в документации по Python для получения подробных сведений здесь
Поддерживаемые типы свойств данных Любой тип
Поддерживаемые типы свойств вектора список[float | int] | массив numpy
Поддерживаемые типы индексов Плоский
Поддерживаемые функции расстояния
  • Сходство косинуса
  • Косинусное расстояние
  • Сходство продуктов dot
  • Евклидово расстояние
  • Евклидово расстояние в квадрате
  • Манхэттен расстояние
  • Расстояние Хэмминга
Поддержка нескольких векторов в записи Да
is_filterable поддерживается? Да
Поддерживается ли is_full_text_searchable? Да

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

Добавьте пакет семантического ядра в проект.

pip install semantic-kernel

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

В фрагментах ниже предполагается, что у вас есть класс модели данных, определенный с именем DataModel.

from semantic_kernel.connectors.memory.in_memory import InMemoryVectorStore

vector_store = InMemoryVectorStore()
vector_collection = vector_store.get_collection("collection_name", DataModel)

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

from semantic_kernel.connectors.memory.in_memory import InMemoryCollection

vector_collection = InMemoryCollection("collection_name", DataModel)

Скоро

Дополнительные сведения в ближайшее время.