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

במדריך הזה תשתמשו במודל מרוחק עם הפונקציה 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 באמצעות הפונקציה 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 או יוצרים אותו.

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

    • בחירת פרויקט: כדי לבחור פרויקט לא נדרש תפקיד IAM ספציפי – אתם יכולים לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (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). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים?

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

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

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

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

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

יצירת קבוצת נתונים

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

המסוף

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

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

    כפתור מודגש לחלונית Explorer.

    אם החלונית הימנית לא מוצגת, לוחצים על Expand left pane כדי לפתוח אותה.

  3. ב-Explorer, מרחיבים את הפרויקט ולוחצים על Datasets.

  4. בדף Datasets, לוחצים על Create dataset.

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

    • בשדה Dataset ID, מזינים bqml_tutorial.

    • בקטע Data location (מיקום הנתונים), בוחרים באפשרות US (ארה"ב).

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

  6. לוחצים על Create dataset.

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. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-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 עלולה להיכשל בגלל מכסות של Agent Platform LLM או בגלל שהשירות לא זמין. אם היא נכשלת, פרטי השגיאה מוחזרים בעמודה status בתוצאות השאילתה.

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

כדי ליצור הטמעות טקסט, מדביקים את הפקודה הזו בעורך השאילתות ולוחצים על 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. השיטה הזו משפרת את הביצועים של החיפוש הווקטורי ומחזירה תוצאות משוערות יותר, אבל האחזור מצטמצם.

כדי ליצור אינדקס וקטורי, משתמשים בהצהרה CREATE VECTOR INDEX של שפת הגדרת הנתונים (DDL). כדי לוודא שהאינדקס זמין, שולחים שאילתה לתצוגה 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 רשימות, לכן הערך .01 של fraction_lists_to_search מציין שהחיפוש הווקטורי הזה סורק חמש מהרשימות האלה. ערך 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 שמשופר באמצעות תוצאות חיפוש וקטורי

מזינים את תוצאות החיפוש כפרומפטים ליצירת טקסט דינמי מבוסס-AI באמצעות הפונקציה 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. בחלונית הימנית, מרחיבים את הפרויקט ולוחצים על Datasets.

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

  4. בתיבת הדו-שיח Delete dataset, לוחצים על Delete כדי לאשר.

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

  6. בחיבור __default_cloudresource_connection__, לוחצים על Open actions > Delete.

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

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