Dela via


Äldre semantiska kernelminneslager

Dricks

Vi rekommenderar att du använder vektorlagringsabstraktioner i stället för äldre minneslager. Mer information om hur du använder Vector Store-abstraktioner finns här.

Semantisk kernel innehåller en uppsättning minneslagringsabstraktioner där det primära gränssnittet är Microsoft.SemanticKernel.Memory.IMemoryStore.

Abstraktioner för Minnesarkiv kontra vektorlager

Som en del av ett försök att utveckla och utöka vektorlagringen och sökutrymmena för semantisk kernel har vi släppt en ny uppsättning abstraktioner för att ersätta abstraktionerna i Minnesarkivet. Vi anropar abstraktionerna vector store abstraktioner. Syftet med båda är liknande, men deras gränssnitt skiljer sig åt och abstraktionerna i Vector Store ger utökade funktioner.

Characteristic Äldre minneslager Vektorlager
Huvudgränssnitt IMemoryStore IVectorStore
Nuget-paket för abstraktioner Microsoft.SemanticKernel.Abstractions Microsoft.Extensions.VectorData.Abstractions
Namnkonvention {Provider}MemoryStore, t.ex. RedisMemoryStore {Provider}VectorStore, t.ex. RedisVectorStore
Stöder postuppsert, hämta och ta bort Ja Ja
Stöder insamlingsskapande och borttagning Ja Ja
Stöder vektorsökning Ja Ja
Stöder val av önskat vektorsökindex och avståndsfunktion Nej Ja
Stöder flera vektorer per post Nej Ja
Stöder anpassade scheman Nej Ja
Stöder förfiltrering av metadata för vektorsökning Nej Ja
Stöder vektorsökning på icke-vektordatabaser genom att ladda ned hela datamängden till klienten och göra en lokal vektorsökning Ja Nej

Tillgängliga minneslagringsanslutningar

Semantisk kernel erbjuder flera minneslagringsanslutningar till vektordatabaser som du kan använda för att lagra och hämta information. Dessa kan vara:

Tjänst C# Python
Vector Database i Azure Cosmos DB för NoSQL C# Python
Vector Database i vCore-baserad Azure Cosmos DB för MongoDB C# Python
Azure AI-sökning C# Python
Azure PostgreSQL-server C#
Azure SQL Database C#
Chroma 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#
Viaviate C# Python

Migrera från minneslager till vektorlager

Om du vill migrera från att använda minneslagringsabstraktionerna till vektorarkivets abtraktioner finns det olika sätt på vilka du kan göra detta.

Använda den befintliga samlingen med abstraktionerna för Vector Store

Det enklaste sättet i många fall kan vara att bara använda Vector Store-abstraktionerna för att komma åt en samling som skapades med hjälp av abstraktionerna i Minnesarkivet. I många fall är detta möjligt eftersom abstraktionen för Vector Store låter dig välja det schema som du vill använda. Det viktigaste kravet är att skapa en datamodell som matchar schemat som den äldre Memory Store-implementeringen använde.

Om du t.ex. vill komma åt en samling som skapats av Azure AI Search Memory Store kan du använda följande Vector Store-datamodell.

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; }
}

Dricks

Mer detaljerade exempel på hur du använder vektorlagringsabstraktioner för att komma åt samlingar som skapats med hjälp av ett minnesarkiv finns här.

Skapa en ny samling

I vissa fall kan det vara bättre att migrera till en ny samling än att använda den befintliga samlingen direkt. Schemat som valdes av Minnesarkivet kanske inte matchar dina krav, särskilt när det gäller filtrering.

T.ex. Redis Memory Store använder ett schema med tre fält:

  • strängmetadata
  • lång tidsstämpel
  • float[] inbäddning

Alla data förutom inbäddning eller tidsstämpel lagras som en serialiserad json-sträng i fältet Metadata. Det innebär att det inte går att indexeras de enskilda värdena och filtreras på dem. Du kanske till exempel vill filtrera med hjälp av ExternalSourceName, men det är inte möjligt när det finns i en json-sträng.

I det här fallet kan det vara bättre att migrera data till en ny samling med ett platt schema. Det finns två alternativ här. Du kan skapa en ny samling från dina källdata eller bara mappa och kopiera data från det gamla till det nya. Det första alternativet kan vara dyrare eftersom du behöver återskapa inbäddningarna från källdata.

Dricks

Ett exempel med Redis som visar hur du kopierar data från en samling som skapats med hjälp av abstraktionerna i Minnesarkivet till en som skapats med hjälp av Vector Store-abstraktionerna finns här.