Mit der Erweiterung google_ml_integration in AlloyDB for PostgreSQL können Sie Texteinbettungen direkt in SQL generieren, indem Sie Funktionen in den Schemas public und google_ml verwenden. Sie können die Funktion embedding() im Schema public mit jedem Einbettungsmodell der Gemini Enterprise Agent Platform aufrufen, ohne einen Endpunkt zu registrieren. Wenn Sie benutzerdefinierte Parameter wie Aufgabentypen übergeben oder Drittanbietermodelle verwenden möchten, registrieren Sie den Modellendpunkt und rufen Sie die Funktion google_ml.embedding() im Schema google_ml auf.
So funktionieren Einbettungen
Stellen Sie sich eine Datenbank vor, die auf AlloyDB ausgeführt wird und die folgenden Merkmale aufweist:
Die Datenbank enthält eine Tabelle,
items. Jede Zeile in dieser Tabelle beschreibt einen Artikel, den Ihr Unternehmen verkauft.Die Tabelle
itemsenthält die Spaltecomplaints. In dieserTEXT-Spalte werden Käuferbeschwerden gespeichert, die zu den einzelnen Artikeln in Logs erfasst werden.Die Datenbank kann in den Model Garden eingebunden werden und ermöglicht so Zugriff auf die englischsprachigen
gemini-embedding-001-Modelle.
In dieser Datenbank werden zwar Beschwerden zu Artikeln gespeichert, diese Beschwerden werden jedoch als Nur-Text gespeichert, was die Abfrage erschwert. Wenn Sie beispielsweise sehen möchten, welche Artikel die meisten Beschwerden von Kunden haben, die eine falsche Farbversion erhalten haben, können Sie normale SQL-Abfragen auf der Tabelle ausführen und nach verschiedenen Schlüsselwortübereinstimmungen suchen. Bei diesem Ansatz werden jedoch nur Zeilen berücksichtigt, die genau diese Keywords enthalten.
Eine einfache SQL-Abfrage wie SELECT * FROM item WHERE complaints LIKE
"%wrong color%" gibt beispielsweise keine Zeile zurück, in der das Feld complaints nur
The picture shows a blue one, but the one I received was red enthält.
SQL-Abfragen mit LLM-basierten Einbettungen können dazu beitragen, semantisch ähnliche Antworten für solche Abfragen zurückzugeben. Wenn Sie Einbettungen anwenden, können Sie die Tabelle in diesem Beispiel nach Elementen abfragen, in denen Beschwerden eine semantische Ähnlichkeit mit einem bestimmten Text-Prompt haben, beispielsweise: It was the
wrong color.
Wählen Sie für die grundlegende Einbettungsgenerierung eines der folgenden Schemas aus.
Hinweis
So lassen Sie AlloyDB Einbettungen generieren:
Stellen Sie mit
psqloder AlloyDB Studio alspostgres-Nutzer eine Verbindung zu Ihrer Datenbank her.Prüfen Sie, ob die Erweiterung
google_ml_integrationinstalliert ist.Führen Sie den folgenden Befehl aus, um die Version Ihrer Erweiterung zu prüfen:
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';Wenn Sie die Erweiterung aktualisieren müssen, verwenden Sie den Befehl
ALTER EXTENSION google_ml_integration UPDATE;.Bevor Sie Einbettungen aus einer AlloyDB-Datenbank generieren können, müssen Sie AlloyDB für die Verwendung mit der Agent Platform konfigurieren. Weitere Informationen finden Sie unter Datenbank in die Agent Platform einbinden.
Datenbanknutzern Berechtigungen zum Generieren von Einbettungen erteilen.
Wenn Sie
psqlverwenden, stellen Sie eine Verbindung zu der Datenbank her, für die Sie Berechtigungen gewähren möchten:\c DB_NAME GRANT EXECUTE ON FUNCTION embedding TO "USER_NAME";Ersetzen Sie Folgendes:
DB_NAME: der Name der Datenbank, für die Sie Berechtigungen gewähren möchten.USER_NAME: der Name des Nutzers, dem Sie Berechtigungen gewähren möchten.
Wenn Sie AlloyDB Studio verwenden, wählen Sie in der Liste Datenbank den Namen der Datenbank aus, für die Sie Berechtigungen gewähren möchten. Erteilen Sie dem Nutzer die Berechtigung
EXECUTEfür die Funktiongoogle_ml.embedding:GRANT EXECUTE ON FUNCTION google_ml.embedding TO "USER_NAME";Ersetzen Sie
USER_NAMEdurch den Namen des Nutzers, dem Sie Berechtigungen gewähren möchten.
Einbettungen generieren
Verwenden Sie die SQL-Funktion google_ml.embedding(), um Texteinbettungsmodelle aufzurufen.
Führen Sie die folgende Abfrage aus, um das Modell aufzurufen und Einbettungen zu generieren:
SELECT
google_ml.embedding(
model_id => 'MODEL_ID',
content => 'CONTENT');
Ersetzen Sie Folgendes:
MODEL_ID: die qualifizierte Modell-ID, z. B.gemini-embedding-001.CONTENT: Der Text, der in eine Vektoreinbettung übersetzt werden soll.
Beispiele für das Generieren von Einbettungen
In diesem Abschnitt finden Sie einige Beispiele für das Generieren von Einbettungen mit registrierten Modellendpunkten.
Gemini-Einbettungsmodelle
Führen Sie die folgende Anweisung aus, um Einbettungen für einen registrierten gemini-embedding-001-Modellendpunkt zu generieren:
SELECT
google_ml.embedding(
model_id => 'gemini-embedding-001',
content => 'AlloyDB is a managed, cloud-hosted SQL database service');
Wenn sich Ihr AlloyDB-Cluster und der Gemini Enterprise Agent Platform-Endpunkt in verschiedenen Projekten befinden, gehen Sie so vor:
Führen Sie die folgende
CALL-Anweisung aus.CALL google_ml.create_model( model_id => 'gemini-embedding-001', model_request_url => 'https://REGION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/gemini-embedding-001:predict', model_provider => 'google', model_type => 'text_embedding', model_auth_type => 'alloydb_service_agent_iam', model_in_transform_fn => 'google_ml.vertexai_text_embedding_input_transform', model_out_transform_fn => 'google_ml.vertexai_text_embedding_output_transform' );Führen Sie die folgende Anweisung aus, um Einbettungen für einen registrierten
gemini-embedding-001-Modellendpunkt zu generieren:SELECT google_ml.embedding( model_id => 'gemini-embedding-001', content => 'AlloyDB is a managed, cloud-hosted SQL database service');
OpenAI-Einbettungsmodell
Führen Sie die folgende Anweisung aus, um Einbettungen für einen registrierten text-embedding-ada-002-Modellendpunkt von OpenAI zu generieren:
SELECT
google_ml.embedding(
model_id => 'text-embedding-ada-002',
content => 'e-mail spam');
Führen Sie die folgende Anweisung aus, um Einbettungen für einen registrierten text-embedding-3-small- oder text-embedding-3-large-Modellendpunkt von OpenAI zu generieren:
SELECT
google_ml.embedding(
model_id => 'text-embedding-3-small',
content => 'Vector embeddings in AI');