Einbettungen generieren

Wählen Sie eine Dokumentationsversion aus:

Auf dieser Seite erfahren Sie, wie Sie AlloyDB Omni als Tool für große Sprachmodelle (LLMs) verwenden und Vektoreinbettungen auf Grundlage eines LLMs generieren.

Mit AlloyDB Omni können Sie ein von Vertex AI gehostetes LLM verwenden, um einen Textstring in eine Einbettungzu übersetzen. Dabei handelt es sich um die Darstellung der semantischen Bedeutung des angegebenen Texts durch das Modell als numerischer Vektor. Weitere Informationen zur Unterstützung von Texteinbettungen durch Vertex AI finden Sie unter Texteinbettungen.

Hinweis

Damit AlloyDB Omni Einbettungen generieren kann, müssen die folgenden Anforderungen erfüllt sein:

Regionale Einschränkungen

Sie können Einbettungen in Regionen generieren, in denen Generative AI in Vertex AI verfügbar ist. Eine Liste der Regionen finden Sie unter Generative AI in Vertex AI Standorten .

Für AlloyDB Omni müssen sich sowohl der AlloyDB Omni-Cluster als auch das Vertex AI-Modell, das Sie abfragen, in derselben Region befinden.

Erforderliche Datenbankerweiterung

  • Prüfen Sie, ob die Erweiterung google_ml_integration in Ihrer AlloyDB Omni-Datenbank installiert ist.

    CREATE EXTENSION IF NOT EXISTS google_ml_integration;
    

    Diese Erweiterung ist in AlloyDB Omni enthalten. Sie können sie in jeder Datenbank in Ihrem Cluster installieren.

  • Legen Sie das Datenbank-Flag google_ml_integration.enable_model_support auf off fest.

Modellzugriff einrichten

Bevor Sie Einbettungen aus einer AlloyDB Omni-Datenbank generieren können, müssen Sie AlloyDB Omni für die Verwendung mit einem Texteinbettungsmodell konfigurieren.

Wenn Sie mit dem cloudbasierten Modell text-embedding-005 arbeiten möchten, müssen Sie Ihre Datenbank in Vertex AI einbinden.

Datenbanknutzern Zugriff zum Generieren von Einbettungen gewähren

Datenbanknutzern die Berechtigung zum Ausführen der Funktion embedding erteilen, um Vorhersagen auszuführen:

  1. Stellen Sie eine Verbindung von einem psql-Client zur primären Instanz des Clusters her, wie unter Verbinden eines psql-Clients mit einer Instanz beschrieben.

  2. Stellen Sie an der `psql`-Eingabeaufforderung eine Verbindung zur Datenbank her und erteilen Sie Berechtigungen:

    \c DB_NAME
    
    GRANT EXECUTE ON FUNCTION embedding TO USER_NAME;
    

    Ersetzen Sie Folgendes:

    • DB_NAME: Der Name der Datenbank, für die die Berechtigungen erteilt werden sollen

    • USER_NAME: Der Name des Nutzers, für den die Berechtigungen erteilt werden sollen

Einbettung generieren

AlloyDB Omni bietet eine Funktion, mit der Sie Text in eine Vektoreinbettung übersetzen können. Anschließend können Sie diese Einbettung als Vektordaten in Ihrer Datenbank speichern und optional pgvector-Funktionen verwenden, um Abfragen darauf zu basieren.

Verwenden Sie die Funktion embedding(), die von der Erweiterung google_ml_integration bereitgestellt wird, um eine Einbettung mit AlloyDB Omni zu generieren:

SELECT embedding( 'MODEL_IDVERSION_TAG', 'TEXT');

Ersetzen Sie Folgendes:

  • MODEL_ID: Die ID des Modells, das abgefragt werden soll.

    Wenn Sie den Vertex AI Model Garden verwenden, geben Sie text-embedding-005 als Modell-ID an. Dies sind die cloudbasierten Modelle, die AlloyDB Omni für Texteinbettungen verwenden kann. Weitere Informationen finden Sie unter Texteinbettungen.

  • Optional: VERSION_TAG: das Versions-Tag des abzufragenden Modells. Stellen Sie @ dem Tag voran.

    Wenn Sie eines der text-embedding englischen Modelle mit Vertex AI verwenden, geben Sie eines der Versionstags an, z. B. text-embedding-005, das unter Modellversionen aufgeführt ist.

    Google empfiehlt dringend, immer das Versions-Tag anzugeben. Wenn Sie das Versions-Tag nicht angeben, verwendet AlloyDB immer die neueste Modellversion, was zu unerwarteten Ergebnissen führen kann.

  • TEXT: Der Text, der in eine Vektoreinbettung übersetzt werden soll.

Im folgenden Beispiel wird Version 005 der englischen text-embedding-Modelle verwendet, um eine Einbettung auf Grundlage eines bereitgestellten Literalstrings zu generieren:

SELECT embedding('text-embedding-005', 'AlloyDB is a managed, cloud-hosted SQL database service.');

Einbettungen speichern

Die Einbettungen, die mit der google_ml_integration Erweiterung generiert wurden, werden als Arrays von real Werten implementiert. Diese generierten Einbettungen werden als Eingaben für pgvector-Erweiterungsfunktionen übergeben.

Fügen Sie eine real[]-Spalte hinzu, um diesen Wert in einer Tabelle zu speichern:

ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN real[DIMENSIONS];

Nachdem Sie eine Spalte zum Speichern von Einbettungen erstellt haben, können Sie sie anhand der Werte füllen, die bereits in einer anderen Spalte in derselben Tabelle gespeichert sind:

UPDATE TABLE SET EMBEDDING_COLUMN = embedding('MODEL_IDVERSION_TAG', SOURCE_TEXT_COLUMN);

Ersetzen Sie Folgendes:

  • TABLE: Der Tabellenname

  • EMBEDDING_COLUMN: Der Name der Einbettungsspalte

  • MODEL_ID: Die ID des Modells, das abgefragt werden soll.

    Wenn Sie den Vertex AI Model Garden verwenden, geben Sie text-embedding-005 als Modell-ID an. Dies sind die cloudbasierten Modelle, die AlloyDB Omni für Texteinbettungen verwenden kann. Weitere Informationen finden Sie unter Texteinbettungen.

  • Optional: VERSION_TAG: das Versions-Tag des abzufragenden Modells. Stellen Sie @ dem Tag voran.

    Wenn Sie eines der text-embedding englischen Modelle mit Vertex AI verwenden, geben Sie eines der Versionstags an, z. B. text-embedding-005, das unter Modellversionen aufgeführt ist.

    Google empfiehlt dringend, immer das Versions-Tag anzugeben. Wenn Sie das Versions-Tag nicht angeben, verwendet AlloyDB immer die neueste Modellversion, was zu unerwarteten Ergebnissen führen kann.

  • SOURCE_TEXT_COLUMN: Der Name der Spalte, in der der Text gespeichert ist, der in Einbettungen übersetzt werden soll

Sie können auch die embedding() Funktion verwenden, um den Text in einen Vektor zu übersetzen. Dazu wenden Sie den Vektor auf den pgvector-Operator für den nächsten Nachbarn, <->, an, um die Datenbankzeilen mit den semantisch ähnlichsten Einbettungen zu finden.

Da embedding() ein real-Array zurückgibt, müssen Sie den embedding()-Aufruf explizit in vector umwandeln, um diese Werte mit pgvector -Operatoren zu verwenden.

  CREATE EXTENSION IF NOT EXISTS google_ml_integration;
  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <-> embedding('MODEL_IDVERSION_TAG', 'TEXT')::vector
    LIMIT ROW_COUNT

Modellversions-Tags verwenden, um Fehler zu vermeiden

Google empfiehlt dringend, immer eine stabile Version des ausgewählten Einbettungsmodells zu verwenden. Bei den meisten Modellen bedeutet das, dass Sie explizit ein Versions-Tag festlegen müssen.

Das Aufrufen der Funktion embedding() ohne Angabe des Versions-Tags des Modells ist syntaktisch gültig, aber auch fehleranfällig.

Wenn Sie das Versions-Tag weglassen, wenn Sie ein Modell im Vertex AI Model Garden verwenden, verwendet Vertex AI die neueste Version des Modells. Dies ist möglicherweise nicht die neueste stabile Version. Weitere Informationen zu verfügbaren Vertex AI-Modellversionen finden Sie unter Modellversionen.

Eine bestimmte Vertex AI-Modellversion gibt für eine bestimmte Texteingabe immer dieselbe embedding()-Antwort zurück. Wenn Sie in Ihren Aufrufen von embedding() keine Modellversionen angeben, kann eine neue veröffentlichte Modellversion den zurückgegebenen Vektor für eine bestimmte Eingabe abrupt ändern, was zu Fehlern oder anderem unerwarteten Verhalten in Ihren Anwendungen führen kann.

Um diese Probleme zu vermeiden, geben Sie immer die Modellversion an.

Fehlerbehebung

FEHLER: Modell für model_id nicht gefunden

Fehlermeldung

Wenn Sie versuchen, eine Einbettung mit der Funktion embedding() oder google_ml.embedding() zu generieren, tritt der folgende Fehler auf:

ERROR: 'Model not found for model_id:

  • Aktualisieren Sie die Erweiterung google_ml_integration und versuchen Sie noch einmal, Einbettungen zu generieren.

    ALTER EXTENSION IF NOT EXISTS google_ml_integration UPDATE;
    

    Sie können die Erweiterung auch löschen und dann neu erstellen.

    DROP extension google_ml_integration;
    CREATE EXTENSION google_ml_integration;
    
  • Wenn Sie Einbettungen mit der Funktion google_ml.embedding() generieren, prüfen Sie, ob das Modell registriert ist und Sie die richtige model_id in der Abfrage verwenden.

Nächste Schritte