ביצוע חיפוש סמנטי ויצירה משופרת באמצעות אחזור
במדריך הזה מוסבר תהליך יצירה ושימוש בהטמעות של טקסט לחיפוש סמנטי וליצירה משולבת-אחזור (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.createbigquery.models.createbigquery.models.getDatabigquery.models.updateDatabigquery.models.updateMetadata
יכול להיות שתוכלו לקבל את ההרשאות האלה גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של 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.
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.
מידע נוסף על התמחור של BigQuery זמין במאמר תמחור ב-BigQuery במסמכי התיעוד של BigQuery.
מידע נוסף על התמחור של Agent Platform זמין בדף התמחור של Agent Platform.
לפני שמתחילים
-
בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project (בחירת פרויקט): כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שהוקצה לכם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
מפעילים את ממשקי ה-API של BigQuery, BigQuery Connection ו-Agent Platform.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק 'שימוש בשירות'' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים
יצירת מערך נתונים
כדי ליצור מערך נתונים ב-BigQuery, בוחרים באחת מהאפשרויות הבאות:
המסוף
במסוף Google Cloud , עוברים לדף BigQuery.
בחלונית הימנית, לוחצים על כלי הניתוחים:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בסייר, מרחיבים את הפרויקט ואז לוחצים על מערכי נתונים.
בדף Datasets (מערכי נתונים), לוחצים על Create dataset (יצירת מערך נתונים).
בחלונית Create dataset:
בשדה Dataset ID (מזהה קבוצת נתונים), מזינים
bqml_tutorial.בקטע Data location, בוחרים באפשרות US.
משאירים את שאר הגדרות ברירת המחדל כמו שהן.
לוחצים על יצירת מערך נתונים.
BQ
כדי ליצור מערך נתונים חדש, משתמשים בפקודה bq mk --dataset.
יוצרים מערך נתונים בשם
bqml_tutorialעם מיקום הנתונים שמוגדר ל-US:bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
בודקים שמערך הנתונים נוצר:
bq ls
API
מפעילים את השיטה datasets.insert עם משאב מוגדר של מערך נתונים:
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
יצירת המודל המרוחק ליצירת הטמעה של טקסט
יוצרים מודל מרוחק שמייצג מודל אירוח ליצירת הטמעות טקסט ב-Agent Platform:
במסוף Google Cloud , עוברים לדף BigQuery.
בעורך השאילתות, מריצים את ההצהרה הבאה:
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 כדי שאפשר יהיה לחפש אותן.
במסוף Google Cloud , עוברים לדף BigQuery.
בעורך השאילתות, מריצים את ההצהרה הבאה:
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
עוברים לדף BigQuery.
בעורך השאילתות, מריצים את הצהרת ה-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.
עוברים לדף BigQuery.
בעורך השאילתות, מריצים את הצהרת ה-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
אפשרויות של אינדקסים של וקטורים.
המודל שבו אתם משתמשים כדי ליצור את ההטמעות בשאילתה הזו צריך להיות זהה למודל שבו אתם משתמשים כדי ליצור את ההטמעות בטבלה שאתם משווים אליה, אחרת תוצאות החיפוש לא יהיו מדויקות.
עוברים לדף BigQuery.
בעורך השאילתות, מריצים את הצהרת ה-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... | +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
יצירת המודל המרוחק ליצירת טקסט
יוצרים מודל מרוחק שמייצג Agent Platform מתארחת ליצירת טקסט:
במסוף Google Cloud , עוברים לדף BigQuery.
בעורך השאילתות, מריצים את ההצהרה הבאה:
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
במסוף Google Cloud , עוברים לדף BigQuery.
בעורך השאילתות, מריצים את ההצהרה הבאה:
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 , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- כדאי לנסות את המדריך לניתוח קובצי PDF בצינור ליצירת תוכן עם שליפה משופרת כדי ללמוד איך ליצור צינור RAG שמבוסס על תוכן PDF מנותח.