Ú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.IMemoryStore
primá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.