Abfragen mit optimierten Funktionen beschleunigen

Mit optimierten Funktionen in AlloyDB for PostgreSQL können Sie ein kleineres, schnelleres Proxy-Modell verwenden, um die meisten Ihrer SQL-Abfragen zu verarbeiten, die KI-Funktionen verwenden. Nur bei Bedarf wird auf ein größeres Large Language Model (LLM) zurückgegriffen. Dieser Ansatz reduziert die Betriebskosten und verbessert die Reaktionsfähigkeit von Abfragen, indem Remote-LLM-Aufrufe für Aufgaben zur zeilenweisen Klassifizierung oder Filterung minimiert werden.

AlloyDB-KI-Funktionen wie ai.if() können aufgrund von Remote-Aufrufen an Large Language Models (LLMs) eine hohe Latenz haben. Dieses Latenzproblem wird durch optimierte Funktionen behoben, indem kleinere, lokal trainierte Proxy-Modelle verwendet werden, um Ihre Abfragen 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. Dazu generiert AlloyDB mit dem LLM Labels für die Beispielzeilen und vergleicht sie mit den Vorhersagen des Proxy-Modells, um die Genauigkeit zu überprüfen. Wenn die Genauigkeitsprüfung fehlschlägt, wird für die Abfrage das LLM verwendet.

Wenn Sie eine optimierte Funktion verwenden, führt AlloyDB folgende Schritte aus:

  1. Proxy-Modell trainieren: AlloyDB trainiert ein einfaches Proxy-Modell mit einer Stichprobe Ihrer Daten. Dies geschieht im Hintergrund, wenn Sie die Anweisung PREPARE mit der Funktion ai.if() verwenden, um das Modell für optimierte Abfragen zu trainieren.
  2. Abfrage ausführen: Wenn Sie die Anweisung EXECUTE verwenden, verarbeitet AlloyDB die Abfrage lokal mit dem trainierten Proxy-Modell.
  3. Auf das LLM zurückgreifen: Wenn die Genauigkeit des Modells gering ist oder AlloyDB kein Modell finden kann, greift AlloyDB automatisch auf das LLM zurück.

Flussdiagramm: Optimierte Funktionen

Hinweis

Führen Sie die folgenden Schritte aus, bevor Sie die optimierten Funktionen verwenden:

  • Stellen Sie mit psql oder AlloyDB Studio als Nutzer postgres oder als Nutzer, der Zugriff auf die Tabelle mit den Daten hat, eine Verbindung zu Ihrer Datenbank her.
  • Prüfen Sie, ob die Erweiterung google_ml_integration 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 der Gemini Enterprise Agent Platform. Weitere Informationen finden Sie unter Datenbank in die Agent Platform einbinden.

  • Achten Sie darauf, dass die folgenden Datenbank-Flags aktiviert sind. Weitere Informationen finden Sie unter Datenbank-Flags einer Instanz konfigurieren.

    • google_ml_integration.enable_model_support
    • google_ml_integration.enable_ai_query_engine
    • google_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 TEXT oder VARCHAR sein.
    • Die Einbettungsspalte, die als Eingabe für die optimierte KI-Funktion dient, muss vom Typ REAL[] oder VECTOR sein.
    • Optimierte Funktionen sind nur in Regionen verfügbar, in denen generative Modelle der Agent Platform verfügbar sind. Eine Liste der verfügbaren Regionen finden Sie unter Bereitstellungen und Endpunkte.

Optimierte Funktionen verwenden

Verwenden Sie die Anweisungen PREPARE und EXECUTE mit der Funktion ai.if(), um eine optimierte Funktion zu verwenden. Im Folgenden sehen Sie ein Beispiel für die Verwendung einer optimierten Funktion:

  1. Erstellen Sie eine Tabelle restaurant_reviews. Die Spalte review mit den Quelldaten ist vom Typ TEXT und die Spalte review_embedding, die für Abfragen verwendet wird, ist vom Typ VECTOR(768).

    CREATE TABLE restaurant_reviews (
        id SERIAL,
        name VARCHAR(64),
        city VARCHAR(64),
        review TEXT,
        review_embedding VECTOR(768)
    );
    
  2. Verwenden Sie eine Anweisung PREPARE mit der Funktion ai.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 Funktion ai.if().
    • 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;
    
  3. Führen Sie die Abfrage mit der Anweisung EXECUTE aus. Da die Anweisung PREPARE spezifisch für die aktuelle Sitzung ist, müssen Sie die Anweisung EXECUTE 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:

    • Die in ai.if() referenzierte Spalte für Inhalte oder Einbettungen ändert sich. Beide Spalten müssen zur selben Tabelle gehören.
    • Der Prompt, der für die Spalte mit den Inhalten bereitgestellt wird, ändert sich.
    • Die Struktur der Abfrage ändert sich, was zu einer anderen query_id führt.
    • Die Abfrage erfüllt zu Beginn der Abfrage den Schwellenwert für die Genauigkeitsprüfung nicht.

    In diesen Fällen wird für die Abfrage das LLM verwendet und AlloyDB gibt eine Warnung zurück.

  4. Optional. Wenn Sie die Genauigkeitsprüfung 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_NAME durch den Namen Ihrer Datenbank.

Proxy-Modell neu trainieren

Wenn sich die zugrunde liegenden Tabellendaten erheblich ändern, können Sie das Proxy-Modell neu trainieren, indem Sie die Anweisung PREPARE noch einmal ausführen. Wenn Sie eine Abfrage neu vorbereiten, wird das vorhandene Proxy-Modell ersetzt, indem eine neue Trainingsanfrage initiiert wird.

Beschränkungen

Wenn Sie die Spalte mit den Quellinhalten, die Einbettungsspalte oder den Prompt ändern, der für die Funktion ai.if() bereitgestellt wird, müssen Sie eine neue Anweisung PREPARE ausgeben. AlloyDB trainiert die optimierte Funktion, um das Verhalten einer eindeutigen Kombination aus Prompt und Eingabedaten zu approximieren.

Nächste Schritte