Tutorial ini menunjukkan cara melakukan penelusuran semantik pada data grafik Anda dengan
menggunakan
pembuatan embedding otonom
dan
fungsi AI.SEARCH.
Tujuan
Tutorial ini membahas tugas-tugas berikut:- Buat tabel yang menyimpan informasi tentang orang, akun keuangan, kepemilikan akun, dan transfer akun.
- Gunakan pembuatan embedding otonom untuk menyederhanakan alur kerja pemeliharaan embedding Anda.
- Buat grafik yang menentukan hubungan antara data yang disimpan dalam tabel Anda.
- Gunakan fungsi
AI.SEARCHpada node grafik untuk melakukan penelusuran semantik pada deskripsi akun. - Gunakan fungsi
AI.SEARCHpada tepi grafik Anda untuk melakukan penelusuran semantik pada catatan transfer akun.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Cloud de Confiance by S3NSyang dapat ditagih berikut:
- BigQuery: You incur costs for the data that you process in BigQuery.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.
Sebelum memulai
Konsol
-
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.-
Pastikan Anda memiliki peran berikut di project: BigQuery Data Editor, Project IAM Admin
Memeriksa peran
-
Di konsol Cloud de Confiance , buka halaman IAM.
Buka IAM - Pilih project.
-
Di kolom Akun utama, temukan semua baris yang mengidentifikasi Anda atau grup yang Anda ikuti. Untuk mengetahui grup mana saja yang Anda ikuti, hubungi administrator Anda.
- Untuk semua baris yang menentukan atau menyertakan Anda, periksa kolom Peran untuk melihat apakah daftar peran menyertakan peran yang diperlukan.
Memberikan peran
-
Di konsol Cloud de Confiance , buka halaman IAM.
Buka IAM - Pilih project.
- Klik Grant access.
-
Di kolom New principals, masukkan ID pengguna Anda. Biasanya, ini adalah ID untuk pengguna dalam workforce identity pool. Untuk mengetahui detailnya, baca bagian Merepresentasikan pengguna workforce pool dalam kebijakan IAM, atau hubungi administrator Anda.
- Klik Pilih peran, lalu telusuri peran.
- Untuk memberikan peran tambahan, klik Add another role, lalu tambahkan tiap peran tambahan.
- Klik Simpan.
-
gcloud
-
Instal Google Cloud CLI.
-
Konfigurasi gcloud CLI agar menggunakan identitas gabungan Anda.
Untuk mengetahui informasi selengkapnya, lihat Login ke gcloud CLI dengan identitas gabungan Anda.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Buat atau pilih Cloud de Confiance project.
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Cloud de Confiance project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Cloud de Confiance project yang Anda buat. -
Pilih project Cloud de Confiance yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Cloud de Confiance Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Cloud de Confiance Anda.
Aktifkan BigQuery API:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable bigquery.googleapis.com
-
Berikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/bigquery.dataEditor, roles/resourcemanager.projectIamAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Ganti kode berikut:
PROJECT_ID: Project ID Anda.USER_IDENTIFIER: ID untuk akun akun. Untuk melihat contoh, lihat Merepresentasikan pengguna workforce pool dalam kebijakan IAM.ROLE: Peran IAM yang Anda berikan ke akun pengguna Anda.
Buat tabel
Untuk menyimpan tabel dan grafik yang Anda buat dalam contoh berikut, buat set data.
Kueri berikut membuat set data bernama graph_search:
CREATE SCHEMA IF NOT EXISTS graph_search;
Tabel berikut berisi informasi tentang orang dan akun, serta hubungan antara setiap entitas ini:
Person: informasi tentang orang.Account: informasi tentang rekening bank.PersonOwnAccount: informasi tentang siapa yang memiliki akun mana.AccountTransferAccount: informasi tentang transfer antar-akun.
Untuk membuat tabel ini, jalankan pernyataan
CREATE TABLE berikut:
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
);
Tabel Account dan AccountTransferAccount menggunakan pembuatan embedding otonom untuk mempertahankan embedding untuk kolom description dan notes.
Dalam tutorial ini, kita menggunakan model embeddinggemma-300m karena berjalan di
BigQuery dan berfungsi dengan baik untuk string pendek. Untuk string yang lebih panjang
yang melebihi 128 token, Anda harus memilih model sematan yang berbeda, seperti
text-embedding-005. Untuk mengetahui informasi selengkapnya, baca tentang
memilih model penyematan.
Masukkan data
Kueri berikut menyisipkan beberapa data sampel ke dalam tabel Anda. Pernyataan
INSERT
menghilangkan kolom sematan dan BigQuery akan mengisinya
secara otomatis.
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");
Membuat grafik
Kueri berikut menggunakan
pernyataan CREATE PROPERTY GRAPH
untuk membuat grafik bernama FinGraph dalam set data graph_search.
Tabel Account dan Person adalah tabel node. Tabel
AccountTransferAccount dan PersonOwnAccount
adalah tabel edge, yang merepresentasikan hubungan antar-tabel node.
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
);
Telusuri node
Kueri berikut menunjukkan siapa yang memiliki akun untuk perjalanan santai dan
liburan. Kueri pertama menggunakan
pernyataan DECLARE
untuk membuat variabel bernama
similar_account. Variabel diinisialisasi dalam klausa DEFAULT dengan
panggilan ke AI.SEARCH yang menemukan akun yang
deskripsinya paling mirip secara semantik dengan
accounts for leisure travel and vacation. Kueri menetapkan argumen
top_k ke 2 dalam panggilan ke AI.SEARCH untuk membatasi jumlah
hasil. Kueri kedua adalah kueri grafik yang menampilkan nama pemilik akun beserta deskripsi akun.
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;
Hasilnya mirip dengan berikut ini:
+------+-----------------------------------------+
| name | description |
+------+-----------------------------------------+
| Dana | Saving up for travel |
| Alex | Fund for a refreshing tropical vacation |
+------+-----------------------------------------+
Telusuri tepi
Kueri berikut menunjukkan siapa yang melakukan transfer akun terkait pembayaran makanan.
Kueri pertama menggunakan fungsi AI.SEARCH untuk mengisi
variabel yang disebut food_transfers. Variabel ini menyimpan nomor pesanan
transfer yang catatan terkaitnya paling mirip secara semantik dengan
food. Kueri menetapkan argumen top_k ke 2 dalam panggilan ke
AI.SEARCH untuk membatasi jumlah
hasil. Kueri kedua adalah kueri grafik yang menampilkan nama pemilik akun beserta catatan transfer.
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;
Hasilnya mirip dengan berikut ini:
+------+---------------------------+
| name | notes |
+------+---------------------------+
| Dana | loved the lunch |
| Lee | for shared cost of dinner |
+------+---------------------------+
Membuat indeks vektor
Indeks vektor mengurangi latensi dan biaya komputasi penelusuran Anda. Tabel dalam tutorial ini terlalu kecil untuk menggunakan indeks vektor. Indeks vektor berguna jika tabel Anda besar, biasanya dengan jutaan baris. BigQuery menawarkan dua jenis indeks: IVF dan TreeAH. Untuk mengetahui informasi selengkapnya tentang cara membuat indeks dan memilih jenisnya, lihat Mengelola indeks vektor.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
Menghapus Cloud de Confiance project:
gcloud projects delete PROJECT_ID
Langkah berikutnya
- Pelajari lebih lanjut Grafik BigQuery.
- Pelajari cara membuat dan membuat kueri grafik.
- Pelajari lebih lanjut cara membuat indeks vektor dan melakukan penelusuran semantik dan RAG.