Abfragen mit optimierten Funktionen beschleunigen

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:

  1. Proxy-Modell trainieren: AlloyDB trainiert ein einfaches Proxy-Modell mit einer Stichprobe Ihrer Daten. Dies geschieht im Hintergrund, wenn Sie die PREPARE-Anweisung mit der ai.if()-Funktion verwenden, um das Modell für optimierte Abfragen zu trainieren.
  2. Führt die Abfrage aus: Wenn Sie die EXECUTE-Anweisung verwenden, verarbeitet AlloyDB die Abfrage lokal mit dem trainierten Proxy-Modell.
  3. 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.

Flussdiagramm der optimierten Funktionen

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_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 Spalte mit den Einbettungen, die als Eingabe für die optimierte KI-Funktion dienen, muss vom Typ REAL[] oder VECTOR sein.
    • 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.

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:

  1. Erstellen Sie eine restaurant_reviews-Tabelle. Die Spalte review, die die Quelldaten enthält, hat den Typ TEXT, und die Spalte review_embedding, die für Abfragen verwendet wird, hat den 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 PREPARE-Anweisung 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 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;
    
  3. Führen Sie die Abfrage mit der Anweisung EXECUTE aus. Da die PREPARE-Anweisung spezifisch für die aktuelle Sitzung ist, müssen Sie die EXECUTE-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_id fü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.

  4. 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_NAME durch 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.

Nächste Schritte