במדריך הזה נסביר איך לבצע חיפוש סמנטי בנתוני הגרף באמצעות יצירה אוטונומית של הטמעה והפונקציה AI.SEARCH.
מטרות
במדריך הזה מוסבר איך לבצע את הפעולות הבאות:- יצירת טבלאות שמכילות מידע על אנשים, חשבונות פיננסיים, בעלות על חשבונות והעברות של חשבונות.
- אפשר להשתמש ביצירת הטמעה אוטונומית כדי לפשט את תהליך העבודה של תחזוקת ההטמעה.
- יצירת תרשים שמגדיר את הקשרים בין הנתונים שמאוחסנים בטבלאות.
- אפשר להשתמש בפונקציה
AI.SEARCHבצמתי הגרף כדי לבצע חיפוש סמנטי בתיאורי החשבון. - אפשר להשתמש בפונקציה
AI.SEARCHבקצוות של הגרף כדי לבצע חיפוש סמנטי בהערות על העברת החשבון.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Cloud de Confiance by S3NS, והשימוש בהם כרוך בתשלום:
- BigQuery: You incur costs for the data that you process in BigQuery.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
המסוף
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
מוודאים שיש לכם את התפקיד או התפקידים הבאים בפרויקט: BigQuery Data Editor, Project IAM Admin
בדיקת התפקידים
-
נכנסים לדף IAM במסוף Cloud de Confiance .
כניסה לדף IAM - בוחרים את הפרויקט.
-
בעמודה Principal (חשבון המשתמש), מוצאים את כל השורות שבהן מופיע השם שלכם או של קבוצה שאתם נכללים בה. כדי לברר באילו קבוצות אתם נכללים, פנו לאדמין.
- בודקים את העמודה Role בכל השורות שבהן מצוין או מופיע השם שלכם, כדי לראות אם רשימת התפקידים כוללת את התפקידים הנדרשים.
מתן התפקידים
-
נכנסים לדף IAM במסוף Cloud de Confiance .
כניסה לדף IAM - בוחרים את הפרויקט.
- לוחצים על Grant access.
-
בשדה New principals, מזינים את מזהה המשתמש. בדרך כלל זה המזהה של משתמש במאגר זהויות של כוח עבודה. למידע נוסף, קראו את המאמר ייצוג המשתמשים במאגרי כוח עבודה בכללי מדיניות IAM או פנו לאדמין שלכם.
- לוחצים על Select a role ומחפשים את התפקיד.
- כדי לתת עוד תפקידים, לוחצים על Add another role ומוסיפים אותם.
- לוחצים על Save.
-
gcloud
-
התקינו את ה-CLI של Google Cloud.
-
הגדירו שה-CLI של gcloud ישתמש בזהות המאוחדת שלכם.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Cloud de Confiance פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Cloud de Confiance פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Cloud de Confiance שיוצרים. -
בוחרים את הפרויקט שיצרתם: Cloud de Confiance
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Cloud de Confiance .
מפעילים את BigQuery API:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable bigquery.googleapis.com
-
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/bigquery.dataEditor, roles/resourcemanager.projectIamAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש חשבון. דוגמאות מופיעות במאמר ייצוג המשתמשים במאגרי כוח עבודה בכללי מדיניות IAM. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
יצירת טבלאות
כדי לאחסן את הטבלאות והתרשים שיוצרים בדוגמאות הבאות, יוצרים מערך נתונים.
השאילתה הבאה יוצרת מערך נתונים בשם graph_search:
CREATE SCHEMA IF NOT EXISTS graph_search;
בטבלאות הבאות מופיע מידע על אנשים וחשבונות, ועל הקשרים בין כל אחד מהגורמים האלה:
-
Person: מידע על אנשים. -
Account: מידע על חשבונות בנק. PersonOwnAccount: מידע על מי הבעלים של כל חשבון.-
AccountTransferAccount: מידע על העברות בין חשבונות.
כדי ליצור את הטבלאות האלה, מריצים את ההצהרותCREATE TABLE הבאות:
CREATE OR REPLACE TABLE graph_search.Person (
id INT64,
name STRING,
PRIMARY KEY (id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_search.Account (
id INT64,
create_time TIMESTAMP,
is_blocked BOOL,
description STRING,
description_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
GENERATED ALWAYS AS (
AI.EMBED(description, model => 'embeddinggemma-300m')
) STORED OPTIONS( asynchronous = TRUE ),
PRIMARY KEY (id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_search.PersonOwnAccount (
id INT64 NOT NULL,
account_id INT64 NOT NULL,
create_time TIMESTAMP,
PRIMARY KEY (id, account_id) NOT ENFORCED,
FOREIGN KEY (id) REFERENCES graph_search.Person(id) NOT ENFORCED,
FOREIGN KEY (account_id) REFERENCES graph_search.Account(id) NOT ENFORCED
);
CREATE OR REPLACE TABLE graph_search.AccountTransferAccount (
id INT64 NOT NULL,
to_id INT64 NOT NULL,
amount FLOAT64,
create_time TIMESTAMP NOT NULL,
order_number STRING,
notes STRING,
notes_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
GENERATED ALWAYS AS (
AI.EMBED(notes, model => 'embeddinggemma-300m')
) STORED OPTIONS( asynchronous = TRUE ),
PRIMARY KEY (id, to_id, create_time) NOT ENFORCED,
FOREIGN KEY (id) REFERENCES graph_search.Account(id) NOT ENFORCED,
FOREIGN KEY (to_id) REFERENCES graph_search.Account(id) NOT ENFORCED
);
הטבלאות Account ו-AccountTransferAccount משתמשות ביצירת הטמעה אוטונומית כדי לשמור על ההטמעות של העמודות description ו-notes.
במדריך הזה אנחנו משתמשים במודל embeddinggemma-300m כי הוא פועל ב-BigQuery ומתאים למחרוזות קצרות. למחרוזות ארוכות יותר שכוללות יותר מ-128 טוקנים, צריך לבחור מודל הטמעה אחר, כמו text-embedding-005. מידע נוסף על בחירת מודל הטמעה
הוספת נתונים
השאילתות הבאות מוסיפות נתונים לדוגמה לטבלאות. ההצהרות של INSERT לא כוללות את עמודות ההטמעה, ו-BigQuery מאכלס אותן באופן אוטומטי.
INSERT INTO graph_search.Account
(id, create_time, is_blocked, description)
VALUES
(7,"2020-01-10 06:22:20.222",false,"Fund for a refreshing tropical vacation"),
(16,"2020-01-27 17:55:09.206",true,"Fund for a rainy day!"),
(20,"2020-02-18 05:44:20.655",false,"Saving up for travel");
INSERT INTO graph_search.Person
(id, name)
VALUES
(1,"Alex"),
(2,"Dana"),
(3,"Lee");
INSERT INTO graph_search.AccountTransferAccount
(id, to_id, amount, create_time, order_number, notes)
VALUES
(7,16,300,"2020-08-29 15:28:58.647","304330008004315", "wedding present"),
(7,16,100,"2020-10-04 16:55:05.342","304120005529714", "birthday gift"),
(16,20,300,"2020-09-25 02:36:14.926","103650009791820", "for shared cost of dinner"),
(20,7,500,"2020-10-04 16:55:05.342","304120005529714", "fees for tuition"),
(20,16,200,"2020-10-17 03:59:40.247","302290001484851", "loved the lunch");
INSERT INTO graph_search.PersonOwnAccount
(id, account_id, create_time)
VALUES
(1,7,"2020-01-10 06:22:20.222"),
(2,20,"2020-01-27 17:55:09.206"),
(3,16,"2020-02-18 05:44:20.655");
יצירת גרף
השאילתה הבאה משתמשת בהצהרה CREATE PROPERTY GRAPH כדי ליצור תרשים בשם FinGraph במערך הנתונים graph_search.
הטבלאות Account ו-Person הן טבלאות הצמתים. הטבלאות AccountTransferAccount ו-PersonOwnAccount הן טבלאות קצה שמייצגות קשרים בין טבלאות הצמתים.
CREATE OR REPLACE PROPERTY GRAPH graph_search.FinGraph
NODE TABLES (graph_search.Account, graph_search.Person)
EDGE TABLES (
graph_search.PersonOwnAccount
SOURCE KEY (id) REFERENCES Person (id)
DESTINATION KEY (account_id) REFERENCES Account (id)
LABEL Owns,
graph_search.AccountTransferAccount
SOURCE KEY (id) REFERENCES Account (id)
DESTINATION KEY (to_id) REFERENCES Account (id)
LABEL Transfers
);
חיפוש צמתים
השאילתות הבאות מראות מי הבעלים של חשבונות לנסיעות לצורכי פנאי ולחופשות. השאילתה הראשונה משתמשת בהצהרת DECLARE כדי ליצור משתנה בשם similar_account. המשתנה מאותחל בסעיף DEFAULT באמצעות קריאה ל-AI.SEARCH שמאתר חשבונות שהתיאורים שלהם דומים ביותר מבחינה סמנטית ל-accounts for leisure travel and vacation. השאילתה מגדירה את הארגומנט top_k לערך 2 בקריאה ל-AI.SEARCH כדי להגביל את מספר התוצאות. השאילתה השנייה היא שאילתת גרף שמחזירה את השם של בעל החשבון יחד עם תיאור החשבון.
DECLARE similar_account DEFAULT ((
SELECT ARRAY_AGG(base.id)
FROM
AI.SEARCH(
(SELECT * FROM graph_search.Account WHERE description_embedding IS NOT NULL),
'description',
'accounts for leisure travel and vacation',
top_k => 2)
));
GRAPH graph_search.FinGraph
MATCH (p:Person)-[:Owns]->(a:Account)
WHERE a.id IN UNNEST(similar_account)
RETURN p.name, a.description;
התוצאה אמורה להיראות כך:
+------+-----------------------------------------+
| name | description |
+------+-----------------------------------------+
| Dana | Saving up for travel |
| Alex | Fund for a refreshing tropical vacation |
+------+-----------------------------------------+
חיפוש קצוות
השאילתות הבאות מראות מי ביצע העברות בחשבון שקשורות לתשלומים על אוכל.
השאילתה הראשונה משתמשת בפונקציה AI.SEARCH כדי לאכלס משתנה בשם food_transfers. המשתנה הזה מכיל את מספר ההזמנה של העברות שההערה המשויכת שלהן הכי דומה מבחינה סמנטית ל-food. השאילתה מגדירה את הארגומנט top_k לערך 2 בקריאה אל
AI.SEARCH כדי להגביל את מספר התוצאות. השאילתה השנייה היא שאילתת גרף שמחזירה את שם בעל החשבון ואת הערת ההעברה.
DECLARE food_transfers DEFAULT ((
SELECT ARRAY_AGG(base.order_number)
FROM
AI.SEARCH(
(SELECT * FROM graph_search.AccountTransferAccount WHERE notes_embedding IS NOT NULL),
'notes',
'food',
top_k => 2)
));
GRAPH graph_search.FinGraph
MATCH (p:Person)-[:Owns]->(:Account)-[t:Transfers]->(:Account)
WHERE t.order_number IN UNNEST(food_transfers)
RETURN p.name, t.notes;
התוצאה אמורה להיראות כך:
+------+---------------------------+
| name | notes |
+------+---------------------------+
| Dana | loved the lunch |
| Lee | for shared cost of dinner |
+------+---------------------------+
יצירת אינדקס וקטורי
אינדקסים של וקטורים מפחיתים את זמן האחזור ואת עלות החישוב של החיפושים. הטבלאות במדריך הזה קטנות מדי כדי להשתמש באינדקס וקטורי. אינדקסים של וקטורים שימושיים כשמדובר בטבלאות גדולות, בדרך כלל עם מיליוני שורות. BigQuery מציע שני סוגים של אינדקסים: IVF ו-TreeAH. מידע נוסף על יצירת אינדקס ובחירת סוג זמין במאמר ניהול אינדקסים של וקטורים.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
כדי למחוק Cloud de Confiance פרויקט:
gcloud projects delete PROJECT_ID