Använda Vector Store-abstraktioner utan att definiera din egen datamodell (förhandsversion)
Varning
Funktionen Semantic Kernel Vector Store är i förhandsversion, och förbättringar som kräver icke-bakåtkompatibla ändringar kan fortfarande ske under begränsade omständigheter före lanseringen.
Översikt
Anslutningsappar för semantisk kernelvektorlagring använder en modell för att interagera med databaser. Detta gör det enkelt och enkelt att använda anslutningsapparna eftersom datamodellen återspeglar schemat för dina databasposter och om du vill lägga till ytterligare schemainformation som krävs kan du helt enkelt lägga till attribut till dina datamodellegenskaper.
Det finns dock fall där det inte är önskvärt eller möjligt att definiera din egen datamodell. Anta t.ex. att du inte vet vid kompileringstillfället hur databasschemat ser ut och att schemat endast tillhandahålls via konfigurationen. Det skulle vara omöjligt att skapa en datamodell som återspeglar schemat i det här fallet.
För att hantera det här scenariot tillhandahåller vi en allmän datamodell.
Allmän datamodell
Den generiska datamodellen är en klass med namnet VectorStoreGenericDataModel
och är tillgänglig i Microsoft.Extensions.VectorData.Abstractions
paketet.
För att stödja alla typer av databaser anges typen av VectorStoreGenericDataModel
nyckeln i den via en allmän parameter.
Alla andra egenskaper är indelade i Data
och Vector
egenskaper. Alla egenskaper som inte är en vektor eller en nyckel betraktas som en dataegenskap.
Data
och Vector
egenskapsuppsättningar lagras som strängnyckelordlistor för objekt.
Ange schemainformation när du använder den generiska datamodellen
När du använder den allmänna datamodellen behöver anslutningsappar fortfarande veta hur databasschemat ser ut. Utan schemainformationen skulle anslutningsappen inte kunna skapa en samling eller veta hur man mappar till och från lagringsrepresentationen som varje databas använder.
En postdefinition kan användas för att ange schemainformationen. Till skillnad från en datamodell kan en postdefinition skapas från konfigurationen vid körning, vilket ger en lösning för när schemainformationen inte är känd vid kompileringstiden.
Dricks
Information om hur du skapar en postdefinition finns i definiera schemat med en postdefinition.
Exempel
Om du vill använda den allmänna datamodellen med en anslutningsapp anger du den som datamodell när du skapar en samling och anger samtidigt en postdefinition.
// Create the definition to define the schema.
VectorStoreRecordDefinition vectorStoreRecordDefinition = new()
{
Properties = new List<VectorStoreRecordProperty>
{
new VectorStoreRecordKeyProperty("Key", typeof(string)),
new VectorStoreRecordDataProperty("Term", typeof(string)),
new VectorStoreRecordDataProperty("Definition", typeof(string)),
new VectorStoreRecordVectorProperty("DefinitionEmbedding", typeof(ReadOnlyMemory<float>)) { Dimensions = 1536 }
}
};
// When getting your collection instance from a vector store instance
// specify the generic data model, using the appropriate key type for your database
// and also pass your record definition.
var genericDataModelCollection = vectorStore.GetCollection<string, VectorStoreGenericDataModel<string>>(
"glossary",
vectorStoreRecordDefinition);
// Since we have schema information available from the record definition
// it's possible to create a collection with the right vectors, dimensions,
// indexes and distance functions.
await genericDataModelCollection.CreateCollectionIfNotExistsAsync();
// When retrieving a record from the collection, data and vectors can
// now be accessed via the Data and Vector dictionaries respectively.
var record = await genericDataModelCollection.GetAsync("SK");
Console.WriteLine(record.Data["Definition"])
När du skapar en samlingsinstans direkt skickas postdefinitionen som ett alternativ. Här är t.ex. ett exempel på hur du skapar en Azure AI Search-insamlingsinstans med den generiska datamodellen.
new AzureAISearchVectorStoreRecordCollection<VectorStoreGenericDataModel<string>>(
searchIndexClient,
"glossary",
new() { VectorStoreRecordDefinition = vectorStoreRecordDefinition });
Kommer snart
Mer information kommer snart.
Kommer snart
Mer information kommer snart.