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

במדריך הזה מוסבר תהליך יצירה ושימוש בהטמעות של טקסט לחיפוש סמנטי וליצירה משולבת-אחזור (RAG).

במדריך הזה מוסבר איך לבצע את הפעולות הבאות:

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

במדריך הזה נעשה שימוש בטבלה הציבורית patents-public-data.google_patents_research.publications של BigQuery.

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

כדי להפעיל את המדריך הזה, אתם צריכים את התפקידים הבאים בניהול הזהויות והרשאות הגישה (IAM):

  • יצירה ושימוש במערכי נתונים, בחיבורים ובמודלים של BigQuery: ניהול BigQuery‏ (roles/bigquery.admin).
  • נותנים הרשאות לחשבון השירות של החיבור: אדמין IAM של פרויקט (roles/resourcemanager.projectIamAdmin).

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

ההרשאות הנדרשות

  • יצירת מערך נתונים: bigquery.datasets.create
  • יצירה, הקצאה ושימוש בחיבור: bigquery.connections.*
  • הגדרת החיבור המוגדר כברירת מחדל: bigquery.config.*
  • מגדירים את ההרשאות לחשבון השירות: resourcemanager.projects.getIamPolicy ו- resourcemanager.projects.setIamPolicy
  • יצירת מודל והרצת הסקה:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

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

עלויות

במסמך הזה משתמשים ברכיבים הבאים של 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.

מידע נוסף על התמחור של BigQuery זמין במאמר תמחור ב-BigQuery במסמכי התיעוד של BigQuery.

מידע נוסף על התמחור של Agent Platform זמין בדף התמחור של Agent Platform.

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

  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,‏ BigQuery Connection ו-Agent Platform.

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

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

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

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

יוצרים מערך נתונים ב-BigQuery לאחסון מודל ה-ML.

המסוף

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

    לדף BigQuery

  2. בחלונית Explorer, לוחצים על שם הפרויקט.

  3. לוחצים על הצגת פעולות > יצירת מערך נתונים.

  4. בדף Create dataset, מבצעים את הפעולות הבאות:

    • בשדה Dataset ID (מזהה מערך הנתונים), מזינים bqml_tutorial.

    • בקטע Location type, בוחרים באפשרות Multi-region ואז בוחרים באפשרות US.

    • משאירים את הגדרות ברירת המחדל שנותרו כמו שהן ולוחצים על 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:

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

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את ההצהרה הבאה:

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

    השאילתה תימשך כמה שניות, ואחריה אפשר יהיה לגשת למודל embedding_model דרך חלונית Explorer. מכיוון שהשאילתה משתמשת בהצהרת CREATE MODEL כדי ליצור מודל, אין תוצאות לשאילתה.

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

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

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

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את ההצהרה הבאה:

    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;

הרצת השאילתה הזו תימשך כ-5 דקות.

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

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

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

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

כדי ליצור אינדקס וקטורי, משתמשים בהצהרה של שפת הגדרת נתונים (DDL): CREATE VECTOR INDEX

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

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את הצהרת ה-SQL הבאה:

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

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

אימות המוּכנוּת של אינדקס הווקטורים

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

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

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את הצהרת ה-SQL הבאה:

    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 במזהה הפרויקט.

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

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

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

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

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

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את הצהרת ה-SQL הבאה:

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

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

יוצרים מודל מרוחק שמייצג מודל ליצירת טקסט של פלטפורמת סוכנים מתארחת:

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

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את ההצהרה הבאה:

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

    השאילתה תימשך כמה שניות, ואחריה אפשר יהיה לגשת למודל text_model דרך חלונית Explorer. מכיוון שהשאילתה משתמשת בהצהרת CREATE MODEL כדי ליצור מודל, אין תוצאות לשאילתה.

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

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

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

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את ההצהרה הבאה:

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

הסרת המשאבים

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

    כניסה לדף Manage resources

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

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