Mit optimierten Funktionen können Sie ein kleineres, schnelleres Proxy-Modell verwenden, um die meisten Ihrer Anfragen zu verarbeiten, und nur bei Bedarf auf ein größeres LLM zurückgreifen. Dieser Ansatz senkt die Betriebskosten und verbessert die Reaktionsfähigkeit von Abfragen. Optimierte Funktionen minimieren die Verwendung von LLMs für die zeilenweise Klassifizierung oder Filterung von Aufgaben, die vom Proxy-Modell besser ausgeführt werden können.
AlloyDB AI-Funktionen wie ai.if() können aufgrund von Remote-Aufrufen von Large Language Models (LLMs) eine hohe Latenz haben. Optimierte Funktionen beheben dieses Latenzproblem, indem sie kleinere, lokal trainierte Proxy-Modelle verwenden, um Ihre Anfragen zu verarbeiten. Diese Modelle werden mit einer Stichprobe Ihrer Daten trainiert, wobei die Ausgabe des LLM als „Source of Truth“ verwendet wird.
Genauigkeitsprüfungen werden zur Laufzeit für eine Stichprobe von Zeilen mit dem LLM durchgeführt. Für diese Prüfung verwendet AlloyDB das LLM, um Labels für die Beispielzeilen zu generieren. Diese werden dann mit den Vorhersagen des Proxy-Modells verglichen, um die Genauigkeit zu überprüfen. Wenn die Genauigkeitsprüfung fehlschlägt, wird für die Anfrage das LLM verwendet.
Wenn Sie eine optimierte Funktion verwenden, führt AlloyDB Folgendes aus:
- Proxy-Modell trainieren: AlloyDB trainiert ein einfaches Proxy-Modell mit einer Stichprobe Ihrer Daten. Dies geschieht im Hintergrund, wenn Sie die
PREPARE-Anweisung mit derai.if()-Funktion verwenden, um das Modell für optimierte Abfragen zu trainieren. - Führt die Abfrage aus: Wenn Sie die
EXECUTE-Anweisung verwenden, verarbeitet AlloyDB die Abfrage lokal mit dem trainierten Proxy-Modell. - Rückgriff auf das LLM: Wenn die Genauigkeit des Modells gering ist oder AlloyDB kein Modell finden kann, greift AlloyDB automatisch auf das LLM zurück.

Hinweis
Bevor Sie die optimierten Funktionen verwenden, müssen Sie Folgendes tun:
- Stellen Sie mit psql oder AlloyDB Studio eine Verbindung zu Ihrer Datenbank als
postgres-Nutzer oder als Nutzer her, der Zugriff auf die Tabelle hat, in der sich die Daten befinden. Prüfen Sie, ob die
google_ml_integration-Erweiterung installiert ist und in Version 1.5.8 oder höher verfügbar ist.SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.5.8 (1 row)Konfigurieren Sie AlloyDB für die Verwendung mit Vertex AI. Weitere Informationen finden Sie unter Datenbank in Vertex AI einbinden.
Prüfen Sie, ob die folgenden Datenbank-Flags aktiviert sind. Weitere Informationen finden Sie unter Datenbank-Flags einer Instanz konfigurieren.
google_ml_integration.enable_model_supportgoogle_ml_integration.enable_ai_query_enginegoogle_ml_integration.enable_cost_optimized_ai_functions
Generieren Sie Einbettungen für die Tabelle, die Sie abfragen möchten. Weitere Informationen finden Sie unter Automatische Einbettungen für Tabellen generieren und verwalten.
Berücksichtige Folgendes:
- Die Spalte mit den Quelldaten muss vom Typ
TEXToderVARCHARsein. - Die Spalte mit den Einbettungen, die als Eingabe für die optimierte KI-Funktion dienen, muss vom Typ
REAL[]oderVECTORsein. - Optimierte Funktionen sind nur in Regionen verfügbar, in denen generative Modelle von Vertex AI verfügbar sind. Eine Liste der verfügbaren Regionen finden Sie unter Standorte für generative KI.
- Die Spalte mit den Quelldaten muss vom Typ
Optimierte Funktionen verwenden
Um eine optimierte Funktion zu verwenden, verwenden Sie die Anweisungen PREPARE und EXECUTE mit der Funktion ai.if(). Im Folgenden finden Sie ein Beispiel für die Verwendung einer optimierten Funktion:
Erstellen Sie eine
restaurant_reviews-Tabelle. Die Spaltereview, die die Quelldaten enthält, hat den TypTEXT, und die Spaltereview_embedding, die für Abfragen verwendet wird, hat den TypVECTOR(768).CREATE TABLE restaurant_reviews ( id SERIAL, name VARCHAR(64), city VARCHAR(64), review TEXT, review_embedding VECTOR(768) );Verwenden Sie eine
PREPARE-Anweisung mit der Funktionai.if(), um anzugeben, dass für die Abfrage eine optimierte Funktion verwendet werden muss. Diese Anweisung löst das asynchrone Training des Modells im Hintergrund aus.Das Modell wird nur unter den folgenden Bedingungen trainiert:
- Die Abfrage enthält genau eine
ai.if()-Funktion. ai.if()befindet sich nicht in einer Unterabfrage.
PREPARE positive_reviews_query AS SELECT r.name, r.city FROM restaurant_reviews r WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding) GROUP BY r.name, r.city HAVING COUNT(*) > 500;- Die Abfrage enthält genau eine
Führen Sie die Abfrage mit der Anweisung
EXECUTEaus. Da diePREPARE-Anweisung spezifisch für die aktuelle Sitzung ist, müssen Sie dieEXECUTE-Anweisung für dieselbe Verbindung ausführen:EXECUTE positive_reviews_query;conn2=> SELECT r.name, r.city FROM restaurant_reviews r WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding) GROUP BY r.name, r.city HAVING COUNT(*) > 500;Das trainierte Proxy-Modell wird nicht verwendet, wenn eine der folgenden Bedingungen erfüllt ist:
- Der Inhalt oder die Einbettungsspalte, auf die in
ai.if()verwiesen wird, ändert sich. Beide Spalten müssen zur selben Tabelle gehören. - Die Eingabeaufforderung für die Inhaltsspalte ändert sich.
- Die Struktur der Abfrage ändert sich, was zu einem anderen
query_idführt. - Die Abfrage erfüllt den Schwellenwert für die Genauigkeitsprüfung zu Beginn der Abfrage nicht.
In diesen Fällen wird die Abfrage auf das LLM zurückgesetzt und AlloyDB gibt eine Warnung zurück.
- Der Inhalt oder die Einbettungsspalte, auf die in
Optional. Wenn Sie die Überprüfung der Genauigkeit für die gesamte Datenbankumgebung deaktivieren möchten, was erforderlich ist, da Genauigkeitsprüfungen auch während des Modelltrainings durchgeführt werden, führen Sie den folgenden Befehl aus.
ALTER DATABASE DATABASE_NAME SET google_ml_integration.runtime_accuracy_check = off;Ersetzen Sie
DATABASE_NAMEdurch den Namen Ihrer Datenbank.
Proxy-Modell neu trainieren
Wenn sich die zugrunde liegenden Tabellendaten erheblich ändern, können Sie das Proxymodell neu trainieren, indem Sie die PREPARE-Anweisung noch einmal ausführen. Wenn Sie eine Anfrage neu vorbereiten, wird das vorhandene Proxy-Modell ersetzt, indem eine neue Trainingsanfrage initiiert wird.
Beschränkungen
Wenn Sie die Quellinhaltsspalte, die Einbettungsspalte oder den Prompt ändern, der an die ai.if()-Funktion übergeben wird, müssen Sie eine neue PREPARE-Anweisung ausgeben.
AlloyDB trainiert die optimierte Funktion, um das Verhalten einer eindeutigen Kombination aus Prompt und Eingabedaten zu approximieren.