定義您的資料模型 (預覽)
警告
語意核心向量存放區功能處於預覽狀態,且需要重大變更的改善可能仍會在發行前有限的情況下發生。
概觀
語意核心向量存放區連接器會使用模型第一種方法來與資料庫互動。
更新插入或取得記錄的所有方法都會使用強型別模型類別。 這些類別上的屬性會以指出每個屬性用途的屬性裝飾。
提示
如需使用屬性的替代方案,請參閱 使用記錄定義來定義架構。
提示
如需定義您自己的數據模型的替代方案,請參閱 使用向量存放區抽象概念,而不定義您自己的數據模型。
以下是以這些屬性裝飾的模型範例。
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; }
}
屬性
VectorStoreRecordKeyAttribute
使用這個屬性來指出您的屬性是記錄的索引鍵。
[VectorStoreRecordKey]
public ulong HotelId { get; set; }
VectorStoreRecordKeyAttribute 參數
參數 | 必要 | 描述 |
---|---|---|
StoragePropertyName | No | 可用來提供資料庫中屬性的替代名稱。 請注意,所有連接器都不支援此參數,例如支援的替代 JsonPropertyNameAttribute 專案。 |
提示
如需哪些連接器支援 StoragePropertyName 以及有哪些替代方案的詳細資訊,請參閱 每個連接器的檔。
VectorStoreRecordDataAttribute
使用這個屬性表示您的屬性包含不是索引鍵或向量的一般數據。
[VectorStoreRecordData(IsFilterable = true)]
public string HotelName { get; set; }
VectorStoreRecordDataAttribute 參數
參數 | 必要 | 描述 |
---|---|---|
IsFilterable | No | 指出當資料庫需要加入每個屬性的索引編製索引時,是否應該為屬性編製索引以進行篩選。 預設為 False。 |
IsFullTextSearchable | No | 指出是否應該針對支援全文搜索的資料庫,為全文搜索編製屬性的索引。 預設為 False。 |
StoragePropertyName | No | 可用來提供資料庫中屬性的替代名稱。 請注意,所有連接器都不支援此參數,例如支援的替代 JsonPropertyNameAttribute 專案。 |
提示
如需哪些連接器支援 StoragePropertyName 以及有哪些替代方案的詳細資訊,請參閱 每個連接器的檔。
VectorStoreRecordVectorAttribute
使用這個屬性表示您的屬性包含向量。
[VectorStoreRecordVector(Dimensions: 4, DistanceFunction.CosineDistance, IndexKind.Hnsw)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
VectorStoreRecordVectorAttribute 參數
參數 | 必要 | 描述 |
---|---|---|
維度 | [是] 用於集合建立,否則為選擇性 | 向量擁有的維度數目。 建立集合的向量索引時,通常需要這樣做。 |
IndexKind | No | 要用來為向量編製索引的索引型別。 預設值會依向量存放區類型而有所不同。 |
DistanceFunction | No | 在此向量搜尋期間執行向量比較時所要使用的距離函式類型。 預設值會依向量存放區類型而有所不同。 |
StoragePropertyName | No | 可用來提供資料庫中屬性的替代名稱。 請注意,所有連接器都不支援此參數,例如支援的替代 JsonPropertyNameAttribute 專案。 |
常見的索引種類和距離函式類型會以 和 Microsoft.SemanticKernel.Data.DistanceFunction
類別上的Microsoft.SemanticKernel.Data.IndexKind
靜態值的形式提供。
個別向量存放區實作也可以使用自己的索引類型和距離函式,其中資料庫支援不尋常的類型。
提示
如需哪些連接器支援 StoragePropertyName 以及有哪些替代方案的詳細資訊,請參閱 每個連接器的檔。
所有更新插入或取得記錄的方法都會使用 類別和向量存放區記錄定義。
這可以藉由使用欄位的註釋來定義您自己的類別,或使用類別/型別搭配記錄定義來完成。 類別需要做兩件事,第一件事是新增具有字段類型的批註,第二件事是使用 vectorstoremodel
裝飾項目來裝飾類別。
提示
如需使用記錄定義的替代方法,請參閱 使用記錄定義來定義架構。
以下是使用這些批注裝飾的模型範例。
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)]
提示
您可以透過多種方式定義具有這些註釋的類別,其中一種是在 dataclasses
Python 中使用模組,如下所示。 此 範例 也會示範其他方法(使用 Pydantic BaseModels 和 vanilla Python 類別)。
註釋
有三種類型的註釋可供使用,而且具有通用基類。
VectorStoreRecordField
這是所有批注的基類,不打算直接使用。
VectorStoreRecordField 參數
參數 | 必要 | 描述 |
---|---|---|
NAME | No | 可以直接新增,但將在模型剖析期間設定。 |
property_type | No | 應該是字串,也會在剖析期間衍生。 |
提示
批註是由 vectorstoremodel
裝飾專案剖析,而其所做的其中一件事是建立類別的記錄定義,因此不需要在未設定任何參數時具現化欄位類別,字段只能以 類別加上批注,如下所示:
hotel_id: Annotated[str, VectorStoreRecordKeyField]
VectorStoreRecordKeyField
使用此批注來指出此屬性是記錄的索引鍵。
VectorStoreRecordKeyField()
VectorStoreRecordKeyField 參數
不會定義基類以外的其他參數。
VectorStoreRecordDataField
使用此批注來指出您的屬性包含不是索引鍵或向量的一般數據。
VectorStoreRecordDataField(is_filterable=True)
VectorStoreRecordDataField 參數
參數 | 必要 | 描述 |
---|---|---|
has_embedding | No | 指出屬性是否有與其相關聯的內嵌,預設值為 None。 |
embedding_property_name | No | 包含內嵌的屬性名稱,預設值為 None。 |
is_filterable | No | 指出當資料庫需要加入每個屬性的索引編製索引時,是否應該為屬性編製索引以進行篩選。 預設為 False。 |
is_full_text_searchable | No | 指出是否應該針對支援全文搜索的資料庫,為全文搜索編製屬性的索引。 預設為 False。 |
VectorStoreRecordVectorField
使用此批注來指出您的屬性包含向量。
VectorStoreRecordVectorField(dimensions=4, distance_function=DistanceFunction.COSINE, index_kind=IndexKind.HNSW)
VectorStoreRecordVectorField 參數
參數 | 必要 | 描述 |
---|---|---|
尺寸 | [是] 用於集合建立,否則為選擇性 | 向量擁有的維度數目。 建立集合的向量索引時,通常需要這樣做。 |
index_kind | No | 要用來為向量編製索引的索引型別。 預設值會依向量存放區類型而有所不同。 |
distance_function | No | 在此向量搜尋期間執行向量比較時所要使用的距離函式類型。 預設值會依向量存放區類型而有所不同。 |
local_embedding | No | 指出屬性是否有與其相關聯的本機內嵌,預設值為 None。 |
embedding_settings | No | 內嵌的設定,格式為 service_id 做為索引鍵,PromptExecutionSettings 做為值,預設值為 None。 |
serialize_function | No | 如果要用來串行化向量的函式,如果類型不是 list[float | int],則需要此函式,或需要串行化整個模型。 |
deserialize_function | No | 如果要用來還原串行化向量的函式,如果類型不是 list[float | int],則需要此函式,或需要還原串行化整個模型。 |
常見的索引種類和距離函式類型會以 和 semantic_kernel.data.DistanceFunction
類別上的semantic_kernel.data.IndexKind
靜態值的形式提供。
個別向量存放區實作也可以使用自己的索引類型和距離函式,其中資料庫支援不尋常的類型。
更新插入或取得記錄的所有方法都會使用強型別模型類別。 這些類別上的欄位會以批註裝飾,指出每個欄位的用途。
提示
如需使用屬性的替代方案,請參閱 使用記錄定義來定義架構。
以下是使用這些批注裝飾的模型範例。 根據預設,大部分現成的向量存放區都使用 Jackson,因此是確保傑克遜可以串行化的模型物件的良好作法,亦即類別是可見的、具有 getter、建構函式、註釋等。
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; }
}
註釋
VectorStoreRecordKey
使用此批注來指出您的欄位是記錄的索引鍵。
@VectorStoreRecordKey
private String hotelId;
VectorStoreRecordKey 參數
參數 | 必要 | 描述 |
---|---|---|
storageName | No | 可用來提供資料庫中欄位的替代名稱。 請注意,所有連接器都不支援此參數,例如使用 Jackson 的位置,在此情況下,可以使用 Jackson 註釋來指定儲存名稱。 |
提示
如需哪些連接器支援 storageName 和哪些替代專案的詳細資訊,請參閱 每個連接器的檔。
VectorStoreRecordData
使用此批注來指出您的字段包含不是索引鍵或向量的一般數據。
@VectorStoreRecordData(isFilterable = true)
private String name;
VectorStoreRecordData 參數
參數 | 必要 | 描述 |
---|---|---|
isFilterable | No | 指出當資料庫需要加入每個欄位的索引編製索引時,是否應該為欄位編製索引以進行篩選。 預設為 False。 |
isFullTextSearchable | No | 指出是否應該為支援全文搜索的資料庫編製全文搜索索引欄位。 預設為 False。 |
storageName | No | 可用來提供資料庫中欄位的替代名稱。 請注意,所有連接器都不支援此參數,例如使用 Jackson 的位置,在此情況下,可以使用 Jackson 註釋來指定儲存名稱。 |
提示
如需哪些連接器支援 storageName 和哪些替代專案的詳細資訊,請參閱 每個連接器的檔。
VectorStoreRecordVector
使用此批注來指出您的欄位包含向量。
@VectorStoreRecordVector(dimensions = 4, indexKind = IndexKind.HNSW, distanceFunction = DistanceFunction.COSINE_DISTANCE)
private List<Float> descriptionEmbedding;
VectorStoreRecordVector 參數
參數 | 必要 | 描述 |
---|---|---|
尺寸 | [是] 用於集合建立,否則為選擇性 | 向量擁有的維度數目。 建立集合的向量索引時,通常需要這樣做。 |
indexKind | No | 要用來為向量編製索引的索引型別。 預設值會依向量存放區類型而有所不同。 |
distanceFunction | No | 在此向量搜尋期間執行向量比較時所要使用的距離函式類型。 預設值會依向量存放區類型而有所不同。 |
storageName | No | 可用來提供資料庫中欄位的替代名稱。 請注意,所有連接器都不支援此參數,例如使用 Jackson 的位置,在此情況下,可以使用 Jackson 註釋來指定儲存名稱。 |
在和 com.microsoft.semantickernel.data.vectorstorage.definition.DistanceFunction
列舉上com.microsoft.semantickernel.data.vectorstorage.definition.IndexKind
會提供常見的索引種類和距離函式類型。
個別向量存放區實作也可以使用自己的索引類型和距離函式,其中資料庫支援不尋常的類型。
提示
如需哪些連接器支援 storageName 和哪些替代專案的詳細資訊,請參閱 每個連接器的檔。
更多信息即將推出。