Generieren und Verwalten von Einbettungen für SQL-Datenbankworkloads
Nachdem Sie entwerfen, wie Einbettungen Ihre Daten darstellen, müssen Sie sie generieren und bei Datenänderungen synchronisieren.
SQL Server bietet integrierte KI-Funktionen, um Einbettungen aus Text zu generieren, der in Datenbankspalten gespeichert ist. Das Generieren von Einbettungen ist in der Regel kein einmaliger Vorgang. Wenn sich Quelldaten ändern, müssen Einbettungen möglicherweise neu generiert werden, damit sie weiterhin den aktuellen Zustand der Daten widerspiegeln.
Generieren von Einbettungen mit SQL
SQL Server stellt die AI_GENERATE_EMBEDDINGS Funktion zum Generieren von Einbettungen direkt aus Text bereit, der in Datenbankspalten gespeichert ist. Diese Funktion verwendet ein externes Modell, um Text in einen Vektor zu konvertieren, der gespeichert und später verglichen werden kann.
Ein gängiges Muster besteht darin, Einbettungen während einer anfänglichen Last oder als Teil eines Batchprozesses zu generieren. Die resultierenden Vektoren werden zusammen mit den Quelldaten oder in einer verknüpften Tabelle gespeichert, sodass sie effizient abgefragt werden können.
Das folgende Beispiel zeigt einen einfachen Ende-zu-Ende-Ablauf, von der Tabellendefinition bis zur Generierung von Einbettungen.
Erstellen Sie zunächst eine Tabelle, die sowohl den Quelltext als auch das Einbetten speichert.
CREATE TABLE dbo.documents
(
id INT PRIMARY KEY,
description NVARCHAR(MAX),
embedding VECTOR(1536)
);
Generieren Sie als Nächstes Einbettungen aus dem Text, und speichern Sie sie in der Tabelle.
UPDATE dbo.documents
SET embedding = AI_GENERATE_EMBEDDINGS(description USE MODEL my_embedding_model);
In diesem Beispiel wird der Wert jeder Zeile description an das Einbettungsmodell gesendet. Die Funktion gibt einen Vektor zurück, der in der embedding Spalte gespeichert ist. Diese gespeicherten Vektoren können später abgefragt oder verglichen werden, ohne sie neu zu generieren. Möglicherweise möchten Sie zusätzliche Logik zum Behandeln von Blöcken oder Filtern basierend auf Ihrem Einbettungsdesign einfügen.
Die Einbettungsgenerierung bestimmt, wie Vektoren erstellt werden. Wartungsstrategien bestimmen, wann diese Vektoren aktualisiert werden müssen.
Grundlegendes zur Einbettungswartung
Die Einbettungswartung sorgt dafür, dass gespeicherte Einbettungen an Änderungen der zugrunde liegenden Daten ausgerichtet bleiben. Wenn Textwerte eingefügt, aktualisiert oder gelöscht werden, spiegeln die entsprechenden Einbettungen möglicherweise nicht mehr den aktuellen Inhalt wider.
Je nachdem, wie oft Daten geändert werden, wie schnell Einbettungen aktualisiert werden müssen und wo die Einbettungsgenerierung ausgeführt wird, können unterschiedliche Wartungsansätze verwendet werden.
Auswahl einer Einbettungswartungsmethode
Einbettungen müssen beim Ändern der Daten an den Quelltext angepasst bleiben. Es können mehrere Optionen verwendet werden, um Änderungen zu erkennen und zu entscheiden, wann Einbettungen neu generiert werden sollen. Diese Optionen unterscheiden sich darin, wo die Arbeit erfolgt und wie schnell Änderungen widergespiegelt werden.
Tabellenauslöser
Trigger werden automatisch ausgeführt, wenn Zeilen eingefügt oder aktualisiert werden. Bei der Einbettungspflege kann ein Trigger Zeilen markieren, die neue Einbettungen benötigen, oder die Neuerstellung sofort initiieren. Dieser Ansatz spiegelt Änderungen schnell wider, fügt aber zu Schreibvorgängen Arbeit hinzu.Änderungsnachverfolgung
Die Änderungsverfolgung zeichnet auf, dass eine Zeile seit einem bestimmten Zeitpunkt geändert wurde. Ein Hintergrundprozess kann diese Informationen verwenden, um zu ermitteln, für welche Zeilen Einbettungen aktualisiert werden müssen, und verarbeitet diese in Batches. Bei diesem Ansatz werden Latenz und Leistung ausgeglichen.Change Data Capture (CDC)
CDC zeichnet detaillierte Informationen zu Datenänderungen auf, einschließlich vor und nach Werten. Die Einbettungswartung kann CDC-Tabellen verwenden, um zu identifizieren, welche Textwerte sich geändert haben, und die Einbettungen asynchron neu generieren. Dieser Ansatz eignet sich für Workloads mit hohem Volumen.Azure-Funktionen mit SQL-Triggerbindung
Azure Functions kann mithilfe von SQL-Triggerbindungen auf Datenbankänderungen reagieren. Mit diesem Feature kann die Einbettungsgenerierung außerhalb des Datenbankmoduls ausgeführt werden und gleichzeitig auf Datenänderungen reagieren. Dieser Ansatz entlastet die Datenbank und kann unabhängig skaliert werden.Azure Logic Apps
Logik-Apps können Updates als Teil eines Workflows einbetten. Beispielsweise kann eine Logik-App regelmäßig nach geänderten Zeilen suchen und einen Einbettungsdienst aufrufen und Updates mit anderen Systemen koordinieren. Dieser Ansatz ist codearm und lässt sich gut in andere Azure-Dienste integrieren.Ereignisstreaming ändern
Change Event Streaming (CES) streamt DML-Änderungen direkt in Azure Event Hubs in nahezu Echtzeit. Nachgelagerte Systeme können diese Ereignisse nutzen und Einbettungen neu generieren, wenn Änderungen auftreten, ohne zusätzlichen Aufwand für Datenbanktransaktionen zu verursachen. Dieser Ansatz entkoppelt die Erstellung von Einbettungen von der Datenbank und unterstützt mehrere Konsumenten bei der Verarbeitung desselben Änderungsdatenstroms.Microsoft Foundry
Microsoft Foundry kann zum Verwalten und Auswerten der Modelle verwendet werden, die Einbettungen generieren. In einem Wartungsworkflow unterstützt Foundry in der Regel die Modellauswahl oder das Hosting, während ein anderer Prozess die Änderungserkennung und Datenbankaktualisierungen verarbeitet. Bei diesem Ansatz wird die Modellverwaltung zentralisiert, während die Einbettungsgenerierung als Reaktion auf Datenänderungen auftritt.
Auswählen eines geeigneten Wartungsansatzes
Es gibt keine einzige richtige Möglichkeit zum Verwalten von Einbettungen. Der richtige Ansatz hängt von Faktoren wie Datenvolumen, Aktualisierungshäufigkeit, Latenzanforderungen und wo die Einbettungsgenerierung in die Gesamtlösung passt.
Einige Lösungen bevorzugen sofortige Updates, während andere die Batchverarbeitung oder die externe Verarbeitung priorisieren. Wenn Sie diese Kompromisse verstehen, können Sie eine Wartungsstrategie auswählen, die ihrer SQL-Anwendung entspricht.
Wichtige Erkenntnisse
Das Generieren von Einbettungen mit AI_GENERATE_EMBEDDINGS ist nur der erste Schritt. Da sich Quelldaten ändern, können gespeicherte Vektoren nicht mehr synchronisiert werden, daher benötigen Sie eine Wartungsstrategie. Optionen reichen von Auslösern und Änderungsnachverfolgung für eng gekoppelte Updates bis zu Change Data Capture, Change Event Streaming und Azure Functions für asynchrone oder entkoppelte Ansätze. Die richtige Wahl hängt von Ihrem Datenvolumen, den Latenzanforderungen und davon ab, wo die Einbettungsgenerierung in Ihre Gesamtarchitektur passt.