Ä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.