פונקציות AI ב-AlloyDB משלבות מודלים גדולים של שפה (LLM) כמו Gemini ישירות עם נתונים ב-AlloyDB ל-PostgreSQL כדי לבצע פעולות חכמות על הנתונים. התכונה הזו כוללת פונקציות מובנות לפעולות הבאות:
- סינון (
ai.if) - דירוג סמנטי (
ai.rank) - יצירת טקסט (
ai.generate)
הפונקציות האלה של AI משתמשות במנוע השאילתות של AlloyDB AI כדי לעזור לאפליקציה שלכם לעבד נתונים באמצעות מודלים של בינה מלאכותית במגוון היקפים, החל מתשובות של שורה אחת ועד לפעולות במסדי נתונים בהיקף גדול. אפשר להשתמש באופרטורים ai.if, ai.rank ו-ai.generate כדי לשלב שפה טבעית עם שאילתות SQL. AlloyDB AI שומר ויוצר את הסכימה ai.
יש שלוש קטגוריות של פונקציות AI, ששונות זו מזו באופן הטיפול בנתוני הקלט ובהקצאת הזיכרון: פונקציות סקלריות, פונקציות מבוססות-מערך ופונקציות סמן. בחירת פונקציית ה-AI הנכונה תלויה בהיקף הנתונים ובדרישות הביצועים שלכם. בטבלה הבאה מפורטות הפונקציות האלה והתרחישים לדוגמה לשימוש בהן:
קטגוריה |
תיאור |
תרחיש מומלץ לשימוש |
סקלר |
מיועד לעיבוד בסיסי של נתונים אחד-על-אחד. מקבלת קלט יחיד ומחזירה פלט יחיד. |
השימוש בפונקציה הזו מתאים כשרוצים פונקציה בסיסית שמספקת ביצועים סבירים לשאילתות שמבצעות מספר קטן – פחות מ-50 – של קריאות לפונקציות סקלריות. |
מבוסס מערך |
מעבדת נתונים כמערך של שורות בקשה להפעלת פונקציה אחת. מקבלת מערך כקלט ומחזירה מערך כפלט. |
השימוש מתאים למערכי נתונים קטנים עד בינוניים, שבהם כל מערך השורות שעומדות בדרישות יכול להיכנס למגבלות הזיכרון. התכונה הזו מספקת תפוקה גבוהה לפעולות שמבוססות על קבוצות. |
סמן |
מקבלת סמן כקלט ומחזירה סמן כפלט. |
השימוש באפשרות הזו מומלץ לעיבוד של מספר גדול של שורות – למשל, 10,000 שורות. |
לפני שמתחילים
- מוודאים שהתוסף
google_ml_integrationמותקן ושהגרסה שבה אתם משתמשים היא 1.5.2 ואילך. כדי ליהנות מיתרונות נוספים בביצועים של פונקציות מבוססות מערך, צריך להשתמש בגרסה 1.5.4 ואילך. - מוודאים שהדגל
google_ml_integration.enable_ai_query_engineמוגדר לערךon. - שילוב עם Vertex AI.
- משתמשים במודל Gemini שנתמך באזור שלכם. Gemini 2.5 Flash Lite הוא מודל ברירת המחדל של מנוע השאילתות מבוסס ה-AI. אם לא מציינים מודל Gemini בשאילתה, מנוע השאילתות של ה-AI בוחר את מודל ברירת המחדל עבור השאילתות.
אינטגרציה עם Vertex AI והתקנת התוסף
- הגדרת גישת משתמשים למודלים של Vertex AI.
- מוודאים שהגרסה העדכנית של
google_ml_integrationמותקנת.כדי לבדוק את הגרסה המותקנת, מריצים את הפקודה הבאה:
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.5.2 (1 row)
אם התוסף לא מותקן או אם הגרסה המותקנת קודמת לגרסה 1.5.2, צריך לעדכן את התוסף.
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;
אם נתקלתם בבעיות בהרצת הפקודות שלמעלה, או אם התוסף לא עודכן לגרסה 1.5.2 אחרי שהרצתם את הפקודות שלמעלה, פנו אל Google Cloud התמיכה.
כדי להשתמש בפונקציונליות של מנוע השאילתות של AlloyDB AI, מגדירים את הדגל
google_ml_integration.enable_ai_query_engineלערךon.SQL
- הפעלת מנוע השאילתות מבוסס-AI בסשן הנוכחי.
SET google_ml_integration.enable_ai_query_engine = on;
- הפעלה של תכונות למסד נתונים ספציפי בסשנים שונים.
ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_ai_query_engine = 'on';
- הפעלת מנוע השאילתות מבוסס ה-AI למשתמש ספציפי בסשנים ובמסדי נתונים.
ALTER ROLE postgres SET google_ml_integration.enable_ai_query_engine = 'on';
המסוף
כדי לשנות את הערך של הדגל
google_ml_integration.enable_ai_query_engine, פועלים לפי השלבים במאמר הגדרת דגלים של מסד נתונים במופע.gcloud
כדי להשתמש ב-CLI של gcloud, אפשר להתקין ולהפעיל את Google Cloud CLI, או להשתמש ב-Cloud Shell.
אפשר לשנות את הערך של הדגל
google_ml_integration.enable_ai_query_engine. מידע נוסף זמין במאמר הגדרת דגלים של מסד נתונים במופע.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
- הפעלת מנוע השאילתות מבוסס-AI בסשן הנוכחי.
שימוש במודל Gemini שנתמך באזור שלכם
אם אשכול AlloyDB ל-PostgreSQL נמצא באזור שבו אין תמיכה ב-gemini-2.5-flash-lite, אפשר להשתמש באחד מהמודלים האחרים של Gemini שזמינים באזור באמצעות model_id parameter.
לחלופין, אפשר לרשום נקודת קצה של מודל Gemini ולספק את מזהה המודל הזה למפעילי ה-AI. מידע נוסף זמין במאמר רישום של מודלים מרוחקים של AI וקריאה להם באמצעות ניהול נקודות קצה של מודלים.
בדוגמה הבאה אפשר לראות איך רושמים עוד נקודת קצה של Gemini. בדוגמה הזו, נקודת הקצה השנייה של Gemini היא נקודת הקצה הגלובלית של gemini-2.5-flash-lite. כדי להשתמש במודל הרשום הזה עם אופרטורים של AI, צריך להעביר את model_id => 'gemini-2.5-flash-lite-global' כארגומנט נוסף.
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
חלק מהמודלים של Gemini, כמו gemini-3.0-pro-preview, זמינים רק דרך נקודת הקצה הגלובלית. כדי לרשום מודלים כאלה, צריך:
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'
);
מחליפים את PROJECT_ID במזהה הפרויקט שבו זמין מודל Vertex AI. שימו לב שלחשבון השירות של AlloyDB צריך להיות התפקיד Vertex AI User בפרויקט הזה.
אחרי שרושמים את המודל, אפשר להשתמש בו בפונקציות AI באופן הבא:
SELECT ai.generate(prompt => 'What is AlloyDB?', model_id => 'gemini-3-preview-model');
שימוש במסננים בשאילתות
AlloyDB AI מציע פונקציות SQL מבוססות-AI שמאפשרות לכם:
להשתמש בעיבוד שפה טבעית ובמודלים גדולים של שפה (LLM) ישירות בשאילתות במסד הנתונים, כולל האופרטורים ai.if ו-ai.rank.
ביצוע סינון באמצעות פונקציות סקלריות
כדי להעריך אם תנאי שצוין בשפה טבעית מתקיים, משתמשים באופרטור ai.if/google_ml.if. הפונקציה מחזירה ערך בוליאני true או false, ומחזירה false אם הפלט לא מזוהה בבירור.
- Function signature
FUNCTION ai.if(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS bool
בדוגמה הבאה מוצג שימוש באופרטור ai.if כמסנן כדי למצוא מסעדות עם יותר מ-500 ביקורות חיוביות שממוקמות בערים עם אוכלוסייה של יותר מ-100,000 תושבים. בדוגמה נעשה שימוש ב-restaurant_reviews והיא מכילה נתונים כמו ביקורות ומיקום העיר. האופרטור ai.if עוזר לכם להבין את הסנטימנט של הביקורת ולשלב את המיקומים ממסד הנתונים עם הידע הכללי של Gemini על האוכלוסייה במיקומים האלה.
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;
בדוגמה הבאה מוצג אותו תרחיש שימוש באמצעות המודל שרשמתם במאמר שימוש במודל Gemini שנתמך באזור שלכם.
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;
ביצוע הצטרפות לשאילתה שמשתמשת באופרטור if
כדי לבצע פעולת איחוד, משתמשים באופרטור ai.if/google_ml.if עם join.
בדוגמה הבאה של שאילתה מוצג מספר הביקורות שבהן מוזכר כל פריט בתפריט של המסעדה.
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;
ביצוע סינון באמצעות פונקציות מבוססות מערך
בדוגמה הבאה אנחנו מזהים מסעדות עם יותר מ-10 ביקורות חיוביות באמצעות מודל AI (gemini-2.5-flash-lite) לניתוח הסנטימנט של הביקורות ולסינון התוצאות. ARRAY_AGG משמש להמרת שורות נתונים בודדות למערכים מובְנים, כדי שאפשר יהיה לעבד אותן על ידי מודל ה-AI בכמות גדולה ולא שורה אחת בכל פעם.
WITH initial_arrays AS (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;
ביצוע סינון באמצעות סמנים
בדוגמה הבאה מוצג סינון של קבוצה גדולה של ביקורות על מסעדות באמצעות העברה שלהן בסטרימינג דרך סמן.
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 $$;
יצירת טקסט וסיכום מסמכים
AlloyDB AI מציע אופרטורים ליצירת טקסט כמו סקלר ai.generate, אופרטורים מבוססי-מערך ואופרטורים מבוססי-סמן ai.generate.
ביצוע יצירת טקסט באמצעות פונקציות סקלריות
הפונקציה ai.generate יוצרת טקסט על ידי שילוב של נתונים שסופקו עם הבקשה של המשתמש.
-- Function Signature
FUNCTION ai.generate(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS TEXT
לדוגמה, אפשר להשתמש בשאילתה הבאה כדי ליצור סיכום תמציתי של כל ביקורת משתמשים.
SELECT
ai.generate(
prompt => 'Summarize the review in 20 words or less. Review: ' || review) AS review_summary
FROM user_reviews;
ביצוע יצירת טקסט באמצעות פונקציות מבוססות מערך
השאילתה הבאה משתמשת בפונקציות UNNEST ו-ai.generate כדי לסכם כמה ביקורות בצורה יעילה.
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;
יצירת טקסט באמצעות סמנים
כדי ליצור סיכומים או תרגומים למיליוני שורות בלי להגיע למגבלות זיכרון, אפשר להשתמש ביצירת אצווה עם סמני מיקום.
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 $$;
הוספת ניקוד לתוצאות של שאילתות
אם אתם צריכים למיין את תוצאות השאילתה באמצעות הוראות מותאמות אישית בשפה טבעית, אתם יכולים להשתמש באופרטור ai.rank.
ביצוע ניקוד באמצעות פונקציות סקלריות
הפונקציה הבאה מאפשרת לספק הנחיה שמתארת את קריטריוני הדירוג ומחזירה ציון לכל פריט.
-- Function signature
FUNCTION ai.rank(prompt TEXT, model_id VARCHAR(100) DEFAULT NULL) RETURNS real
לדוגמה, השאילתה הבאה מחזירה את 20 הביקורות הכי חיוביות על מסעדות, באמצעות ציונים מ-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;
ביצוע ניקוד באמצעות פונקציות שמבוססות על מערכים
הפונקציה ai.rank מאפשרת לכם לתת ניקוד לתוצאות של שאילתות ולדרג אותן על סמך הוראות מותאמות אישית בשפה טבעית.
FUNCTION ai.rank(prompts TEXT[], model_id VARCHAR(100) DEFAULT NULL) RETURNS real[]
השאילתה הבאה משתמשת ב-UNNEST וב-ai.rank כדי לתת ציון לכמה ביקורות בצורה יעילה.
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;
ביצוע ניקוד באמצעות סמנים
הפונקציה הזו משמשת לניקוד מערכי נתונים גדולים בלי להגיע למגבלות הזיכרון.
FUNCTION ai.rank(context TEXT, input_cursor REFCURSOR, model_id VARCHAR(100) DEFAULT NULL) RETURNS REFCURSOR
בדוגמה הבאה אפשר לראות איך מקבלים ניקוד של כמויות גדולות של טקסט לפי קריטריונים ספציפיים של שפה טבעית.
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 $$;