Устаревшие хранилища памяти семантического ядра
Совет
Рекомендуется использовать абстракции векторного хранилища вместо устаревших хранилищ памяти. Дополнительные сведения об использовании абстракций векторного хранилища см . здесь.
Семантический ядро предоставляет набор абстракций хранилища памяти, где основной интерфейс .Microsoft.SemanticKernel.Memory.IMemoryStore
Хранилище памяти и абстракции векторного хранилища
В рамках усилий по развитию и расширению векторного хранилища и поиска семантического ядра мы выпустили новый набор абстракций для замены абстракций хранилища памяти. Мы вызываем абстракции векторных абстракций замены. Цель обоих аналогичных, но их интерфейсы отличаются, а абстракции векторного хранилища предоставляют расширенные функциональные возможности.
Characteristic | Устаревшие хранилища памяти | Векторные хранилища |
---|---|---|
Основной интерфейс | IMemoryStore | IVectorStore |
Пакет nuget абстракций | Microsoft.SemanticKernel.Abstractions | Microsoft.Extensions.VectorData.Abstractions |
Соглашение об именовании | {Provider}MemoryStore, например RedisMemoryStore | {Provider}VectorStore, например RedisVectorStore |
Поддерживает upsert, get and delete | Да | Да |
Поддерживает создание и удаление коллекции | Да | Да |
Поддерживает векторный поиск | Да | Да |
Поддерживает выбор предпочтительного векторного индекса и функции расстояния | No | Да |
Поддерживает несколько векторов на запись | No | Да |
Поддерживает пользовательские схемы | No | Да |
Поддерживает предварительную фильтрацию метаданных для поиска векторов | No | Да |
Поддерживает векторный поиск в невекторных базах данных, скачивая весь набор данных на клиент и выполняя локальный векторный поиск | Да | Нет |
Доступные соединители хранилища памяти
Семантический ядро предлагает несколько соединителей хранилища памяти для векторных баз данных, которые можно использовать для хранения и извлечения информации. Например:
Service | 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# | |
Redis | C# | |
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, показывающий, как скопировать данные из коллекции, созданной с помощью абстракции хранилища памяти, в одну созданную с помощью абстракций векторного хранилища, см . здесь.