Úložiště paměti starších sémantických jader

Návod

Místo starších úložišť paměti doporučujeme používat abstrakce vektorového úložiště. Další informace o tom, jak používat abstrakce vektorového úložiště, najdete zde.

Sémantické jádro poskytuje sadu abstrakcí pro úložiště paměti, kde je Microsoft.SemanticKernel.Memory.IMemoryStore primární rozhraní.

Abstrakce paměťového úložiště vs. vektorového úložiště

V rámci úsilí o rozvoj a rozšíření možností vektorového úložiště a vyhledávání sémantického jádra jsme vydali novou sadu abstrakcí, které nahradí abstrakce úložiště paměti. Nazýváme nahrazení abstrakce Vector Store abstrakce. Účel obou je podobný, ale jejich rozhraní se liší a abstrakce Vector Store poskytují rozšířené funkce.

Charakteristika Starší úložiště paměti Vektorová úložiště
Hlavní rozhraní IMemoryStore VectorStore
Balíček NuGet pro abstrakce Microsoft.SemanticKernel.Abstractions Microsoft.Extensions.VectorData.Abstractions
Konvence vytváření názvů {Provider}MemoryStore, např. RedisMemoryStore {Provider}VectorStore, např. RedisVectorStore
Podporuje přidání a aktualizaci, získání a odstranění záznamu. Ano Ano
Podporuje vytváření a odstraňování kolekcí. Ano Ano
Podporuje vektorové vyhledávání. Ano Ano
Podporuje volbu preferovaného indexu hledání vektorů a funkce vzdálenosti. Ne Ano
Podporuje více vektorů na záznam. Ne Ano
Podporuje vlastní schémata. Ne Ano
Podporuje více typů vektorů. Ne Ano
Podporuje předběžné filtrování metadat pro vektorové vyhledávání. Ne Ano
Podporuje vektorové vyhledávání ne vektorových databází stažením celé datové sady do klienta a provedením místního vektorového vyhledávání. Ano Ne

Dostupné konektory úložiště paměti

Sémantické jádro nabízí několik konektorů úložiště paměti pro vektorové databáze, které můžete použít k ukládání a načítání informací. Tady jsou některé z nich:

Služba C# Python
Vector Database ve službě Azure Cosmos DB for NoSQL C# Python
Vektorová databáze ve vCore-based Azure Cosmos DB pro MongoDB C# Python
Azure AI Vyhledávač C# Python
Azure PostgreSQL Server C#
Azure SQL Database C#
Sytost barvy C# Python
DuckDB C#
Milvus C# Python
MongoDB Atlas Vector Search C# Python
Borová šiška C# Python
Postgres C# Python
Qdrant C# Python
Redis C# Python
Sqlite C#
Weaviate C# Python

Migrace z paměťových úložišť do vektorových úložišť

Pokud chcete migrovat z abstrakcí úložiště paměti do abstrakcí vektorového úložiště, existují různé způsoby, jak to udělat.

Použijte existující kolekci s abstrakcemi vektorového úložiště

Nejjednodušším způsobem v mnoha případech může být pouze použití abstrakcí vektorového úložiště pro přístup k kolekci vytvořené pomocí abstrakcí úložiště paměti. V mnoha případech je to možné, protože abstrakce vektorového úložiště umožňuje zvolit schéma, které chcete použít. Hlavním požadavkem je vytvoření datového modelu, který odpovídá schématu použitému ve starší implementaci úložiště paměti.

Například pro přístup ke kolekci vytvořené úložištěm paměti Azure AI Search můžete použít následující datový model Vector Store.

using Microsoft.Extensions.VectorData;

class VectorStoreRecord
{
    [VectorStoreKey]
    public string Id { get; set; }

    [VectorStoreData]
    public string Description { get; set; }

    [VectorStoreData]
    public string Text { get; set; }

    [VectorStoreData]
    public bool IsReference { get; set; }

    [VectorStoreData]
    public string ExternalSourceName { get; set; }

    [VectorStoreData]
    public string AdditionalMetadata { get; set; }

    [VectorStoreVector(VectorSize)]
    public ReadOnlyMemory<float> Embedding { get; set; }
}

Návod

Podrobnější příklady použití abstrakcí vektorového úložiště pro přístup ke kolekcím vytvořeným pomocí úložiště paměti najdete tady.

Vytvořit novou kolekci

V některých případech může být výhodnější migrovat do nové sbírky, než používat stávající sbírku přímo. Schéma zvolené úložištěm paměti nemusí odpovídat vašim požadavkům, zejména pokud jde o filtrování.

Například úložiště paměti Redis používá schéma se třemi poli:

  • řetězcová metadata
  • dlouhé časové razítko
  • float[] zakotvení

Všechna data kromě vkládání nebo časového razítka jsou uložena jako serializovaný řetězec JSON v poli Metadata. To znamená, že není možné indexovat jednotlivé hodnoty a filtrovat je. Například možná budete chtít filtrovat pomocí ExternalSourceName, ale to není možné, když je uvnitř řetězce JSON.

V tomto případě může být lepší migrovat data do nové kolekce s plochým schématem. Tady jsou dvě možnosti. Můžete vytvořit novou kolekci ze zdrojových dat nebo jednoduše namapovat a zkopírovat data ze starého do nového. První možnost může být nákladnější, protože budete muset znovu vygenerovat vkládání ze zdrojových dat.

Návod

Příklad použití Redis ukazující, jak kopírovat data z kolekce vytvořené pomocí abstrakcí úložiště paměti do jednoho vytvořeného pomocí abstrakcí vektorového úložiště, viz zde.