האצת שאילתות באמצעות פונקציות שעברו אופטימיזציה

פונקציות אופטימליות ב-AlloyDB ל-PostgreSQL מאפשרות לכם להשתמש במודל פרוקסי קטן ומהיר יותר כדי לעבד את רוב שאילתות ה-SQL שמשתמשות בפונקציות AI, ולחזור למודל שפה גדול (LLM) רק כשצריך. הגישה הזו מפחיתה את עלויות התפעול ומשפרת את זמני התגובה של השאילתות, כי היא מצמצמת את הקריאות ל-LLM מרחוק למשימות של סיווג או סינון שורה אחר שורה.

לפונקציות AI של AlloyDB כמו ai.if() יכול להיות זמן אחזור ארוך בגלל קריאות מרחוק למודלים גדולים של שפה (LLM). פונקציות שעברו אופטימיזציה פותרות את בעיית זמן האחזור הזו באמצעות מודלים קטנים יותר של שרת proxy שאומנו באופן מקומי כדי לעבד את השאילתות שלכם. המודלים האלה מאומנים על דגימה של הנתונים שלכם, והפלט של ה-LLM משמש כמקור האמת.

בדיקות הדיוק מתבצעות בזמן הריצה על מדגם של שורות באמצעות ה-LLM. כדי לבצע את הבדיקה הזו, AlloyDB משתמש ב-LLM כדי ליצור תוויות לשורות לדוגמה, ומשווה אותן לתחזיות של מודל ה-proxy כדי לאמת את הדיוק. אם בדיקת הדיוק נכשלת, השאילתה חוזרת להשתמש ב-LLM.

כשמשתמשים בפונקציה שעברה אופטימיזציה, AlloyDB מבצע את הפעולות הבאות:

  1. אימון מודל proxy: ‏AlloyDB מאמן מודל proxy קל על דגימה מהנתונים שלכם. זה קורה ברקע כשמשתמשים בהצהרה PREPARE עם הפונקציה ai.if() כדי לאמן את המודל לשאילתות אופטימליות.
  2. מריצים את השאילתה: כשמשתמשים בהצהרה EXECUTE, AlloyDB משתמש במודל ה-proxy שאומן כדי לעבד את השאילתה באופן מקומי.
  3. חזרה ל-LLM: אם הדיוק של המודל נמוך, או אם AlloyDB לא מוצא מודל, AlloyDB חוזר אוטומטית לשימוש ב-LLM.

תרשים זרימה של פונקציות שעברו אופטימיזציה

לפני שמתחילים

לפני שמשתמשים בפונקציות שעברו אופטימיזציה, צריך:

  • מתחברים למסד הנתונים באמצעות psql או AlloyDB Studio בתור המשתמש postgres או בתור משתמש שיש לו גישה לטבלה שבה נמצאים הנתונים.
  • מוודאים שהתוסף google_ml_integration מותקן וזמין בגרסה 1.5.8 ואילך.

    SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
    extversion
    ------------
    1.5.8
    (1 row)
    
  • מגדירים את AlloyDB כך שיעבוד עם Gemini Enterprise Agent Platform. מידע נוסף מופיע במאמר שילוב מסד הנתונים עם Agent Platform.

  • מוודאים שהדגלים הבאים לניהול מסד הנתונים מופעלים. מידע נוסף זמין במאמר הגדרת דגלים לניהול מסד נתונים של מכונה.

    • google_ml_integration.enable_model_support
    • google_ml_integration.enable_ai_query_engine
    • google_ml_integration.enable_cost_optimized_ai_functions
  • יוצרים הטמעות לטבלה שרוצים לשלוח אליה שאילתה. מידע נוסף זמין במאמר יצירה וניהול של הטמעות אוטומטיות לטבלאות.

  • כמה נקודות שכדאי לחשוב עליהן:

    • העמודה של נתוני המקור חייבת להיות מסוג TEXT או VARCHAR.
    • עמודת ההטמעה שמספקת קלט לפונקציית ה-AI שעברה אופטימיזציה צריכה להיות מסוג REAL[] או VECTOR.
    • פונקציות אופטימליות זמינות רק באזורים שבהם מודלים גנרטיביים של Agent Platform זמינים. ברשימת האזורים הזמינים תוכלו לראות את הפריסות ונקודות הקצה.

שימוש בפונקציות שעברו אופטימיזציה

כדי להשתמש בפונקציה שעברה אופטימיזציה, משתמשים בהצהרות PREPARE ו-EXECUTE עם הפונקציה ai.if(). הדוגמה הבאה ממחישה איך להשתמש בפונקציה שעברה אופטימיזציה:

  1. יוצרים טבלה ב-restaurant_reviews. העמודה review שמכילה את נתוני המקור היא מסוג TEXT, והעמודה review_embedding שמשמשת לשאילתות היא מסוג VECTOR(768).

    CREATE TABLE restaurant_reviews (
        id SERIAL,
        name VARCHAR(64),
        city VARCHAR(64),
        review TEXT,
        review_embedding VECTOR(768)
    );
    
  2. משתמשים בהצהרה PREPARE עם הפונקציה ai.if() כדי לציין שהשאילתה צריכה להשתמש בפונקציה שעברה אופטימיזציה. ההצהרה הזו מפעילה את האימון האסינכרוני של המודל ברקע.

    המודל מאומן רק בתנאים הבאים:

    • יש בדיוק פונקציית ai.if() אחת בשאילתה.
    • הפונקציה ai.if() לא נמצאת בתוך שאילתת משנה.
    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. מריצים את השאילתה באמצעות ההצהרה EXECUTE. מכיוון שההצהרה PREPARE ספציפית לסשן הנוכחי, צריך להריץ את ההצהרה EXECUTE באותו חיבור:

    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;
    

    המודל המאומן של שרת ה-Proxy לא משמש אם מתקיים אחד מהתנאים הבאים:

    • התוכן או העמודה להטמעה שאליהם מפנה ai.if() משתנים. שתי העמודות צריכות להיות באותה טבלה.
    • ההנחיה שסופקה לעמודת התוכן משתנה.
    • מבנה השאילתה משתנה, וכתוצאה מכך מתקבל query_id אחר.
    • השאילתה לא עומדת בסף של בדיקת הדיוק בתחילת השאילתה.

    במקרים כאלה, השאילתה חוזרת להשתמש ב-LLM, ו-AlloyDB מחזיר אזהרה.

  4. זה שינוי אופציונלי. כדי להשבית את בדיקת האימות של הדיוק לכל סביבת מסד הנתונים, שנדרשת כי בדיקות הדיוק מבוצעות גם במהלך אימון המודל, מריצים את הפקודה הבאה.

    ALTER DATABASE DATABASE_NAME SET google_ml_integration.proxy_models_enable_accuracy_check = off;
    

    מחליפים את DATABASE_NAME בשם של מסד הנתונים.

אימון מחדש של מודל proxy

אם הנתונים בטבלה הבסיסית משתנים באופן משמעותי, אפשר לאמן מחדש את מודל שרת ה-Proxy על ידי הפעלה חוזרת של ההצהרה PREPARE. הכנה מחדש של שאילתה מחליפה את מודל ה-proxy הקיים על ידי הפעלת בקשת אימון חדשה.

מגבלות

אם משנים את עמודת תוכן המקור, את עמודת ההטמעה או את ההנחיה שסופקה לפונקציה ai.if(), צריך להנפיק הצהרת PREPARE חדשה. ‫AlloyDB מאמן את הפונקציה שעברה אופטימיזציה כדי לדמות את ההתנהגות של שילוב ייחודי של הנחיה ונתוני קלט.

המאמרים הבאים