Definiera din 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.
Alla metoder för att öka eller hämta poster använder starkt typerade modellklasser. Egenskaperna för dessa klasser är dekorerade med attribut som anger syftet med varje egenskap.
Dricks
Ett alternativ till att använda attribut finns i definiera schemat med en postdefinition.
Dricks
Ett alternativ till att definiera din egen datamodell finns i använda Vector Store-abstraktioner utan att definiera din egen datamodell.
Här är ett exempel på en modell som är dekorerad med dessa attribut.
using Microsoft.Extensions.VectorData;
public class Hotel
{
[VectorStoreRecordKey]
public ulong HotelId { get; set; }
[VectorStoreRecordData(IsFilterable = true)]
public string HotelName { get; set; }
[VectorStoreRecordData(IsFullTextSearchable = true)]
public string Description { get; set; }
[VectorStoreRecordVector(4, DistanceFunction.CosineDistance, IndexKind.Hnsw)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
[VectorStoreRecordData(IsFilterable = true)]
public string[] Tags { get; set; }
}
Attribut
VectorStoreRecordKeyAttribute
Använd det här attributet för att ange att din egenskap är nyckeln för posten.
[VectorStoreRecordKey]
public ulong HotelId { get; set; }
VectorStoreRecordKeyAttribute-parametrar
Parameter | Obligatoriskt | Beskrivning |
---|---|---|
StoragePropertyName | Nej | Kan användas för att ange ett alternativt namn för egenskapen i databasen. Observera att den här parametern inte stöds av alla anslutningsappar, t.ex. där alternativ som JsonPropertyNameAttribute stöds. |
Dricks
Mer information om vilka anslutningsappar som stöder StoragePropertyName och vilka alternativ som är tillgängliga finns i dokumentationen för varje anslutningsapp.
VectorStoreRecordDataAttribute
Använd det här attributet för att ange att egenskapen innehåller allmänna data som inte är en nyckel eller en vektor.
[VectorStoreRecordData(IsFilterable = true)]
public string HotelName { get; set; }
VectorStoreRecordDataAttribute-parametrar
Parameter | Obligatoriskt | Beskrivning |
---|---|---|
IsFilterable | Nej | Anger om egenskapen ska indexeras för filtrering i fall där en databas kräver att du väljer att indexera per egenskap. Standardvärdet är falskt. |
IsFullTextSearchable | Nej | Anger om egenskapen ska indexeras för fulltextsökning efter databaser som stöder fulltextsökning. Standardvärdet är falskt. |
StoragePropertyName | Nej | Kan användas för att ange ett alternativt namn för egenskapen i databasen. Observera att den här parametern inte stöds av alla anslutningsappar, t.ex. där alternativ som JsonPropertyNameAttribute stöds. |
Dricks
Mer information om vilka anslutningsappar som stöder StoragePropertyName och vilka alternativ som är tillgängliga finns i dokumentationen för varje anslutningsapp.
VectorStoreRecordVectorAttribute
Använd det här attributet för att ange att egenskapen innehåller en vektor.
[VectorStoreRecordVector(Dimensions: 4, DistanceFunction.CosineDistance, IndexKind.Hnsw)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
VectorStoreRecordVectorAttribute-parametrar
Parameter | Obligatoriskt | Beskrivning |
---|---|---|
Dimensioner | Ja för samlingsskapande, valfritt annars | Antalet dimensioner som vektorn har. Detta krävs vanligtvis när du skapar ett vektorindex för en samling. |
IndexKind | Nej | Vilken typ av index som vektorn ska indexeras med. Standard varierar beroende på typ av vektorlager. |
DistanceFunction | Nej | Den typ av avståndsfunktion som ska användas vid jämförelse av vektorer under vektorsökning över den här vektorn. Standard varierar beroende på typ av vektorlager. |
StoragePropertyName | Nej | Kan användas för att ange ett alternativt namn för egenskapen i databasen. Observera att den här parametern inte stöds av alla anslutningsappar, t.ex. där alternativ som JsonPropertyNameAttribute stöds. |
Vanliga indextyper och avståndsfunktionstyper anges som statiska värden för klasserna Microsoft.SemanticKernel.Data.IndexKind
och Microsoft.SemanticKernel.Data.DistanceFunction
.
Implementeringar av enskilda vektorlager kan också använda sina egna indextyper och avståndsfunktioner, där databasen stöder ovanliga typer.
Dricks
Mer information om vilka anslutningsappar som stöder StoragePropertyName och vilka alternativ som är tillgängliga finns i dokumentationen för varje anslutningsapp.
Alla metoder för att öka eller hämta poster använder en klass och en postdefinition för vektorlager.
Detta kan göras genom att definiera din egen klass med anteckningar för fälten, eller genom att använda en klass/typ i kombination med en postdefinition. Två saker måste göras för en klass, det första är att lägga till anteckningarna med fälttyperna, det andra är att dekorera klassen med dekoratören vectorstoremodel
.
Dricks
För den alternativa metoden med en postdefinition, se definiera schemat med en postdefinition.
Här är ett exempel på en modell som är dekorerad med dessa anteckningar.
from dataclasses import dataclass, field
from typing import Annotated
from semantic_kernel.data import (
DistanceFunction,
IndexKind,
VectorStoreRecordDataField,
VectorStoreRecordDefinition,
VectorStoreRecordKeyField,
VectorStoreRecordVectorField,
vectorstoremodel,
)
@vectorstoremodel
@dataclass
class Hotel:
hotel_id: Annotated[str, VectorStoreRecordKeyField()] = field(default_factory=lambda: str(uuid4()))
hotel_name: Annotated[str, VectorStoreRecordDataField(is_filterable=True)]
description: Annotated[str, VectorStoreRecordDataField(is_full_text_searchable=True)]
description_embedding: Annotated[list[float], VectorStoreRecordVectorField(dimensions=4, distance_function=DistanceFunction.COSINE, index_kind=IndexKind.HNSW)]
tags: Annotated[list[str], VectorStoreRecordDataField(is_filterable=True)]
Dricks
Du kan definiera en klass med dessa anteckningar på flera olika sätt, varav en använder modulen dataclasses
i Python, som visas här. Det här exemplet visar även andra metoder (med pydantiska BaseModels- och vanilj python-klasser).
Kommentarer
Det finns tre typer av anteckningar som ska användas och de har en gemensam basklass.
VectorStoreRecordField
Det här är basklassen för alla anteckningar, den är inte avsedd att användas direkt.
VectorStoreRecordField-parametrar
Parameter | Obligatoriskt | Beskrivning |
---|---|---|
name | Nej | Kan läggas till direkt men anges under parsningen av modellen. |
property_type | Nej | Ska vara en sträng, kommer också att härledas under parsning. |
Dricks
Anteckningarna parsas av dekoratören vectorstoremodel
och en av de saker den gör är att skapa en postdefinition för klassen. Därför är det inte nödvändigt att instansiera en fältklass när inga parametrar har angetts, fältet kan kommenteras med bara klassen, så här:
hotel_id: Annotated[str, VectorStoreRecordKeyField]
VectorStoreRecordKeyField
Använd den här kommentaren för att ange att det här attributet är nyckeln för posten.
VectorStoreRecordKeyField()
VectorStoreRecordKeyField-parametrar
Inga andra parametrar utanför basklassen definieras.
VectorStoreRecordDataField
Använd den här kommentaren för att ange att attributet innehåller allmänna data som inte är en nyckel eller en vektor.
VectorStoreRecordDataField(is_filterable=True)
VectorStoreRecordDataField-parametrar
Parameter | Obligatoriskt | Beskrivning |
---|---|---|
has_embedding | Nej | Anger om egenskapen har en associerad inbäddning, standardvärdet är Ingen. |
embedding_property_name | Nej | Namnet på egenskapen som innehåller inbäddningen, standardvärdet är Ingen. |
is_filterable | Nej | Anger om egenskapen ska indexeras för filtrering i fall där en databas kräver att du väljer att indexera per egenskap. Standardvärdet är falskt. |
is_full_text_searchable | Nej | Anger om egenskapen ska indexeras för fulltextsökning efter databaser som stöder fulltextsökning. Standardvärdet är falskt. |
VectorStoreRecordVectorField
Använd den här kommentaren för att ange att attributet innehåller en vektor.
VectorStoreRecordVectorField(dimensions=4, distance_function=DistanceFunction.COSINE, index_kind=IndexKind.HNSW)
VectorStoreRecordVectorField-parametrar
Parameter | Obligatoriskt | Beskrivning |
---|---|---|
dimensioner | Ja för samlingsskapande, valfritt annars | Antalet dimensioner som vektorn har. Detta krävs vanligtvis när du skapar ett vektorindex för en samling. |
index_kind | Nej | Vilken typ av index som vektorn ska indexeras med. Standard varierar beroende på typ av vektorlager. |
distance_function | Nej | Den typ av avståndsfunktion som ska användas vid jämförelse av vektorer under vektorsökning över den här vektorn. Standard varierar beroende på typ av vektorlager. |
local_embedding | Nej | Anger om egenskapen har en lokal inbäddning associerad med den, standardvärdet är Ingen. |
embedding_settings | Nej | Inställningarna för inbäddningen, i form av en diktat med service_id som nyckel och PromptExecutionSettings som värde, är standard ingen. |
serialize_function | Nej | Den funktion som ska användas för att serialisera vektorn, om typen inte är en lista[float | int] behövs den här funktionen eller om hela modellen måste serialiseras. |
deserialize_function | Nej | Funktionen som ska användas för att deserialisera vektorn, om typen inte är en lista[float | int] behövs den här funktionen, eller om hela modellen måste deserialiseras. |
Vanliga indextyper och avståndsfunktionstyper anges som statiska värden för klasserna semantic_kernel.data.IndexKind
och semantic_kernel.data.DistanceFunction
.
Implementeringar av enskilda vektorlager kan också använda sina egna indextyper och avståndsfunktioner, där databasen stöder ovanliga typer.
Alla metoder för att öka eller hämta poster använder starkt typerade modellklasser. Fälten i dessa klasser är dekorerade med anteckningar som anger syftet med varje fält.
Dricks
Ett alternativ till att använda attribut finns i definiera schemat med en postdefinition.
Här är ett exempel på en modell som är dekorerad med dessa anteckningar. Som standard använder de flesta färdiga vektorlager Jackson, vilket är en bra praxis för att säkerställa att modellobjektet kan serialiseras av Jackson, dvs klassen är synlig, har getters, konstruktor, anteckningar osv.
import com.microsoft.semantickernel.data.vectorstorage.annotations.VectorStoreRecordData;
import com.microsoft.semantickernel.data.vectorstorage.annotations.VectorStoreRecordKey;
import com.microsoft.semantickernel.data.vectorstorage.annotations.VectorStoreRecordVector;
import com.microsoft.semantickernel.data.vectorstorage.definition.DistanceFunction;
import com.microsoft.semantickernel.data.vectorstorage.definition.IndexKind;
import java.util.List;
public class Hotel {
@VectorStoreRecordKey
private String hotelId;
@VectorStoreRecordData(isFilterable = true)
private String name;
@VectorStoreRecordData(isFullTextSearchable = true)
private String description;
@VectorStoreRecordVector(dimensions = 4, indexKind = IndexKind.HNSW, distanceFunction = DistanceFunction.COSINE_DISTANCE)
private List<Float> descriptionEmbedding;
@VectorStoreRecordData(isFilterable = true)
private List<String> tags;
public Hotel() { }
public Hotel(String hotelId, String name, String description, List<Float> descriptionEmbedding, List<String> tags) {
this.hotelId = hotelId;
this.name = name;
this.description = description;
this.descriptionEmbedding = descriptionEmbedding;
this.tags = tags;
}
public String getHotelId() { return hotelId; }
public String getName() { return name; }
public String getDescription() { return description; }
public List<Float> getDescriptionEmbedding() { return descriptionEmbedding; }
public List<String> getTags() { return tags; }
}
Kommentarer
VectorStoreRecordKey
Använd den här kommentaren för att ange att fältet är nyckeln för posten.
@VectorStoreRecordKey
private String hotelId;
VectorStoreRecordKey-parametrar
Parameter | Obligatoriskt | Beskrivning |
---|---|---|
storageName | Nej | Kan användas för att ange ett alternativt namn för fältet i databasen. Observera att den här parametern inte stöds av alla anslutningsappar, t.ex. där Jackson används, i så fall kan lagringsnamnet anges med jacksonanteckningar. |
Dricks
Mer information om vilka anslutningsappar som stöder storageName och vilka alternativ som är tillgängliga finns i dokumentationen för varje anslutningsapp.
VectorStoreRecordData
Använd den här kommentaren för att ange att fältet innehåller allmänna data som inte är en nyckel eller en vektor.
@VectorStoreRecordData(isFilterable = true)
private String name;
VectorStoreRecordData-parametrar
Parameter | Obligatoriskt | Beskrivning |
---|---|---|
isFilterable | Nej | Anger om fältet ska indexeras för filtrering i fall där en databas kräver att du väljer att indexera per fält. Standardvärdet är falskt. |
isFullTextSearchable | Nej | Anger om fältet ska indexeras för fulltextsökning efter databaser som stöder fulltextsökning. Standardvärdet är falskt. |
storageName | Nej | Kan användas för att ange ett alternativt namn för fältet i databasen. Observera att den här parametern inte stöds av alla anslutningsappar, t.ex. där Jackson används, i så fall kan lagringsnamnet anges med jacksonanteckningar. |
Dricks
Mer information om vilka anslutningsappar som stöder storageName och vilka alternativ som är tillgängliga finns i dokumentationen för varje anslutningsapp.
VectorStoreRecordVector
Använd den här kommentaren för att ange att fältet innehåller en vektor.
@VectorStoreRecordVector(dimensions = 4, indexKind = IndexKind.HNSW, distanceFunction = DistanceFunction.COSINE_DISTANCE)
private List<Float> descriptionEmbedding;
VectorStoreRecordVector-parametrar
Parameter | Obligatoriskt | Beskrivning |
---|---|---|
dimensioner | Ja för samlingsskapande, valfritt annars | Antalet dimensioner som vektorn har. Detta krävs vanligtvis när du skapar ett vektorindex för en samling. |
indexKind | Nej | Vilken typ av index som vektorn ska indexeras med. Standard varierar beroende på typ av vektorlager. |
distanceFunction | Nej | Den typ av avståndsfunktion som ska användas vid jämförelse av vektorer under vektorsökning över den här vektorn. Standard varierar beroende på typ av vektorlager. |
storageName | Nej | Kan användas för att ange ett alternativt namn för fältet i databasen. Observera att den här parametern inte stöds av alla anslutningsappar, t.ex. där Jackson används, i så fall kan lagringsnamnet anges med jacksonanteckningar. |
Vanliga indextyper och avståndsfunktionstyper tillhandahålls på com.microsoft.semantickernel.data.vectorstorage.definition.IndexKind
uppräkningar och com.microsoft.semantickernel.data.vectorstorage.definition.DistanceFunction
.
Implementeringar av enskilda vektorlager kan också använda sina egna indextyper och avståndsfunktioner, där databasen stöder ovanliga typer.
Dricks
Mer information om vilka anslutningsappar som stöder storageName och vilka alternativ som är tillgängliga finns i dokumentationen för varje anslutningsapp.
Mer information kommer snart.