Menelusuri grafik

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.SEARCH pada node grafik untuk melakukan penelusuran semantik pada deskripsi akun.
  • Gunakan fungsi AI.SEARCH pada 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

  1. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  4. Pastikan Anda memiliki peran berikut di project: BigQuery Data Editor, Project IAM Admin

    Memeriksa peran

    1. Di konsol Cloud de Confiance , buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. 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.

    4. Untuk semua baris yang menentukan atau menyertakan Anda, periksa kolom Peran untuk melihat apakah daftar peran menyertakan peran yang diperlukan.

    Memberikan peran

    1. Di konsol Cloud de Confiance , buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. Klik Grant access.
    4. 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.

    5. Klik Pilih peran, lalu telusuri peran.
    6. Untuk memberikan peran tambahan, klik Add another role, lalu tambahkan tiap peran tambahan.
    7. Klik Simpan.

gcloud

  1. Instal Google Cloud CLI.

  2. Konfigurasi gcloud CLI agar menggunakan identitas gabungan Anda.

    Untuk mengetahui informasi selengkapnya, lihat Login ke gcloud CLI dengan identitas gabungan Anda.

  3. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  4. 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 izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat Cloud de Confiance project:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan 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_ID dengan nama project Cloud de Confiance Anda.

  5. Verifikasi bahwa penagihan diaktifkan untuk project Cloud de Confiance Anda.

  6. Aktifkan BigQuery API:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (roles/serviceusage.serviceUsageAdmin), yang berisi izin serviceusage.services.enable. Pelajari cara memberikan peran.

    gcloud services enable bigquery.googleapis.com
  7. Berikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: roles/bigquery.dataEditor, roles/resourcemanager.projectIamAdmin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Ganti kode berikut:

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