AlloyDB AI-Funktionen integrieren Large Language Models (LLMs) wie Gemini direkt in Ihre AlloyDB for PostgreSQL-Daten, um intelligente Datenoperationen auszuführen. Diese Funktion umfasst integrierte Funktionen für Folgendes:
- Filtern (
ai.if) - Semantische Rangfolge (
ai.rank) - Textgenerierung (
ai.generate)
Diese KI-Funktionen verwenden die AlloyDB AI-Abfrage-Engine, um Ihre Anwendung bei der Verarbeitung von Daten mit KI-Modellen in verschiedenen Größenordnungen zu unterstützen – von Antworten mit einer einzelnen Zeile bis hin zu umfangreichen Datenbankoperationen. Mit den Operatoren ai.if, ai.rank und ai.generate können Sie natürliche Sprache mit SQL-Abfragen kombinieren. AlloyDB AI reserviert und erstellt das
ai-Schema.
Es gibt drei Kategorien von KI-Funktionen, die sich darin unterscheiden, wie sie Eingabedaten und die Arbeitsspeicherzuweisung verarbeiten: Skalar-, Array-basierte und Cursor-Funktionen. Die Wahl der richtigen KI-Funktion hängt von der Größe Ihrer Daten und Ihren Leistungsanforderungen ab. In der folgenden Tabelle finden Sie Informationen zu diesen Funktionen und ihren Anwendungsfällen:
Kategorie |
Beschreibung |
Empfohlener Anwendungsfall |
Skalar |
Für die einfache 1:1-Verarbeitung konzipiert. Akzeptiert eine einzelne Eingabe und gibt eine einzelne Ausgabe zurück. |
Verwenden Sie diese Funktion, wenn Sie eine einfache Funktion benötigen, die eine akzeptable Leistung für Abfragen bietet, die eine geringe Anzahl – weniger als 50 – von Skalarfunktionsaufrufen ausführen. |
Array-basiert |
Verarbeitet Daten als Array von Zeilen in einem einzigen Funktionsaufruf. Akzeptiert ein Array als Eingabe und gibt ein Array als Ausgabe zurück. |
Verwenden Sie diese Funktion für kleine bis mittelgroße Datasets, bei denen das gesamte Array der infrage kommenden Zeilen in die Speicherlimits passt. Dies bietet einen hohen Durchsatz für setbasierte Vorgänge. |
Cursor |
Akzeptiert einen Cursor als Eingabe und gibt einen Cursor als Ausgabe zurück. |
Verwenden Sie diese Funktion, um eine große Anzahl von Zeilen zu verarbeiten,z. B. 10.000 Zeilen. |
Hinweis
- Prüfen Sie, ob die Erweiterung
google_ml_integrationinstalliert ist und ob Sie Version 1.5.2 oder höher verwenden. Wenn Sie die Leistung von Array-basierten Funktionen weiter verbessern möchten, verwenden Sie Version 1.5.4 oder höher. - Prüfen Sie, ob das Flag
google_ml_integration.enable_ai_query_engineaufongesetzt ist. - In die Gemini Enterprise Agent Platform einbinden.
- Verwenden Sie ein Gemini-Modell, das in Ihrer Region unterstützt wird. Gemini 2.5 Flash Lite ist das Standardmodell der KI-Abfrage-Engine. Wenn Sie in der Abfrage kein Gemini-Modell angeben, wird das Standardmodell der KI-Abfrage-Engine für die Abfragen ausgewählt.
In die Agent Platform einbinden und die Erweiterung installieren
- Nutzerzugriff auf Agent Platform-Modelle konfigurieren.
- Prüfen Sie, ob die neueste Version von
google_ml_integrationinstalliert ist.Führen Sie den folgenden Befehl aus, um die installierte Version zu prüfen:
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.5.2 (1 row)
Wenn die Erweiterung nicht installiert ist oder die installierte Version älter als 1.5.2 ist, aktualisieren Sie die Erweiterung.
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;
Wenn beim Ausführen der vorherigen Befehle Probleme auftreten oder die Erweiterung nach dem Ausführen der vorherigen Befehle nicht auf Version 1.5.2 aktualisiert wird, wenden Sie sich an den Google Cloud Support.
Wenn Sie die Funktion der AlloyDB AI-Abfrage-Engine verwenden möchten, setzen Sie das
google_ml_integration.enable_ai_query_engineFlag aufon.SQL
- Aktivieren Sie die KI-Abfrage-Engine für die aktuelle Sitzung.
SET google_ml_integration.enable_ai_query_engine = on;
- Aktivieren Sie Funktionen für eine bestimmte Datenbank sitzungsübergreifend.
ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_ai_query_engine = 'on';
- Aktivieren Sie die KI-Abfrage-Engine für einen bestimmten Nutzer sitzungs- und datenbankübergreifend.
ALTER ROLE postgres SET google_ml_integration.enable_ai_query_engine = 'on';
Console
Wenn Sie den Wert des Flags
google_ml_integration.enable_ai_query_engineändern möchten, folgen Sie der Anleitung unter Datenbank-Flags einer Instanz konfigurieren.gcloud
Wenn Sie die gcloud CLI verwenden möchten, können Sie die Google Cloud CLI installieren und initialisieren oder Sie können Cloud Shell verwenden.
Sie können den Wert des Flags
google_ml_integration.enable_ai_query_engineändern. Weitere Informationen finden Sie unter Datenbank-Flags einer Instanz konfigurieren.gcloud alloydb instances update INSTANCE_ID \ --database-flags google_ml_integration.enable_ai_query_engine=on \ --region=REGION_ID \ --cluster=CLUSTER_ID \ --project=PROJECT_ID
- Aktivieren Sie die KI-Abfrage-Engine für die aktuelle Sitzung.
Ein Gemini-Modell verwenden, das in Ihrer Region unterstützt wird
Wenn sich Ihr AlloyDB for PostgreSQL-Cluster in einer Region befindet, in der gemini-2.5-flash-lite
nicht unterstützt wird, können Sie eines der anderen verfügbaren Gemini-Modelle
in Ihrer Region mit dem model_id parameter verwenden.
Alternativ können Sie einen Gemini-Modellendpunkt registrieren und diese Modell-ID den KI-Operatoren zur Verfügung stellen. Weitere Informationen finden Sie unter Remote-KI-Modelle mit der Modellendpunktverwaltung registrieren und aufrufen.
Das folgende Beispiel zeigt, wie Sie einen anderen Gemini-Endpunkt registrieren. In diesem Beispiel ist dieser zweite Gemini-Endpunkt der globale Endpunkt für gemini-2.5-flash-lite. Sie können dieses registrierte Modell
mit KI-Operatoren verwenden, indem Sie model_id => 'gemini-2.5-flash-lite-global' als ein
zusätzliches Argument übergeben.
CALL
google_ml.create_model(
model_id => 'gemini-2.5-flash-lite-global',
model_type => 'llm',
model_provider => 'google',
model_qualified_name => 'gemini-2.5-flash-lite',
model_request_url => 'https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-2.5-flash-lite:generateContent',
model_auth_type => 'alloydb_service_agent_iam'
);
Gemini 3.0-Modelle verwenden
Einige Gemini-Modelle wie gemini-3.0-pro-preview sind nur über den globalen Endpunkt verfügbar. Sie müssen solche Modelle so registrieren:
CALL
google_ml.create_model(
model_id => 'gemini-3-preview-model',
model_request_url => 'https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3-pro-preview:generateContent',
model_qualified_name => 'gemini-3-pro-preview',
model_provider => 'google',
model_type => 'llm',
model_auth_type => 'alloydb_service_agent_iam'
);
Ersetzen Sie PROJECT_ID durch die ID des Projekts, in dem das Agent Platform-Modell verfügbar ist. Das
AlloyDB-Dienstkonto muss in
diesem Projekt die Rolle „Vertex AI-Nutzer“ haben.
Nachdem Sie das Modell registriert haben, können Sie es so in KI-Funktionen verwenden:
SELECT ai.generate(prompt => 'What is AlloyDB?', model_id => 'gemini-3-preview-model');
Filter in Abfragen verwenden
AlloyDB AI bietet KI-basierte SQL-Funktionen, mit denen Sie die Verarbeitung natürlicher Sprache und LLMs direkt in Ihren Datenbankabfragen verwenden können, einschließlich der Operatoren ai.if und ai.rank.
Mit Skalarfunktionen filtern
Verwenden Sie den Operator ai.if/google_ml.if, um zu prüfen, ob eine in natürlicher Sprache angegebene Bedingung erfüllt ist. Die Funktion gibt einen booleschen Wert zurück: „true“ oder „false“. Wenn die Ausgabe nicht eindeutig erkannt wird, wird false zurückgegeben.
- Function signature
FUNCTION ai.if(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS bool
Das folgende Beispiel zeigt die Verwendung des Operators ai.if als Filter,um Restaurants mit mehr als 500 positiven Bewertungen in Städten mit mehr als 100.000 Einwohnern zu finden. Das Beispiel verwendet restaurant_reviews und enthält Daten wie Bewertungen und den Standort der Stadt. Mit dem Operator ai.if können Sie die Stimmung in der Bewertung analysieren und die Standorte aus der Datenbank mit dem allgemeinen Wissen von Gemini über die Bevölkerung an diesen Standorten kombinieren.
SELECT r.name, r.location_city
FROM restaurant_reviews r
WHERE
AI.IF(r.location_city || ' has a population OF more than 100,000 AND the following is a positive review; Review: ' || r.review)
GROUP BY r.name, r.location_city
HAVING COUNT(*) > 500;
Im Folgenden sehen Sie dasselbe Beispiel mit dem Modell, das Sie unter Ein Gemini-Modell verwenden, das in Ihrer Region unterstützt wird registriert haben.
SELECT r.name, r.location_city
FROM restaurant_reviews r
WHERE
AI.IF(r.location_city || ' has a population of more than 100,000 AND the following is a positive review; Review: ' || r.review, model_id => 'gemini-2.5-flash-lite')
GROUP BY r.name, r.location_city
HAVING COUNT(*) > 500;
Join für eine Abfrage ausführen, die den Operator „if“ verwendet
Verwenden Sie den Operator ai.if/google_ml.if mit „join“, um einen Join-Vorgang auszuführen.
Die folgende Beispielabfrage ermittelt die Anzahl der Bewertungen, in denen die einzelnen Menüpunkte aus der Speisekarte des Restaurants erwähnt werden.
SELECT item_name, COUNT(*)
FROM menu_items JOIN user_reviews
ON ai.if(
prompt => 'Does the following user review talk about the menu item mentioned ? review: ' || user_reviews.review_text || ' menu item: ' || item_name)
GROUP BY item_name;
Mit Array-basierten Funktionen filtern
Im folgenden Beispiel werden Restaurants mit mehr als 10 positiven Bewertungen ermittelt, indem ein KI-Modell (gemini-2.5-flash-lite) verwendet wird, um die Stimmung in den Bewertungen zu analysieren und die Ergebnisse zu filtern. ARRAY_AGG wird verwendet, um einzelne Datenzeilen in strukturierte Arrays umzuwandeln, damit sie vom KI-Modell in großen Mengen und nicht zeilenweise verarbeitet werden können.
WITH initial_arrays AS (
SELECT
ARRAY_AGG(r.id ORDER BY r.id) AS review_ids,
-- Assuming ai.if takes an array of prompts and returns a boolean array
ai.if(
prompts => ARRAY_AGG('Is the review positive: ' || r.review ORDER BY r.id),
model_id => 'gemini-2.5-flash-lite',
batch_size => 20
) AS truth_values
FROM restaurant_reviews r
),
reviews AS (
SELECT
initial_arrays.review_ids[i] AS review_id,
initial_arrays.truth_values[i] AS truth_value
FROM
initial_arrays,
generate_series(1, array_length(initial_arrays.review_ids, 1)) AS i
)
SELECT rest_review.city, rest_review.name
FROM restaurant_reviews rest_review JOIN reviews review ON rest_review.id=review.review_id
WHERE review.truth_value = 't'
GROUP BY rest_review.city, rest_review.name
HAVING COUNT(*) > 10;
Mit Cursors filtern
Das folgende Beispiel zeigt, wie Sie eine große Anzahl von Restaurantbewertungen filtern, indem Sie sie über einen Cursor streamen.
CREATE TABLE filtered_results(input text, result bool);
DO $$
DECLARE
prompt_cursor REFCURSOR;
result_cursor REFCURSOR;
rec RECORD;
BEGIN
-- 1. Open a cursor for the input data
OPEN prompt_cursor FOR
SELECT r.location_city || ' has a population of > 100,000 and is a positive review; Review: ' || r.review
FROM restaurant_reviews r;
-- 2. Call the array-based function using the input cursor
result_cursor := ai.if(
'Is the given statement true? ',
prompt_cursor,
model_id => 'gemini-2.5-flash-lite'
);
-- 3. Fetch results from the output cursor and store them
LOOP
FETCH result_cursor INTO rec;
EXIT WHEN NOT FOUND;
INSERT INTO filtered_results VALUES(rec.input, rec.output);
END LOOP;
CLOSE result_cursor;
END $$;
Textgenerierung und -zusammenfassung
AlloyDB AI bietet Operatoren zur Textgenerierung wie die Skalarfunktion ai.generate und die Array- und Cursor-basierten Funktionen ai.generate.
Mit Skalarfunktionen Text generieren
Die Funktion ai.generate erstellt Text, indem sie die bereitgestellten Daten mit dem Prompt des Nutzers kombiniert.
-- Function Signature
FUNCTION ai.generate(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS TEXT
Mit der folgenden Abfrage können Sie beispielsweise eine kurze Zusammenfassung jeder Nutzerbewertung erstellen.
SELECT
ai.generate(
prompt => 'Summarize the review in 20 words or less. Review: ' || review) AS review_summary
FROM user_reviews;
Mit Array-basierten Funktionen Text generieren
Die folgende Abfrage verwendet UNNEST und ai.generate, um mehrere Bewertungen effizient zusammenzufassen.
SELECT
UNNEST(
ai.generate(
prompts => ARRAY_AGG('Summarize the review in 20 words or less. Review: ' || review),
model_id => 'gemini-2.5-flash-lite',
)
) AS review_summary
FROM user_reviews;
Mit Cursors Text generieren
Wenn Sie Zusammenfassungen oder Übersetzungen für Millionen von Zeilen erstellen möchten, ohne an Speicherengpässe zu stoßen, verwenden Sie die Batchgenerierung mit Cursors.
CREATE TABLE summary_results(summary text);
DO $$
DECLARE
prompt_cursor REFCURSOR;
summary_cursor REFCURSOR;
rec RECORD;
BEGIN
OPEN prompt_cursor FOR SELECT review_text FROM user_reviews ORDER BY id;
summary_cursor := ai.generate(
'Summarize the review in 20 words or less. Review:',
prompt_cursor,
);
LOOP
FETCH summary_cursor INTO rec;
EXIT WHEN NOT FOUND;
INSERT INTO summary_results VALUES(rec.output);
END LOOP;
CLOSE summary_cursor;
END $$;
Abfrageergebnisse bewerten
Wenn Sie Abfrageergebnisse mit benutzerdefinierten Anweisungen in natürlicher Sprache sortieren müssen, verwenden Sie den Operator ai.rank.
Mit Skalarfunktionen bewerten
Mit der folgenden Funktion können Sie einen Prompt angeben, der die Rankingkriterien beschreibt, und für jedes Element eine Bewertung zurückgeben.
-- Function signature
FUNCTION ai.rank(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS real
Die folgende Abfrage ruft beispielsweise die 20 positivsten Restaurantbewertungen ab und verwendet dabei Bewertungen aus einem LLM.
SELECT review AS top20
FROM user_reviews
ORDER BY ai.rank(
'Score the following review according to these rules:
(1) Score OF 8 to 10 IF the review says the food IS excellent.
(2) 4 to 7 IF the review says the food is ok.
(3) 1 to 3 IF the review says the food is not good. Here is the review:' || review) DESC
LIMIT 20;
Mit Array-basierten Funktionen bewerten
Mit dieser Funktion ai.rank können Sie Abfrageergebnisse anhand benutzerdefinierter Anweisungen in natürlicher Sprache bewerten und einstufen.
FUNCTION ai.rank(prompts TEXT[], model_id VARCHAR(100) DEFAULT NULL) RETURNS real[]
Die folgende Abfrage verwendet UNNEST und ai.rank, um mehrere Bewertungen effizient zu bewerten.
SELECT
UNNEST(
ai.rank(
ARRAY_AGG('Score the following review according to these rules:
(1) Score OF 8 to 10 IF the review says the food IS excellent.
(2) 4 to 7 IF the review says the food is ok.
(3) 1 to 3 IF the review says the food is not good. Here is the review:' || review),
)
) as review_scores
FROM user_reviews;
Mit Cursors bewerten
Diese Funktion wird verwendet, um große Datasets zu bewerten, ohne an Speicherlimits zu stoßen.
FUNCTION ai.rank(context TEXT, input_cursor REFCURSOR, model_id VARCHAR(100) DEFAULT NULL) RETURNS REFCURSOR
Das folgende Beispiel zeigt, wie Sie große Textmengen anhand bestimmter Kriterien in natürlicher Sprache bewerten.
CREATE TABLE scored_results(input text, score real);
DO $$
DECLARE
prompt_cursor REFCURSOR;
score_cursor REFCURSOR;
rec RECORD;
BEGIN
OPEN prompt_cursor FOR SELECT review FROM user_reviews ORDER BY id;
score_cursor := ai.rank(
'Score the following review: (1) 8-10 if excellent, (2) 4-7 if ok, (3) 1-3 if not good. Review:',
prompt_cursor,
);
LOOP
FETCH score_cursor INTO rec;
EXIT WHEN NOT FOUND;
INSERT INTO scored_results VALUES(rec.input, rec.output);
END LOOP;
CLOSE score_cursor;
END $$;