Freigeben über


Serialisierung Ihres Datenmodells zu und von verschiedenen Speichern (Vorschau)

Damit Ihr Datenmodell in einer Datenbank gespeichert werden kann, muss es in ein Format konvertiert werden, das die Datenbank verstehen kann. Für unterschiedliche Datenbanken sind unterschiedliche Speicherschemas und Formate erforderlich. Einige haben ein strenges Schema, das eingehalten werden muss, während andere zulassen, dass das Schema vom Benutzer definiert wird.

Die von Semantic Kernel bereitgestellten Vektorspeicher-Connectoren verfügen über integrierte Mapper, die Ihr Datenmodell auf die Datenbankschemata abbilden und umgekehrt. Weitere Informationen dazu, wie die integrierten Mapper Daten für jede Datenbank zuordnen, finden Sie auf der Seite für jeden Connector.

Damit Ihr Datenmodell entweder als Klasse oder definition in einer Datenbank gespeichert werden kann, muss es in einem Format serialisiert werden, das die Datenbank verstehen kann.

Es gibt zwei Möglichkeiten, dies zu tun: entweder durch die Verwendung der integrierten Serialisierung, die vom Semantic Kernel bereitgestellt wird, oder durch Bereitstellung Ihrer eigenen Serialisierungslogik.

Die folgenden zwei Diagramme zeigen die Abläufe für die Serialisierung und Deserialisierung von Datenmodellen zu und von einem Speichermodell.

Serialisierungsfluss (verwendet in Upsert)

Serialisierungsfluss

Deserialisierungsfluss

Die Schritte, die mit * (in beiden Diagrammen) gekennzeichnet sind, werden vom Entwickler eines bestimmten Connectors implementiert und unterscheiden sich für jeden Shop. Die mit ** (in beiden Diagrammen) markierten Schritte werden entweder als Methode für einen Datensatz oder als Teil der Datensatzdefinition bereitgestellt, dies wird immer vom Benutzer bereitgestellt, weitere Informationen finden Sie unter Direct Serialization .

(De-)Serialisierungsansätze

Direkte Serialisierung (Datenmodell zu Speichermodell)

Die direkte Serialisierung ist die beste Möglichkeit, um die vollständige Kontrolle darüber zu gewährleisten, wie Ihre Modelle serialisiert werden und um die Leistung zu optimieren. Der Nachteil besteht darin, dass es spezifisch für einen Datenspeicher ist und daher bei Verwendung dieses Systems man nicht so leicht zwischen verschiedenen Speichern mit demselben Datenmodell wechseln kann.

Sie können dies verwenden, indem Sie eine Methode implementieren, die dem SerializeMethodProtocol-Protokoll in Ihrem Datenmodell folgt, oder indem Sie Funktionen hinzufügen, die dem SerializeFunctionProtocol in Ihrer Datensatzdefinition folgen, und beides finden Sie in semantic_kernel/data/vector_store_model_protocols.py.

Wenn eine dieser Funktionen vorhanden ist, wird sie verwendet, um das Datenmodell direkt auf das Speichermodell zu serialisieren.

Sie könnten sogar nur eine der beiden Implementierungen vornehmen und die integrierte (De-)Serialisierung für die andere Richtung verwenden. Dies könnte beispielsweise nützlich sein, wenn Sie mit einer Sammlung arbeiten, die außerhalb Ihrer Kontrolle erstellt wurde, und Sie Anpassungen an der Art und Weise vornehmen müssen, wie sie deserialisiert wird (und Sie ohnehin kein Upsert durchführen können).

Eingebaute (De-)Serialisierung (Datenmodell zu Dict und Dict zu Store-Modell und umgekehrt)

Die integrierte Serialisierung erfolgt, indem das Datenmodell zuerst in ein Wörterbuch umgewandelt und dann für jedes Geschäft, das anders ist und als Teil des integrierten Connectors definiert ist, in das Modell serialisiert wird, das dieses Geschäft versteht. Die Deserialisierung erfolgt in umgekehrter Reihenfolge.

Serialisierung Schritt 1: Datenmodell zu Dict

Je nachdem, welche Art von Datenmodell Sie haben, werden die Schritte auf unterschiedliche Weise ausgeführt. Es gibt vier Möglichkeiten, wie das Datenmodell in ein Wörterbuch serialisiert werden kann:

  1. to_dict Methode in der Definition (entspricht dem Attribut to_dict des Datenmodells, nach dem ToDictFunctionProtocol)
  2. überprüfen, ob der Datensatz ein „ToDictMethodProtocol“ ist und die „to_dict“-Methode verwenden
  3. Überprüfen Sie, ob der Datensatz ein Pydantic-Modell ist, und verwenden Sie das model_dump des Modells. Siehe die unten stehende Anmerkung für weitere Informationen.
  4. Durchlaufen Sie die Felder in der Definition und erstellen Sie das Wörterbuch

Optional: Einbetten

Wenn Sie über ein Datenmodell mit einem embedding_generator Feld verfügen oder die Sammlung ein embedding_generator Feld enthält, wird die Einbettung generiert und dem Wörterbuch hinzugefügt, bevor sie dem Speichermodell serialisiert wird.

Serialisierung Schritt 2: Diktat zur Speicherung des Modells

Eine Methode muss vom Connector bereitgestellt werden, um das Wörterbuch in das Store-Modell zu konvertieren. Dies wird durch den Entwickler des Connectors ausgeführt und unterscheidet sich für jeden Shop.

Deserialisierung Schritt 1: Modell in Dict speichern

Eine Methode muss vom Connector bereitgestellt werden, um das Store-Modell in ein Wörterbuch zu konvertieren. Dies wird durch den Entwickler des Connectors ausgeführt und unterscheidet sich für jeden Shop.

Deserialisierung Schritt 2 Von Dict zu Datenmodell

Die Deserialisierung erfolgt in umgekehrter Reihenfolge, sie versucht diese Optionen:

  1. from_dict Methode in der Definition (entspricht dem from_dict-Attribut des Datenmodells, folgend auf „FromDictFunctionProtocol“)
  2. prüfen, ob der Datensatz ein FromDictMethodProtocol ist und die from_dict-Methode verwenden
  3. Überprüfen Sie, ob der Datensatz ein Pydantic-Modell ist und verwenden Sie das model_validate des Modells, siehe die unten stehende Anmerkung für weitere Informationen.
  4. Durchlaufen Sie die Felder in der Definition und setzen Sie die Werte. Dann wird dieses Wörterbuch als benannte Argumente in den Konstruktor des Datenmodells übergeben (es sei denn, das Datenmodell ist selbst ein Wörterbuch, in diesem Fall wird es unverändert zurückgegeben).

Anmerkung

Verwenden von Pydantic mit integrierter Serialisierung

Wenn Sie Ihr Modell mit einem Pydantic BaseModel definieren, werden die Methoden „model_dump“ und „model_validate“ verwendet, um das Datenmodell in ein Wörterbuch zu serialisieren und daraus zu deserialisieren. Dies erfolgt mithilfe der model_dump-Methode ohne Angabe von Parametern. Wenn Sie dies steuern möchten, ziehen Sie in Betracht, die ToDictMethodProtocol in Ihrem Datenmodell zu implementieren, da dies zuerst versucht wird.

In Kürze verfügbar

Weitere Informationen folgen in Kürze.