Serialisasi model data Anda ke dan dari penyimpanan yang berbeda (Pratinjau)

Agar model data Anda disimpan dalam database, model tersebut perlu dikonversi ke format yang dapat dipahami database. Database yang berbeda memerlukan skema dan format penyimpanan yang berbeda. Beberapa memiliki skema ketat yang perlu dipatuhi, sementara yang lain memungkinkan skema didefinisikan oleh pengguna.

Konektor penyimpanan vektor yang disediakan oleh Semantic Kernel memiliki pemeta bawaan yang akan memetakan model data Anda ke dan dari skema database. Lihat halaman untuk setiap konektor untuk informasi selengkapnya tentang bagaimana pemeta bawaan memetakan data untuk setiap database.

Agar model data Anda didefinisikan baik sebagai kelas atau definisi yang akan disimpan dalam database, model tersebut perlu diserialisasikan ke format yang dapat dipahami database.

Ada dua cara yang dapat dilakukan, baik dengan menggunakan serialisasi bawaan yang disediakan oleh Kernel Semantik atau dengan menyediakan logika serialisasi Anda sendiri.

Dua diagram berikut menunjukkan alur ditampilkan untuk serialisasi dan deserialisasi model data ke dan dari model penyimpanan.

Alur Serialisasi (digunakan dalam Upsert)

Alur Serialisasi

Aliran Deserialisasi

Langkah-langkah yang ditandai dengan * (di kedua diagram) diimplementasikan oleh pengembang konektor tertentu, dan berbeda untuk setiap toko. Langkah-langkah yang ditandai dengan ** (di kedua diagram) disediakan baik sebagai metode pada rekaman atau sebagai bagian dari definisi rekaman, ini selalu disediakan oleh pengguna, lihat Serialisasi Langsung untuk informasi selengkapnya.

Pendekatan (De)Serialisasi

Serialisasi langsung (Model Data ke Model Toko)

Serialisasi langsung adalah cara terbaik untuk memastikan kontrol penuh atas bagaimana model Anda diserialisasikan dan untuk mengoptimalkan performa. Kelemahannya adalah bahwa ini khusus untuk penyimpanan data, dan oleh karena itu, saat menggunakan pendekatan ini, tidak semudah berpindah antara penyimpanan yang berbeda dengan model data yang sama.

Anda dapat menggunakan ini dengan menerapkan metode yang mengikuti protokol SerializeMethodProtocol dalam model data Anda, atau dengan menambahkan fungsi yang mengikuti SerializeFunctionProtocol ke definisi rekaman Anda, keduanya dapat ditemukan di semantic_kernel/data/vector_store_model_protocols.py.

Ketika salah satu fungsi tersebut ada, fungsi tersebut akan digunakan untuk secara langsung menserialisasikan model data ke model penyimpanan.

Anda bahkan bisa mengimplementasikan salah satunya saja dan menggunakan serialisasi/deserialisasi bawaan untuk arah sebaliknya. Ini misalnya dapat berguna saat berhadapan dengan koleksi yang dibuat di luar kendali Anda dan Anda perlu menyesuaikan cara deserialisasi (dan Anda memang tidak bisa melakukan upsert).

Serialisasi bawaan (de)(Model Data ke Dict dan Dict untuk Menyimpan Model dan sebaliknya)

Serialisasi bawaan dilakukan dengan terlebih dahulu mengonversi model data menjadi kamus dan kemudian menserialisasikannya ke model yang dipahami penyimpanan, untuk setiap penyimpanan yang berbeda dan didefinisikan sebagai bagian dari konektor bawaan. Deserialisasi dilakukan dalam urutan terbalik.

Serialisasi Langkah 1: Model Data ke Dict

Bergantung pada jenis model data yang Anda miliki, langkah-langkahnya dilakukan dengan cara yang berbeda. Ada empat cara yang akan coba diserialisasikan model data ke kamus:

  1. metode to_dict dalam definisi (sangat selaras dengan atribut to_dict dari model data, sesuai dengan ToDictFunctionProtocol)
  2. periksa apakah rekaman adalah ToDictMethodProtocol dan gunakan metode to_dict
  3. Periksa apakah catatan tersebut adalah model Pydantic dan gunakan model_dump dari model tersebut, lihat catatan di bawah ini untuk informasi selengkapnya.
  4. mengulangi bidang dalam definisi dan membuat kamus

Opsional: Penyematan

Ketika Anda memiliki model data dengan embedding_generator bidang, atau koleksi memiliki embedding_generator bidang, penyematan akan dihasilkan dan ditambahkan ke kamus sebelum diserialisasikan ke model penyimpanan.

Serialisasi Langkah 2: Dict untuk Menyimpan Model

Konektor harus menyediakan metode untuk mengonversi kamus ke model penyimpanan. Ini dilakukan oleh pengembang konektor dan berbeda untuk setiap toko.

Deserialisasi Langkah 1: Simpan Model ke Dict

Metode harus disediakan oleh konektor untuk mengonversi model penyimpanan ke kamus. Ini dilakukan oleh pengembang konektor dan berbeda untuk setiap toko.

Deserialisasi Langkah 2: Menentukan model data

Deserialisasi dilakukan dalam urutan terbalik, ia mencoba opsi ini:

  1. metode from_dict pada definisi (selaras dengan model data atribut from_dict, sesuai dengan FromDictFunctionProtocol)
  2. periksa apakah rekaman adalah FromDictMethodProtocol dan gunakan metode from_dict
  3. Periksa apakah catatan tersebut adalah model Pydantic dan gunakan model_validate dari model tersebut, lihat catatan di bawah ini untuk informasi selengkapnya.
  4. Lewati setiap bidang dalam definisi dan atur nilainya, kemudian dict ini diteruskan ke konstruktor model data sebagai argumen bernama (kecuali jika model data itu sendiri adalah dict, dalam hal ini dikembalikan apa adanya).

Nota

Menggunakan Pydantic dengan serialisasi bawaan

Ketika Anda menentukan model Anda menggunakan Pydantic BaseModel, itu akan menggunakan model_dump metode dan model_validate untuk menserialisasikan dan mendeserialisasi model data ke dan dari dict. Ini dilakukan dengan menggunakan metode model_dump tanpa parameter apa pun, jika Anda ingin mengontrolnya, pertimbangkan untuk menerapkan ToDictMethodProtocol pada model data Anda, seperti yang dicoba terlebih dahulu.

Segera hadir

Info lebih lanjut akan segera hadir.