Устаревшие хранилища памяти семантического ядра
Совет
Рекомендуется использовать абстракции векторного хранилища вместо устаревших хранилищ памяти. Дополнительные сведения об использовании абстракций векторного хранилища см. здесь.
Семантическое ядро предоставляет набор абстракций хранилища памяти, где основной интерфейс — Microsoft.SemanticKernel.Memory.IMemoryStore
.
Абстракции хранилища памяти и векторного хранилища
В рамках усилий по развитию и расширению векторного хранилища и возможностей поиска семантического ядра мы выпустили новый набор абстракций для замены абстракции хранилища памяти. Мы называем абстракции замены абстракциями хранилища векторов. Цель обоих аналогичных, но их интерфейсы отличаются, а абстракции векторного хранилища предоставляют расширенные функциональные возможности.
Характеристика | Устаревшие хранилища памяти | Векторные хранилища |
---|---|---|
Основной интерфейс | IMemoryStore | IVectorStore |
Пакет nuget абстракций | Microsoft.SemanticKernel.Abstractions | Microsoft.Extensions.VectorData.Abstractions |
Соглашение об именовании | {Provider}MemoryStore, например RedisMemoryStore | {Provider}VectorStore, например RedisVectorStore |
Поддерживает добавление и обновление записей (upsert), получение и удаление данных | Да | Да |
Поддерживает создание и удаление коллекции | Да | Да |
Поддерживает векторный поиск | Да | Да |
Поддерживает выбор предпочтительного векторного индекса и функции расстояния | Нет | Да |
Поддерживает несколько векторов на запись | Нет | Да |
Поддерживает пользовательские схемы | Нет | Да |
Поддерживает несколько типов векторов | Нет | Да |
Поддерживает предварительную фильтрацию метаданных для поиска векторов | Нет | Да |
Поддерживает векторный поиск в невекторных базах данных, скачивая весь набор данных на клиент и выполняя локальный векторный поиск | Да | Нет |
Доступные соединители хранилища памяти
Семантическое ядро предлагает несколько коннекторов хранилищ памяти для баз данных, работающих с векторами, которые можно использовать для хранения и извлечения информации. Например:
Сервис | C# | Python |
---|---|---|
Векторная база данных в Azure Cosmos DB для NoSQL | C# | Python |
Векторная база данных на основе виртуальных ядер Azure Cosmos DB для MongoDB | C# | Python |
Поиск с использованием ИИ Azure | C# | Python |
Сервер Azure PostgreSQL | C# | |
База данных SQL Azure | C# | |
Цветность | C# | Python |
DuckDB | C# | |
Милвус | C# | Python |
Векторный поиск MongoDB Atlas | C# | Python |
Pinecone | C# | Python |
Postgres | C# | Python |
Qdrant | C# | Python |
Redis | C# | Python |
Sqlite | C# | |
Weaviate | C# | Python |
Перенос из хранилищ памяти в векторные хранилища
Если вы хотите перейти с использования абстракций хранилища памяти в абстракции векторного хранилища есть различные способы, с помощью которых это можно сделать.
Используйте существующую коллекцию с абстракциями векторного хранилища
Самый простой способ во многих случаях — просто использовать абстракции Vector Store для доступа к коллекции, созданной с помощью абстракций хранилища памяти. Во многих случаях это возможно, так как абстракция векторного хранилища позволяет выбрать схему, которую вы хотите использовать. Основное требование заключается в создании модели данных, которая соответствует схеме, используемой устаревшей реализацией Хранилища памяти.
Например, для доступа к коллекции, созданной Хранилищем памяти поиска ИИ Azure, можно использовать следующую модель данных векторного хранилища.
using Microsoft.Extensions.VectorData;
class VectorStoreRecord
{
[VectorStoreRecordKey]
public string Id { get; set; }
[VectorStoreRecordData]
public string Description { get; set; }
[VectorStoreRecordData]
public string Text { get; set; }
[VectorStoreRecordData]
public bool IsReference { get; set; }
[VectorStoreRecordData]
public string ExternalSourceName { get; set; }
[VectorStoreRecordData]
public string AdditionalMetadata { get; set; }
[VectorStoreRecordVector(VectorSize)]
public ReadOnlyMemory<float> Embedding { get; set; }
}
Совет
Более подробные примеры использования абстракций Vector Store для доступа к коллекциям, созданным с помощью хранилища памяти, см . здесь.
Создать коллекцию
В некоторых случаях миграция в новую коллекцию может быть предпочтительнее, чем использование существующей коллекции напрямую. Схема, выбранная хранилищем памяти, может не соответствовать вашим требованиям, особенно в отношении фильтрации.
Например, хранилище памяти Redis использует схему с тремя полями:
- строковые метаданные
- удлинённая временная метка
- float[] векторное представление
Все данные, отличные от внедренных или меток времени, хранятся в виде сериализованной строки JSON в поле метаданных. Это означает, что индексировать отдельные значения и фильтровать их нельзя. Например, может потребоваться фильтровать с помощью ExternalSourceName, но это невозможно, пока он находится внутри строки JSON.
В этом случае лучше перенести данные в новую коллекцию с плоской схемой. Здесь есть два варианта. Вы можете создать новую коллекцию из исходных данных или просто сопоставить и скопировать данные из старого в новое. Первый вариант может быть более дорогостоящим, так как вам потребуется повторно создать внедрение из исходных данных.
Совет
Пример использования Redis, показывающий, как скопировать данные из коллекции, созданной с помощью абстракции хранилища памяти, в одну созданную с помощью абстракций векторного хранилища, см . здесь.