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

במדריך הזה משתמשים במודל מרוחק עם הפונקציה AI.GENERATE_EMBEDDING כדי ליצור הטמעות של טקסט בטבלה ב-BigQuery. לאחר מכן יוצרים אינדקס וקטורי כדי ליצור אינדקס של ההטמעות ולשפר את ביצועי החיפוש.

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

לבסוף, מבצעים יצירה משופרת באמצעות אחזור (RAG) על ידי יצירת טקסט באמצעות הפונקציה AI.GENERATE_TEXT. RAG הוא מסגרת AI שמשלבת את היתרונות של מערכות לאחזור מידע (כמו חיפוש ומסדי נתונים) עם היכולות של מודלים גדולים של שפה (LLM) גנרטיביים. השילוב של הנתונים שלכם והידע העולמי עם היכולות הלשוניות של מודלים גדולים של שפה (LLM) מאפשר ליצור תוכן מדויק, עדכני ורלוונטי יותר לצרכים הספציפיים שלכם.

במדריך הזה נעשה שימוש בנתונים ממערך הנתונים הציבורי של Google Patents Research.

מטרות

  • יצירת מודל מרוחק של BigQuery ML על מודל הטמעה של Gemini Enterprise Agent Platform.
  • משתמשים בפונקציה AI.GENERATE_EMBEDDING של המודל המרוחק כדי ליצור הטבעות מטקסט בטבלה ב-BigQuery.
  • יוצרים אינדקס וקטורי כדי ליצור אינדקס להטמעות, וכך לשפר את ביצועי החיפוש.
  • משתמשים בפונקציה VECTOR_SEARCH עם ההטמעות כדי לחפש טקסט דומה.
  • ביצוע RAG באמצעות יצירת טקסט עם הפונקציה AI.GENERATE_TEXT ושימוש בתוצאות של חיפוש וקטורי כדי להוסיף מידע לקלט של ההנחיה ולשפר את התוצאות.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

  • BigQuery ML: You incur costs for the data that you process in BigQuery.
  • Gemini Enterprise Agent Platform: You incur costs for calls to the Agent Platform service that's represented by the remote model.

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

מידע נוסף זמין בדפי התמחור הבאים:

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

  1. בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים

    כניסה לדף לבחירת הפרויקט

  2. מוודאים שהחיוב מופעל בפרויקט Google Cloud .

  3. מפעילים את ממשקי ה-API של BigQuery,‏ Cloud Storage ו-Gemini Enterprise Agent Platform.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    הפעלת ממשקי ה-API

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות להשלמת המדריך הזה, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:

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

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

יצירת מערך נתונים

כדי ליצור מערך נתונים ב-BigQuery, בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    הלחצן המודגש של חלונית הסייר.

    אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.

  3. בסייר, מרחיבים את הפרויקט ואז לוחצים על מערכי נתונים.

  4. בדף Datasets (מערכי נתונים), לוחצים על Create dataset (יצירת מערך נתונים).

  5. בחלונית Create dataset:

    • בשדה Dataset ID (מזהה קבוצת נתונים), מזינים bqml_tutorial.

    • בקטע Data location, בוחרים באפשרות US.

    משאירים את שאר הגדרות ברירת המחדל כמו שהן.

  6. לוחצים על יצירת מערך נתונים.

BQ

כדי ליצור מערך נתונים חדש, משתמשים בפקודה bq mk --dataset.

  1. יוצרים מערך נתונים בשם bqml_tutorial עם מיקום הנתונים שמוגדר ל-US:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. בודקים שמערך הנתונים נוצר:

    bq ls

API

מפעילים את השיטה datasets.insert עם משאב מוגדר של מערך נתונים:

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

יצירת המודל המרוחק ליצירת הטמעה של טקסט

בקטע הזה יוצרים מודל מרוחק שמייצג מודל אירוח של Agent Platform ליצירת הטבעות טקסט. כשיוצרים את המודל, משתמשים בחיבור DEFAULT כדי לקרוא ל-Text embeddings API ולקבל הטמעות טקסט באמצעות מודל text-embedding-005. אם אין לכם חיבור ברירת מחדל, המשפט CREATE MODEL יוצר חיבור כזה בשבילכם.

כדי ליצור את מודל הטמעת הטקסט:

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. כדי ליצור את המודל, מדביקים את הפקודה הזו בעורך השאילתות ולוחצים על Run:

    CREATE OR REPLACE MODEL `bqml_tutorial.embedding_model`
      REMOTE WITH CONNECTION DEFAULT
      OPTIONS (ENDPOINT = 'text-embedding-005');

    השאילתה מסתיימת אחרי כמה שניות, ואז אפשר לגשת למודל embedding_model דרך החלונית Explorer.

    תוצג הודעת אישור כמו זו: Successfully created model named embedding_model.

יצירת הטמעות טקסט

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

יכול להיות שייכשל ניסיון להטמיע יצירה באמצעות הפונקציה AI.GENERATE_EMBEDDING בגלל מכסות של מודל שפה גדול בפלטפורמת הסוכנים או בגלל שהשירות לא זמין. אם הפעולה נכשלת, פרטי השגיאה מוחזרים בעמודה status בתוצאות השאילתה.

שיטות חלופיות ליצירת הטמעות טקסט ב-BigQuery מפורטות במאמר הטמעת טקסט באמצעות מודלים של TensorFlow שאומנו מראש.

כדי ליצור הטמעות של טקסט, מדביקים את הפקודה הזו בעורך השאילתות ולוחצים על Run:

  CREATE OR REPLACE TABLE bqml_tutorial.embeddings AS
  SELECT * FROM AI.GENERATE_EMBEDDING(
    MODEL bqml_tutorial.embedding_model,
    (
      SELECT *, abstract AS content
      FROM patents-public-data.google_patents_research.publications
      WHERE LENGTH(abstract) > 0 AND LENGTH(title) > 0 AND country = 'Singapore'
    )
  )
  WHERE LENGTH(status) = 0;
  

השלמת השאילתה הזו תימשך כמה דקות. תוצג הודעת אישור כמו זו:This statement created a new table named embeddings.

יצירת אינדקס וקטורי

אם יוצרים אינדקס וקטורי בעמודת הטמעה, חיפוש וקטורי שמבוצע בעמודה הזו משתמש בטכניקת החיפוש Approximate Nearest Neighbor. הטכניקה הזו משפרת את הביצועים של חיפוש וקטורי ומחזירה תוצאות משוערות יותר, אבל ההחזרה מצטמצמת.

כדי ליצור אינדקס וקטורי, משתמשים בהצהרה של שפת הגדרת נתונים (DDL) CREATE VECTOR INDEX. כדי לוודא שהאינדקס זמין, מריצים שאילתה בתצוגה INFORMATION_SCHEMA.VECTOR_INDEXES כדי לוודא שהערך בעמודה coverage_percentage גדול מ-0, והערך בעמודה last_refresh_time לא שווה ל-NULL.

כדי ליצור ולאמת את אינדקס הווקטורים, מבצעים את השלבים הבאים:

  1. כדי ליצור את אינדקס הווקטורים, מדביקים את הפקודה הזו בעורך השאילתות ולוחצים על Run:

    CREATE OR REPLACE VECTOR INDEX my_index
    ON `bqml_tutorial.embeddings`(embedding)
    OPTIONS(index_type = 'IVF',
      distance_type = 'COSINE',
      ivf_options = '{"num_lists":500}');

    תוצג הודעת אישור כמו זו: The vector index creation on table bqml_tutorial.embeddings was initiated. Please query bqml_tutorial.INFORMATION_SCHEMA.VECTOR_INDEXES to check the progress of the index.

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

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

    SELECT table_name, index_name, index_status,
    coverage_percentage, last_refresh_time, disable_reason
    FROM `PROJECT_ID.bqml_tutorial.INFORMATION_SCHEMA.VECTOR_INDEXES`;

    מחליפים את PROJECT_ID במזהה הפרויקט.

    אחרי שמריצים את השאילתה, האינדקס זמין אם בעמודה index_status בתוצאות מופיע האינדקס ACTIVE, ואם הערך coverage_percentage הוא 100.

ביצוע חיפוש של דמיון טקסט באמצעות אינדקס הווקטורים

אפשר להשתמש בפונקציה VECTOR_SEARCH כדי לחפש פטנטים רלוונטיים שתואמים להטמעות שנוצרו משאילתת טקסט.

הארגומנט top_k קובע את מספר ההתאמות שיוחזרו, במקרה הזה חמש. האפשרות fraction_lists_to_search קובעת את אחוז הרשימות של אינדקס הווקטורים שיש לחפש. האינדקס הווקטורי שיצרתם כולל 500 רשימות, ולכן הערך fraction_lists_to_search של .01 מציין שהחיפוש הווקטורי הזה סורק חמש מהרשימות האלה. ערך נמוך יותר של fraction_lists_to_search כמו שמוצג כאן מספק זיכרון נמוך יותר וביצועים מהירים יותר.

מידע נוסף על רשימות של אינדקסים של וקטורים זמין במאמר בנושא num_lists אפשרויות של אינדקסים של וקטורים.

המודל שבו אתם משתמשים כדי ליצור את ההטמעות בשאילתה הזו צריך להיות זהה למודל שבו אתם משתמשים כדי ליצור את ההטמעות בטבלה שאליה אתם משווים, אחרת תוצאות החיפוש לא יהיו מדויקות.

כדי לבצע חיפוש של דמיון בין טקסטים, מדביקים את הפקודה הזו בעורך השאילתות, ואז לוחצים על Run:

  SELECT query.query, base.publication_number, base.title, base.abstract
  FROM VECTOR_SEARCH(
    TABLE bqml_tutorial.embeddings, 'embedding',
    (
    SELECT embedding, content AS query
    FROM AI.GENERATE_EMBEDDING(
    MODEL bqml_tutorial.embedding_model,
    (SELECT 'improving password security' AS content))
    ),
    top_k => 5, options => '{"fraction_lists_to_search": 0.01}');
  

הפלט אמור להיראות כך:

+-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
|            query            | publication_number |                       title                     |                      abstract                   |
+-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
| improving password security | SG-120868-A1       | Data storage device security method and a...    | Methods for improving security in data stora... |
| improving password security | SG-10201610585W-A  | Passsword management system and process...      | PASSSWORD MANAGEMENT SYSTEM AND PROCESS ...     |
| improving password security | SG-148888-A1       | Improved system and method for...               | IMPROVED SYSTEM AND METHOD FOR RANDOM...        |
| improving password security | SG-194267-A1       | Method and system for protecting a password...  | A system for providing security for a...        |
| improving password security | SG-120868-A1       | Data storage device security...                 | Methods for improving security in data...       |
+-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+

יצירת מודל מרוחק ליצירת טקסט

כדי ליצור מודל מרוחק שמייצג מודל אירוח של Agent Platform ליצירת טקסט, מדביקים את הפקודה הזו בעורך השאילתות ולוחצים על Run:

  CREATE OR REPLACE MODEL bqml_tutorial.text_model
    REMOTE WITH CONNECTION DEFAULT
    OPTIONS (ENDPOINT = 'gemini-2.5-flash');
  

תקבלו הודעת אישור שדומה להודעה הבאה: Successfully created model named text_model.

יצירת טקסט עם תוצאות חיפוש וקטורי

מזינים את תוצאות החיפוש כהנחיות כדי ליצור טקסט באמצעות הפונקציה AI.GENERATE_TEXT.

כדי להוסיף לתוצאות של חיפוש וקטורי, מדביקים את הפקודה הזו בעורך השאילתות ולוחצים על Run:

  SELECT result AS generated, prompt
  FROM AI.GENERATE_TEXT(
    MODEL bqml_tutorial.text_model,
    (
      SELECT CONCAT(
        'Propose some project ideas to improve user password security using the context below: ',
        STRING_AGG(
          FORMAT("patent title: %s, patent abstract: %s", base.title, base.abstract),
          ',\n')
        ) AS prompt,
      FROM VECTOR_SEARCH(
        TABLE bqml_tutorial.embeddings, 'embedding',
        (
          SELECT embedding, content AS query
          FROM AI.GENERATE_EMBEDDING(
            MODEL bqml_tutorial.embedding_model,
            (SELECT 'improving password security' AS content)
          )
        ),
      top_k => 5, options => '{"fraction_lists_to_search": 0.01}')
    ),
    STRUCT(600 AS max_output_tokens));
  

הפלט אמור להיראות כך:

+------------------------------------------------+------------------------------------------------------------+
|            generated                           | prompt                                                     |
+------------------------------------------------+------------------------------------------------------------+
| These patents suggest several project ideas to | Propose some project ideas to improve user password        |
| improve user password security.  Here are      | security using the context below: patent title: Active     |
| some, categorized by the patent they build     | new password entry dialog with compact visual indication   |
| upon:                                          | of adherence to password policy, patent abstract:          |
|                                                | An active new password entry dialog provides a compact     |
| **I. Projects based on "Active new password    | visual indication of adherence to password policies. A     |
| entry dialog with compact visual indication of | visual indication of progress towards meeting all          |
| adherence to password policy":**               | applicable password policies is included in the display    |
|                                                | and updated as new password characters are being...        |
+------------------------------------------------+------------------------------------------------------------+

הסרת המשאבים

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

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

לחלופין, כדי לשמור את הפרויקט ולמחוק את המשאבים שבהם השתמשתם במדריך הזה, פועלים לפי השלבים הבאים:

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, מרחיבים את הפרויקט ואז לוחצים על מערכי נתונים.

  3. במערך הנתונים bqml_tutorial, לוחצים על פתיחת הפעולות > מחיקה.

  4. בתיבת הדו-שיח מחיקת מערך נתונים, לוחצים על מחיקה כדי לאשר.

  5. בחלונית הימנית, לוחצים על Connections.

  6. בחיבור __default_cloudresource_connection__, לוחצים על פתיחת פעולות > מחיקה.

  7. בתיבת הדו-שיח מחיקת הקישור, מזינים delete ולוחצים על מחיקה כדי לאשר.

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