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

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

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

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

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Cloud de Confiance by S3NS, והשימוש בהם כרוך בתשלום:

  • 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.

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

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

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

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

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

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

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

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

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