Sdílet prostřednictvím


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

Tip

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ě, začínají zde.

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

Abstrakce úložiště paměti vs. vektorové úložiště

V rámci úsilí o rozvoj a rozšíření úložiště vektorů a hledání kapacit 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 IVectorStore
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 upsert záznamu, získání a odstranění. Ano Yes
Podporuje vytváření a odstraňování kolekcí. Ano Yes
Podporuje vektorové vyhledávání. Ano Yes
Podporuje volbu preferovaného indexu hledání vektorů a funkce vzdálenosti. No Ano
Podporuje více vektorů na záznam. No Ano
Podporuje vlastní schémata. No Ano
Podporuje předběžné filtrování metadat pro vektorové vyhledávání. No 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í. Yes No

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
Vector Database ve službě Azure Cosmos DB pro MongoDB založené na virtuálních jádrech 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
Pinecone C# Python
Postgres C# Python
Qdrant C#
Redis C#
Sqlite C#
Weaviate C# Python

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

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

Použití existující kolekce s abstrakcí 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
{
    [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; }
}

Tip

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ýchpřípadechch 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:

  • metadata řetězců
  • dlouhé časové razítko
  • float[] embedding

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.

Tip

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.