Veri modelinizin farklı depolara ve depolardan seri hale getirilmesi (Önizleme)

Veri modelinizin bir veritabanında depolanması için veritabanının anlayabileceği bir biçime dönüştürülmesi gerekir. Farklı veritabanları için farklı depolama şemaları ve biçimleri gerekir. Bazılarının bağlı kalması gereken katı bir şeması vardır, bazıları ise şemanın kullanıcı tarafından tanımlanmasına izin verir.

Anlam Çekirdeği tarafından sağlanan vektör deposu bağlayıcıları, veri modelinizi veritabanı şemalarına ve bu şemalardan eşleyecek yerleşik eşleyicilere sahiptir. Yerleşik eşleyicilerin her veritabanı için verileri nasıl eşlediğini öğrenmek için her bağlayıcı için sayfasına bakın.

Sınıf veya tanım olarak tanımlanan veri modelinizin veritabanında depolanması için, veritabanının anlayabileceği bir biçimde seri hale getirilmelidir.

Semantik Çekirdek tarafından sağlanan yerleşik serileştirmeyi kullanarak veya kendi serileştirme mantığınızı sağlayarak iki yöntem yapılabilir.

Aşağıdaki iki diyagramda, veri modellerinin hem seri hale getirilmesi hem de bir depo modelinden seri durumdan çıkarılması için akışlar gösterilmektedir.

Serileştirme Akışı (Upsert'te kullanılır)

Serileştirme Akışı

Seri Durumdan Çıkarma Akışı

* ile işaretlenmiş adımlar (her iki diyagramda da) belirli bir bağlayıcının geliştiricisi tarafından uygulanır ve her mağaza için farklıdır. ** ile işaretlenmiş adımlar (her iki diyagramda da) bir kayıtta yöntem olarak veya kayıt tanımının bir parçası olarak sağlanır; bu her zaman kullanıcı tarafından sağlanır, daha fazla bilgi için bkz. doğrudan seri hale getirme .

(De)Serileştirme yaklaşımları

Doğrudan serileştirme (Veri Modelinden Depolama Modeline)

Doğrudan serileştirme, modellerinizin nasıl seri hale getirildiği üzerinde tam denetim sağlamanın ve performansı iyileştirmenin en iyi yoludur. Dezavantajı, veri deposuna özgü olmasıdır ve bu nedenle bunu kullanırken aynı veri modeline sahip farklı depolar arasında geçiş yapmak o kadar kolay değildir.

Bunu, veri modelinizde SerializeMethodProtocol protokolü izleyen bir yöntem uygulayarak veya kayıt tanımınıza SerializeFunctionProtocol izleyen işlevler ekleyerek kullanabilirsiniz; her ikisi de semantic_kernel/data/vector_store_model_protocols.pyiçinde bulunabilir.

Bu işlevlerden biri mevcut olduğunda, veri modelini doğrudan depo modeline seri hale getirmek için kullanılır.

Hatta iki öğeden yalnızca birini uygulayıp diğer yönde yerleşik serileştirme veya deserileştirme özelliğini kullanabilirsiniz. Bu, örneğin, kontrolünüz dışındaki bir koleksiyonla ilgilenirken yararlı olabilir ve serileştirilme biçiminde bazı özelleştirmeler yapmanız gerekebilir (ve yine de upsert yapmanız mümkün değil).

Yerleşik (de)serileştirme (Veri Modeli'ne Dikte etme ve Mağaza Modeline Dikte Etme ve tam tersi)

Yerleşik serileştirme, önce veri modelini bir sözlüğe dönüştürüp ardından farklı olan ve yerleşik bağlayıcının parçası olarak tanımlanan her depo için bunu depolayan modele seri hale getirerek yapılır. Seri durumdan çıkarma ters sırada yapılır.

Serileştirme Adım 1: Dikte Etmek için Veri Modeli

Sahip olduğunuz veri modeli türüne bağlı olarak, adımlar farklı şekillerde gerçekleştirilir. Veri modelini bir sözlükte seri hale getirmenin dört yolu vardır:

  1. tanımda to_dict yöntemi (ToDictFunctionProtocolizleyerek veri modelinin to_dict özniteliğine hizalanır)
  2. Kaydın bir ToDictMethodProtocol olup olmadığını denetleyin ve to_dict yöntemini kullanın
  3. Kaydın bir Pydantic modeli olup olmadığını kontrol edin ve modelin model_dump'ını kullanın, daha fazla bilgi için aşağıdaki nota bakın.
  4. tanımdaki alanlar arasında döngü yapın ve sözlüğü oluşturun

İsteğe bağlı: Ekleme

Veri modelinizin bir embedding_generator alanı varsa veya koleksiyonun bir embedding_generator alanı varsa, gömü oluşturulur ve depo modeline serileştirilmeden önce sözlüğe eklenir.

Serileştirme Adım 2: Modeli Depolamaya Dikte Etme

Sözlüğü depo modeline dönüştürmek için bağlayıcı tarafından bir yöntem sağlanması gerekir. Bu işlem bağlayıcının geliştiricisi tarafından yapılır ve her mağaza için farklıdır.

Seri Durumdan Çıkarma 1. Adım: Modeli Dikte Etmek için Depolama

Depo modelini sözlüğe dönüştürmek için bağlayıcı tarafından bir yöntem sağlanması gerekir. Bu işlem bağlayıcının geliştiricisi tarafından yapılır ve her mağaza için farklıdır.

Seri Durumdan Çıkarma 2. Adım: Veri Modeline Dikte Etme

Seri durumdan çıkarma işlemi ters sırada yapılır. Ardından, şu seçenekleri dener:

  1. tanımda from_dict yöntemi (FromDictFunctionProtocolizleyerek veri modelinin from_dict özniteliğine hizalanır)
  2. Kaydın bir FromDictMethodProtocol olup olmadığını denetleyin ve from_dict yöntemini kullanın
  3. Kaydın bir Pydantic modeli olup olmadığını kontrol edin ve modelin model_validate'ını kullanın, daha fazla bilgi için aşağıdaki nota bakın.
  4. tanımdaki alanlar arasında döngü yapın ve değerleri ayarlayın, ardından bu dikte veri modelinin oluşturucusuna adlandırılmış bağımsız değişkenler olarak geçirilir (veri modeli bir dikte olmadığı sürece, bu durumda olduğu gibi döndürülür)

Not

Yerleşik serileştirme ile Pydantic kullanma

Pydantic BaseModel kullanarak model tanımladığınızda, veri modelini seri hale getirmek ve bir dikteden seri durumdan çıkarmak için ve model_dump yöntemlerini kullanırmodel_validate. Bu, model_dump yöntemi herhangi bir parametre olmadan kullanılarak gerçekleştirilir. Bunu denetlemek istiyorsanız, önce denendiği gibi veri modelinizde ToDictMethodProtocol uygulamayı göz önünde bulundurun.

Yakında

Daha fazla bilgi yakında sunulacaktır.