Verouderde Semantische kernelgeheugenarchieven
Tip
U wordt aangeraden de Vector Store-abstracties te gebruiken in plaats van de verouderde geheugenarchieven. Voor meer informatie over het gebruik van de Vector Store-abstracties begint u hier.
Semantische kernel biedt een set geheugenopslagabstracties waarbij de primaire interface zich bevindt Microsoft.SemanticKernel.Memory.IMemoryStore
.
Abstracties van Memory Store versus Vector Store
Als onderdeel van een poging om de vectoropslag en zoekcapaciteiten van Semantische kernel te ontwikkelen en uit te breiden, hebben we een nieuwe set abstracties uitgebracht om de abstracties van het geheugenarchief te vervangen. We noemen de vervangingsabstracties Vector Store-abstracties. Het doel van beide is vergelijkbaar, maar hun interfaces verschillen en de Vector Store-abstracties bieden uitgebreide functionaliteit.
Characteristic | Verouderde geheugenarchieven | Vectorarchieven |
---|---|---|
Hoofdinterface | IMemoryStore | IVectorStore |
Nuget-pakket abstracties | Microsoft.SemanticKernel.Abstractions | Microsoft.Extensions.VectorData.Abstractions |
Naamgevingsconventie | {Provider}MemoryStore, bijvoorbeeld RedisMemoryStore | {Provider}VectorStore, bijvoorbeeld RedisVectorStore |
Ondersteunt upsert van records, ophalen en verwijderen | Ja | Ja |
Biedt ondersteuning voor het maken en verwijderen van verzamelingen | Ja | Ja |
Ondersteunt vectorzoekopdrachten | Ja | Ja |
Ondersteunt het kiezen van de gewenste vectorzoekindex en afstandsfunctie | Nr. | Ja |
Ondersteunt meerdere vectoren per record | Nr. | Ja |
Ondersteunt aangepaste schema's | Nr. | Ja |
Ondersteunt het vooraf filteren van metagegevens voor vectorzoekopdrachten | Nr. | Ja |
Ondersteunt vectorzoekopdrachten op niet-vectordatabases door de volledige gegevensset naar de client te downloaden en een lokale vectorzoekopdracht uit te voeren | Ja | Nr. |
Beschikbare geheugenopslagconnectors
Semantische kernel biedt verschillende Memory Store-connectors voor vectordatabases die u kunt gebruiken om informatie op te slaan en op te halen. Deze omvatten:
Service | C# | Python |
---|---|---|
Vector Database in Azure Cosmos DB for NoSQL | C# | Python |
Vector Database in azure Cosmos DB voor MongoDB op basis van vCore | C# | Python |
Azure AI Search | 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# | |
Weaviaat | C# | Python |
Migreren van geheugenarchieven naar vectorarchieven
Als u wilt migreren van het gebruik van de abstracties van het geheugenarchief naar de Vector Store-abtractions, zijn er verschillende manieren waarop u dit kunt doen.
De bestaande verzameling gebruiken met de Vector Store-abstracties
De eenvoudigste manier in veel gevallen is om alleen de Vector Store-abstracties te gebruiken voor toegang tot een verzameling die is gemaakt met behulp van de abstracties van het geheugenarchief. In veel gevallen is dit mogelijk, omdat u met de Vector Store-abstractie het schema kunt kiezen dat u wilt gebruiken. De belangrijkste vereiste is om een gegevensmodel te maken dat overeenkomt met het schema dat wordt gebruikt door de verouderde memory store-implementatie.
Als u bijvoorbeeld toegang wilt krijgen tot een verzameling die is gemaakt door de Azure AI Search Memory Store, kunt u het volgende Vector Store-gegevensmodel gebruiken.
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; }
}
Een nieuwe verzameling maken
In sommige gevallen kan het migreren naar een nieuwe verzameling beter zijn dan het rechtstreeks gebruiken van de bestaande verzameling. Het schema dat door de Geheugenopslag is gekozen, komt mogelijk niet overeen met uw vereisten, met name met betrekking tot filteren.
De Redis Memory Store maakt bijvoorbeeld gebruik van een schema met drie velden:
- tekenreeksmetagegevens
- lange tijdstempel
- float[] insluiten
Alle andere gegevens dan het insluiten of tijdstempel worden opgeslagen als een geserialiseerde json-tekenreeks in het veld Metagegevens. Dit betekent dat het niet mogelijk is om de afzonderlijke waarden te indexeren en erop te filteren. U kunt bijvoorbeeld filteren met behulp van ExternalSourceName, maar dit is niet mogelijk terwijl deze zich in een json-tekenreeks bevindt.
In dit geval is het misschien beter om de gegevens te migreren naar een nieuwe verzameling met een plat schema. Er zijn hier twee opties. U kunt een nieuwe verzameling maken op basis van uw brongegevens of gewoon de gegevens van het oude naar het nieuwe toewijzen en kopiƫren. De eerste optie kan duurder zijn, omdat u de insluitingen opnieuw moet genereren op basis van de brongegevens.
Tip
Voor een voorbeeld van het gebruik van Redis waarin wordt getoond hoe u gegevens kopieert uit een verzameling die is gemaakt met behulp van de abstracties van het geheugenarchief naar een verzameling die is gemaakt met behulp van de Vector Store-abstracties, raadpleegt u hier.