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