Использование соединителя в памяти (предварительная версия)
Предупреждение
Функции хранилища векторов семантического ядра доступны в предварительной версии и улучшения, требующие критических изменений, могут по-прежнему возникать в ограниченных обстоятельствах перед выпуском.
Обзор
Соединитель векторного хранилища в памяти — это реализация векторного хранилища, предоставляемая семантической ядром, которая не использует внешнюю базу данных и сохраняет данные в памяти. Это векторное хранилище полезно для сценариев прототипа или для выполнения высокоскоростных операций в памяти.
Соединитель имеет следующие характеристики.
Область функций | Поддержка |
---|---|
Коллекция сопоставляется с | Словарь в памяти |
Поддерживаемые типы свойств ключей | Любой тип, который можно сравнить |
Поддерживаемые типы свойств данных | Любой тип |
Поддерживаемые типы свойств вектора | ReadOnlyMemory<float> |
Поддерживаемые типы индексов | Плоский |
Поддерживаемые функции расстояния |
|
Поддерживаемые условия фильтра |
|
Поддержка нескольких векторов в записи | Да |
Поддерживается 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 |
Поддерживаемые типы индексов | Плоский |
Поддерживаемые функции расстояния |
|
Поддержка нескольких векторов в записи | Да |
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)
Скоро
Дополнительные сведения в ближайшее время.