Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Peringatan
Fungsionalitas Penyimpanan Vektor Kernel Semantik sedang dalam pratinjau, dan peningkatan yang memerlukan perubahan yang melanggar mungkin masih terjadi dalam keadaan terbatas sebelum rilis.
Peringatan
Fungsionalitas Penyimpanan Vektor Kernel Semantik sedang dalam pratinjau, dan peningkatan yang memerlukan perubahan yang melanggar mungkin masih terjadi dalam keadaan terbatas sebelum rilis.
Gambaran Umum
Konektor Semantic Kernel Vector Store menggunakan pendekatan pertama model untuk berinteraksi dengan database.
Semua metode untuk melakukan upsert atau mendapatkan rekaman menggunakan kelas model yang ditik dengan kuat. Properti pada kelas ini dihiasi dengan atribut yang menunjukkan tujuan setiap properti.
Petunjuk / Saran
Untuk alternatif menggunakan atribut, lihat menentukan skema Anda dengan definisi rekaman.
Petunjuk / Saran
Sebagai alternatif untuk menentukan model data Anda sendiri, lihat menggunakan abstraksi Vector Store tanpa menentukan model data Anda sendiri.
Berikut adalah contoh model yang dihiasi dengan atribut ini.
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; }
}
Atribut
VectorStoreKeyAttribute
Gunakan atribut ini untuk menunjukkan bahwa properti Anda adalah kunci rekaman.
[VectorStoreKey]
public ulong HotelId { get; set; }
Parameter VectorStoreKeyAttribute
| Pengaturan | Wajib | Deskripsi |
|---|---|---|
| NamaPenyimpanan | Tidak. | Dapat digunakan untuk memberikan nama alternatif untuk properti dalam database. Perhatikan bahwa parameter ini tidak didukung oleh semua konektor, misalnya di mana alternatif seperti JsonPropertyNameAttribute didukung. |
Petunjuk / Saran
Untuk informasi selengkapnya tentang dukungan StorageName konektor dan alternatif apa yang tersedia, lihat dokumentasi untuk setiap konektor.
VectorStoreDataAttribute
Gunakan atribut ini untuk menunjukkan bahwa properti Anda berisi data umum yang bukan kunci atau vektor.
[VectorStoreData(IsIndexed = true)]
public string HotelName { get; set; }
Parameter VectorStoreDataAttribute
| Pengaturan | Wajib | Deskripsi |
|---|---|---|
| IsIndexed | Tidak. | Menunjukkan apakah properti harus diindeks untuk pemfilteran jika database mengharuskan memilih untuk mengindeks per properti. Defaultnya adalah false. |
| IsFullTextIndexed | Tidak. | Menunjukkan apakah properti harus diindeks untuk pencarian teks lengkap untuk database yang mendukung pencarian teks lengkap. Defaultnya adalah false. |
| NamaPenyimpanan | Tidak. | Dapat digunakan untuk memberikan nama alternatif untuk properti dalam database. Perhatikan bahwa parameter ini tidak didukung oleh semua konektor, misalnya di mana alternatif seperti JsonPropertyNameAttribute didukung. |
Petunjuk / Saran
Untuk informasi selengkapnya tentang dukungan StorageName konektor dan alternatif apa yang tersedia, lihat dokumentasi untuk setiap konektor.
VectorStoreVectorAttribute
Gunakan atribut ini untuk menunjukkan bahwa properti Anda berisi vektor.
[VectorStoreVector(Dimensions: 4, DistanceFunction = DistanceFunction.CosineSimilarity, IndexKind = IndexKind.Hnsw)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
Dimungkinkan juga untuk menggunakan VectorStoreVectorAttribute pada properti yang tidak memiliki jenis vektor, misalnya properti jenis string.
Ketika properti didekorasi dengan cara ini, Microsoft.Exntesions.AI.IEmbeddingGenerator instans perlu diberikan ke penyimpanan vektor.
Saat meningkatkan rekaman, teks yang ada di string properti akan secara otomatis diubah menjadi vektor dan disimpan sebagai vektor dalam database.
Tidak dimungkinkan untuk mengambil vektor menggunakan mekanisme ini.
[VectorStoreVector(Dimensions: 4, DistanceFunction = DistanceFunction.CosineSimilarity, IndexKind = IndexKind.Hnsw)]
public string DescriptionEmbedding { get; set; }
Petunjuk / Saran
Untuk informasi selengkapnya tentang cara menggunakan pembuatan penyematan bawaan, lihat Membiarkan Penyimpanan Vektor menghasilkan penyematan.
Parameter VectorStoreVectorAttribute
| Pengaturan | Wajib | Deskripsi |
|---|---|---|
| Dimensi | Ya | Jumlah dimensi yang dimiliki vektor. Ini diperlukan saat membuat indeks vektor untuk koleksi. |
| IndexKind | Tidak. | Jenis indeks untuk mengindeks vektor dengan. Default bervariasi menurut jenis penyimpanan vektor. |
| DistanceFunction | Tidak. | Jenis fungsi yang digunakan saat melakukan perbandingan vektor selama pencarian vektor melalui vektor ini. Default bervariasi menurut jenis penyimpanan vektor. |
| NamaPenyimpanan | Tidak. | Dapat digunakan untuk memberikan nama alternatif untuk properti dalam database. Perhatikan bahwa parameter ini tidak didukung oleh semua konektor, misalnya di mana alternatif seperti JsonPropertyNameAttribute didukung. |
Jenis indeks umum dan jenis fungsi jarak disediakan sebagai nilai statis pada Microsoft.SemanticKernel.Data.IndexKind kelas dan Microsoft.SemanticKernel.Data.DistanceFunction .
Implementasi Penyimpanan Vektor individu juga dapat menggunakan jenis indeks dan fungsi jarak mereka sendiri, di mana database mendukung jenis yang tidak biasa.
Petunjuk / Saran
Untuk informasi selengkapnya tentang dukungan StorageName konektor dan alternatif apa yang tersedia, lihat dokumentasi untuk setiap konektor.
Semua metode untuk upsert atau mendapatkan rekaman menggunakan kelas dan definisi rekaman penyimpanan vektor.
Ini dapat dilakukan dengan mendefinisikan kelas Anda sendiri dengan anotasi untuk bidang, atau dengan menggunakan kelas/jenis dalam kombinasi dengan definisi rekaman. Dua hal yang perlu dilakukan untuk kelas, yang pertama adalah menambahkan anotasi dengan jenis bidang, yang kedua adalah menghias kelas dengan vectorstoremodel dekorator.
Petunjuk / Saran
Untuk pendekatan alternatif menggunakan definisi rekaman, lihat menentukan skema Anda dengan definisi rekaman.
Berikut adalah contoh model yang dihiasi dengan anotasi ini.
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)]
Petunjuk / Saran
Menentukan kelas dengan anotasi ini dapat dilakukan dengan beberapa cara, salah satunya menggunakan dataclasses modul di Python, yang ditunjukkan di sini. Sampel ini menunjukkan pendekatan lain (menggunakan Pydantic BaseModels dan kelas python vanilla) juga.
Anotasi
Ada tiga jenis anotasi yang akan digunakan, dan memiliki kelas dasar yang sama.
VectorStoreRecordField
Ini adalah kelas dasar untuk semua anotasi, itu tidak dimaksudkan untuk digunakan secara langsung.
Parameter VectorStoreRecordField
| Pengaturan | Wajib | Deskripsi |
|---|---|---|
| nama | Tidak. | Dapat ditambahkan secara langsung tetapi akan diatur selama penguraian model. |
| property_type | Tidak. | Harus berupa string, juga akan diturunkan selama penguraian. |
Petunjuk / Saran
Anotasi diurai oleh vectorstoremodel dekorator dan salah satu hal yang dilakukannya adalah membuat definisi rekaman untuk kelas, oleh karena itu tidak perlu membuat instans kelas bidang ketika tidak ada parameter yang diatur, bidang dapat dianotasi hanya dengan kelas, seperti ini:
hotel_id: Annotated[str, VectorStoreRecordKeyField]
VectorStoreRecordKeyField
Gunakan anotasi ini untuk menunjukkan bahwa atribut ini adalah kunci rekaman.
VectorStoreRecordKeyField()
Parameter VectorStoreRecordKeyField
Tidak ada parameter lain di luar kelas dasar yang ditentukan.
VectorStoreRecordDataField
Gunakan anotasi ini untuk menunjukkan bahwa atribut Anda berisi data umum yang bukan kunci atau vektor.
VectorStoreRecordDataField(is_filterable=True)
Parameter VectorStoreRecordDataField
| Pengaturan | Wajib | Deskripsi |
|---|---|---|
| has_embedding | Tidak. | Menunjukkan apakah properti memiliki penyematan yang terkait dengannya, defaultnya adalah Tidak Ada. |
| embedding_property_name | Tidak. | Nama properti yang berisi penyematan, defaultnya adalah Tidak Ada. |
| is_filterable | Tidak. | Menunjukkan apakah properti harus diindeks untuk pemfilteran jika database mengharuskan memilih untuk mengindeks per properti. Defaultnya adalah false. |
| is_full_text_searchable | Tidak. | Menunjukkan apakah properti harus diindeks untuk pencarian teks lengkap untuk database yang mendukung pencarian teks lengkap. Defaultnya adalah false. |
VectorStoreRecordVectorField
Gunakan anotasi ini untuk menunjukkan bahwa atribut Anda berisi vektor.
VectorStoreRecordVectorField(dimensions=4, distance_function=DistanceFunction.COSINE, index_kind=IndexKind.HNSW)
Parameter VectorStoreRecordVectorField
| Pengaturan | Wajib | Deskripsi |
|---|---|---|
| ukuran | Ya untuk pembuatan koleksi, opsional jika tidak | Jumlah dimensi yang dimiliki vektor. Ini biasanya diperlukan saat membuat indeks vektor untuk koleksi. |
| index_kind | Tidak. | Jenis indeks untuk mengindeks vektor dengan. Default bervariasi menurut jenis penyimpanan vektor. |
| distance_function | Tidak. | Jenis fungsi yang digunakan saat melakukan perbandingan vektor selama pencarian vektor melalui vektor ini. Default bervariasi menurut jenis penyimpanan vektor. |
| local_embedding | Tidak. | Menunjukkan apakah properti memiliki penyematan lokal yang terkait dengannya, defaultnya adalah Tidak Ada. |
| embedding_settings | Tidak. | Pengaturan untuk penyematan, dalam bentuk dict dengan service_id sebagai kunci dan PromptExecutionSettings sebagai nilai, defaultnya adalah None. |
| serialize_function | Tidak. | Fungsi yang digunakan untuk menserialisasikan vektor, jika jenisnya bukan daftar[float | int] fungsi ini diperlukan, atau seluruh model perlu diserialisasikan. |
| deserialize_function | Tidak. | Fungsi yang digunakan untuk mendeserialisasi vektor, jika jenisnya bukan daftar[float | int] fungsi ini diperlukan, atau seluruh model perlu dideserialisasi. |
Jenis indeks umum dan jenis fungsi jarak disediakan sebagai nilai statis pada semantic_kernel.data.IndexKind kelas dan semantic_kernel.data.DistanceFunction .
Implementasi Penyimpanan Vektor individu juga dapat menggunakan jenis indeks dan fungsi jarak mereka sendiri, di mana database mendukung jenis yang tidak biasa.
Semua metode untuk melakukan upsert atau mendapatkan rekaman menggunakan kelas model yang ditik dengan kuat. Bidang pada kelas ini dihiasi dengan anotasi yang menunjukkan tujuan setiap bidang.
Petunjuk / Saran
Untuk alternatif menggunakan atribut, lihat menentukan skema Anda dengan definisi rekaman.
Berikut adalah contoh model yang dihiasi dengan anotasi ini. Secara default, sebagian besar toko vektor di luar kotak menggunakan Jackson, dengan demikian adalah praktik yang baik untuk memastikan objek model dapat diserialisasikan oleh Jackson, yaitu kelas terlihat, memiliki getter, konstruktor, anotasi, dll.
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; }
}
Anotasi
VectorStoreRecordKey
Gunakan anotasi ini untuk menunjukkan bahwa bidang Anda adalah kunci rekaman.
@VectorStoreRecordKey
private String hotelId;
Parameter VectorStoreRecordKey
| Pengaturan | Wajib | Deskripsi |
|---|---|---|
| Nama penyimpanan | Tidak. | Dapat digunakan untuk memberikan nama alternatif untuk bidang dalam database. Perhatikan bahwa parameter ini tidak didukung oleh semua konektor, misalnya di mana Jackson digunakan, dalam hal ini nama penyimpanan dapat ditentukan menggunakan anotasi Jackson. |
Petunjuk / Saran
Untuk informasi selengkapnya tentang konektor mana yang mendukung storageName dan alternatif apa yang tersedia, lihat dokumentasi untuk setiap konektor.
VectorStoreRecordData
Gunakan anotasi ini untuk menunjukkan bahwa bidang Anda berisi data umum yang bukan kunci atau vektor.
@VectorStoreRecordData(isFilterable = true)
private String name;
Parameter VectorStoreRecordData
| Pengaturan | Wajib | Deskripsi |
|---|---|---|
| isFilterable | Tidak. | Menunjukkan apakah bidang harus diindeks untuk pemfilteran jika database memerlukan pengindeksan per bidang. Defaultnya adalah false. |
| isFullTextSearchable | Tidak. | Menunjukkan apakah bidang harus diindeks untuk pencarian teks lengkap untuk database yang mendukung pencarian teks lengkap. Defaultnya adalah false. |
| Nama penyimpanan | Tidak. | Dapat digunakan untuk memberikan nama alternatif untuk bidang dalam database. Perhatikan bahwa parameter ini tidak didukung oleh semua konektor, misalnya di mana Jackson digunakan, dalam hal ini nama penyimpanan dapat ditentukan menggunakan anotasi Jackson. |
Petunjuk / Saran
Untuk informasi selengkapnya tentang konektor mana yang mendukung storageName dan alternatif apa yang tersedia, lihat dokumentasi untuk setiap konektor.
VectorStoreRecordVector
Gunakan anotasi ini untuk menunjukkan bahwa bidang Anda berisi vektor.
@VectorStoreRecordVector(dimensions = 4, indexKind = IndexKind.HNSW, distanceFunction = DistanceFunction.COSINE_DISTANCE)
private List<Float> descriptionEmbedding;
Parameter VectorStoreRecordVector
| Pengaturan | Wajib | Deskripsi |
|---|---|---|
| ukuran | Ya untuk pembuatan koleksi, opsional jika tidak | Jumlah dimensi yang dimiliki vektor. Ini biasanya diperlukan saat membuat indeks vektor untuk koleksi. |
| indexKind | Tidak. | Jenis indeks untuk mengindeks vektor dengan. Default bervariasi menurut jenis penyimpanan vektor. |
| distanceFunction | Tidak. | Jenis fungsi yang digunakan saat melakukan perbandingan vektor selama pencarian vektor melalui vektor ini. Default bervariasi menurut jenis penyimpanan vektor. |
| Nama penyimpanan | Tidak. | Dapat digunakan untuk memberikan nama alternatif untuk bidang dalam database. Perhatikan bahwa parameter ini tidak didukung oleh semua konektor, misalnya di mana Jackson digunakan, dalam hal ini nama penyimpanan dapat ditentukan menggunakan anotasi Jackson. |
Jenis indeks umum dan jenis fungsi jarak disediakan pada com.microsoft.semantickernel.data.vectorstorage.definition.IndexKind enum dan com.microsoft.semantickernel.data.vectorstorage.definition.DistanceFunction .
Implementasi Penyimpanan Vektor individu juga dapat menggunakan jenis indeks dan fungsi jarak mereka sendiri, di mana database mendukung jenis yang tidak biasa.
Petunjuk / Saran
Untuk informasi selengkapnya tentang konektor mana yang mendukung storageName dan alternatif apa yang tersedia, lihat dokumentasi untuk setiap konektor.
Info lebih lanjut akan segera hadir.