1. Pengantar
Dalam codelab ini, Anda akan mempelajari cara men-deploy AlloyDB dan menggunakan bahasa natural AI untuk membuat kueri data dan menyesuaikan konfigurasi untuk kueri yang dapat diprediksi dan efisien. Lab ini adalah bagian dari koleksi lab yang dikhususkan untuk fitur AI AlloyDB. Anda dapat membaca selengkapnya di halaman AI AlloyDB dalam dokumentasi.
Prasyarat
- Pemahaman dasar tentang Google Cloud, konsol
- Keterampilan dasar dalam antarmuka command line dan Cloud Shell
Yang akan Anda pelajari
- Cara men-deploy AlloyDB untuk Postgres
- Cara mengaktifkan natural language AlloyDB AI
- Cara membuat dan menyesuaikan konfigurasi untuk natural language AI
- Cara membuat kueri SQL dan mendapatkan hasil menggunakan bahasa alami
Yang Anda butuhkan
- Akun Google Cloud dan Project Google Cloud
- Browser web seperti Chrome yang mendukung Konsol Google Cloud dan Cloud Shell
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID
). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Mulai Cloud Shell
Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.
Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:
Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:
Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.
3. Sebelum memulai
Aktifkan API
Di dalam Cloud Shell, pastikan project ID Anda sudah disiapkan:
gcloud config set project [YOUR-PROJECT-ID]
Tetapkan variabel lingkungan PROJECT_ID:
PROJECT_ID=$(gcloud config get-value project)
Aktifkan semua layanan yang diperlukan:
gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com \
discoveryengine.googleapis.com \
secretmanager.googleapis.com
Output yang diharapkan
student@cloudshell:~ (test-project-001-402417)$ gcloud config set project test-project-001-402417 Updated property [core/project]. student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project) Your active configuration is: [cloudshell-14650] student@cloudshell:~ (test-project-001-402417)$ student@cloudshell:~ (test-project-001-402417)$ gcloud services enable alloydb.googleapis.com \ compute.googleapis.com \ cloudresourcemanager.googleapis.com \ servicenetworking.googleapis.com \ aiplatform.googleapis.com Operation "operations/acat.p2-4470404856-1f44ebd8-894e-4356-bea7-b84165a57442" finished successfully.
4. Deploy AlloyDB
Buat cluster dan instance utama AlloyDB. Prosedur berikut menjelaskan cara membuat cluster dan instance AlloyDB menggunakan Google Cloud SDK. Jika lebih memilih pendekatan konsol, Anda dapat mengikuti dokumentasi di sini.
Sebelum membuat cluster AlloyDB, kita memerlukan rentang IP pribadi yang tersedia di VPC untuk digunakan oleh instance AlloyDB mendatang. Jika belum ada, kita perlu membuatnya, menetapkannya untuk digunakan oleh layanan Google internal, dan setelah itu kita dapat membuat cluster dan instance.
Buat rentang IP pribadi
Kita perlu menyetel konfigurasi Akses Layanan Pribadi di VPC untuk AlloyDB. Asumsinya di sini adalah kita memiliki jaringan VPC "default" dalam project dan jaringan tersebut akan digunakan untuk semua tindakan.
Buat rentang IP pribadi:
gcloud compute addresses create psa-range \
--global \
--purpose=VPC_PEERING \
--prefix-length=24 \
--description="VPC private service access" \
--network=default
Buat koneksi pribadi menggunakan rentang IP yang dialokasikan:
gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=psa-range \
--network=default
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-402417)$ gcloud compute addresses create psa-range \ --global \ --purpose=VPC_PEERING \ --prefix-length=24 \ --description="VPC private service access" \ --network=default Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/global/addresses/psa-range]. student@cloudshell:~ (test-project-402417)$ gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=psa-range \ --network=default Operation "operations/pssn.p24-4470404856-595e209f-19b7-4669-8a71-cbd45de8ba66" finished successfully. student@cloudshell:~ (test-project-402417)$
Buat Cluster AlloyDB
Di bagian ini, kita akan membuat cluster AlloyDB di region us-central1.
Tentukan sandi untuk pengguna postgres. Anda dapat menentukan sandi Anda sendiri atau menggunakan fungsi acak untuk membuatnya
export PGPASSWORD=`openssl rand -hex 12`
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`
Catat sandi PostgreSQL untuk penggunaan berikutnya.
echo $PGPASSWORD
Anda akan memerlukan sandi tersebut pada masa mendatang untuk terhubung ke instance sebagai pengguna postgres. Sebaiknya tulis atau salin kode tersebut ke suatu tempat agar dapat digunakan nanti.
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD bbefbfde7601985b0dee5723
Membuat Cluster Uji Coba Gratis
Jika belum pernah menggunakan AlloyDB, Anda dapat membuat cluster uji coba gratis:
Tentukan region dan nama cluster AlloyDB. Kita akan menggunakan region us-central1 dan alloydb-aip-01 sebagai nama cluster:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
Jalankan perintah untuk membuat cluster:
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION \
--subscription-type=TRIAL
Output konsol yang diharapkan:
export REGION=us-central1 export ADBCLUSTER=alloydb-aip-01 gcloud alloydb clusters create $ADBCLUSTER \ --password=$PGPASSWORD \ --network=default \ --region=$REGION \ --subscription-type=TRIAL Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4 Creating cluster...done.
Buat instance utama AlloyDB untuk cluster di sesi cloud shell yang sama. Jika koneksi terputus, Anda harus menentukan variabel lingkungan nama cluster dan region lagi.
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=8 \
--region=$REGION \
--cluster=$ADBCLUSTER
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \ --instance-type=PRIMARY \ --cpu-count=8 \ --region=$REGION \ --availability-type ZONAL \ --cluster=$ADBCLUSTER Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721 Creating instance...done.
Buat Cluster Standar AlloyDB
Jika ini bukan cluster AlloyDB pertama Anda dalam project, lanjutkan pembuatan cluster standar.
Tentukan region dan nama cluster AlloyDB. Kita akan menggunakan region us-central1 dan alloydb-aip-01 sebagai nama cluster:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
Jalankan perintah untuk membuat cluster:
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION
Output konsol yang diharapkan:
export REGION=us-central1 export ADBCLUSTER=alloydb-aip-01 gcloud alloydb clusters create $ADBCLUSTER \ --password=$PGPASSWORD \ --network=default \ --region=$REGION Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4 Creating cluster...done.
Buat instance utama AlloyDB untuk cluster di sesi cloud shell yang sama. Jika koneksi terputus, Anda harus menentukan variabel lingkungan nama cluster dan region lagi.
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=2 \
--region=$REGION \
--cluster=$ADBCLUSTER
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \ --instance-type=PRIMARY \ --cpu-count=2 \ --region=$REGION \ --availability-type ZONAL \ --cluster=$ADBCLUSTER Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721 Creating instance...done.
5. Menyiapkan Database
Kita perlu membuat database, mengaktifkan integrasi Vertex AI, membuat objek database, dan mengimpor data.
Memberikan Izin yang Diperlukan ke AlloyDB
Tambahkan izin Vertex AI ke agen layanan AlloyDB.
Buka tab Cloud Shell lain menggunakan tanda "+" di bagian atas.
Di tab Cloud Shell baru, jalankan:
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project) Your active configuration is: [cloudshell-11039] student@cloudshell:~ (test-project-001-402417)$ gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \ --role="roles/aiplatform.user" Updated IAM policy for project [test-project-001-402417]. bindings: - members: - serviceAccount:service-4470404856@gcp-sa-alloydb.iam.gserviceaccount.com role: roles/aiplatform.user - members: ... etag: BwYIEbe_Z3U= version: 1
Tutup tab dengan menjalankan perintah "exit" di tab:
exit
Menghubungkan ke AlloyDB Studio
Di bab-bab berikutnya, semua perintah SQL yang memerlukan koneksi ke database dapat dijalankan secara alternatif di AlloyDB Studio. Untuk menjalankan perintah, Anda harus membuka antarmuka konsol web untuk cluster AlloyDB dengan mengklik instance utama.
Kemudian, klik AlloyDB Studio di sebelah kiri:
Pilih database postgres, pengguna postgres, dan berikan sandi yang dicatat saat kita membuat cluster. Kemudian, klik tombol "Autentikasi".
Tindakan ini akan membuka antarmuka AlloyDB Studio. Untuk menjalankan perintah di database, klik tab "Editor 1" di sebelah kanan.
Tindakan ini akan membuka antarmuka tempat Anda dapat menjalankan perintah SQL
Buat Database
Mulai cepat pembuatan database.
Di Editor AlloyDB Studio, jalankan perintah berikut.
Buat database:
CREATE DATABASE quickstart_db
Output yang diharapkan:
Statement executed successfully
Hubungkan ke quickstart_db
Hubungkan kembali ke studio menggunakan tombol untuk mengganti pengguna/database.
Pilih database quickstart_db baru dari daftar dropdown dan gunakan pengguna dan sandi yang sama seperti sebelumnya.
Tindakan ini akan membuka koneksi baru tempat Anda dapat menggunakan objek dari database quickstart_db.
6. Data Sampel
Sekarang kita perlu membuat objek di database dan memuat data. Kita akan menggunakan toko "Cymbal ecomm" fiktif dengan serangkaian tabel untuk toko online. Database ini berisi beberapa tabel yang dihubungkan oleh kuncinya yang menyerupai skema {i>database<i} relasional.
Kumpulan data disiapkan dan ditempatkan sebagai file SQL yang dapat dimuat ke database menggunakan antarmuka impor. Di Cloud Shell, jalankan perintah berikut:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters import $ADBCLUSTER --region=$REGION --database=quickstart_db --gcs-uri='gs://sample-data-and-media/ecomm-retail/ecom_generic.sql' --user=postgres --sql
Perintah ini menggunakan AlloyDB SDK, membuat skema ecomm, lalu mengimpor data contoh langsung dari bucket GCS ke database, membuat semua objek yang diperlukan, dan menyisipkan data.
Setelah mengimpor, kita dapat memeriksa tabel di AlloyDB Studio
Kemudian, verifikasi jumlah baris dalam tabel.
7. Mengonfigurasi NL SQL
Dalam bab ini, kita akan mengonfigurasi NL agar berfungsi dengan contoh skema Anda
Menginstal ekstensi alloydb_nl_ai
Kita perlu menginstal ekstensi alloydb_ai_nl ke database. Sebelum melakukannya, kita harus menyetel flag database alloydb_ai_nl.enabled ke on.
Di sesi Cloud Shell, jalankan
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb instances update $ADBCLUSTER-pr \
--cluster=$ADBCLUSTER \
--region=$REGION \
--database-flags=alloydb_ai_nl.enabled=on
Tindakan ini akan memulai update instance. Anda dapat melihat status instance yang sedang diperbarui di konsol web:
Setelah instance diperbarui (status instance berwarna hijau), Anda dapat mengaktifkan ekstensi alloydb_ai_nl.
Di AlloyDB Studio, jalankan
CREATE EXTENSION IF NOT EXISTS google_ml_integration;
CREATE EXTENSION alloydb_ai_nl cascade;
Membuat konfigurasi bahasa alami
Untuk menggunakan ekstensi, kita perlu membuat konfigurasi. Konfigurasi ini diperlukan untuk mengaitkan aplikasi dengan skema, template kueri, dan endpoint model tertentu. Mari buat konfigurasi dengan ID cymbal_ecomm_config.
Di AlloyDB Studio, jalankan
SELECT
alloydb_ai_nl.g_create_configuration(
'cymbal_ecomm_config'
);
Sekarang kita dapat mendaftarkan skema ecomm di konfigurasi. Kita telah mengimpor data ke dalam skema ecomm, jadi kita akan menambahkan skema tersebut ke konfigurasi NL.
SELECT
alloydb_ai_nl.g_manage_configuration(
operation => 'register_schema',
configuration_id_in => 'cymbal_ecomm_config',
schema_names_in => '{ecomm}'
);
8. Menambahkan Konteks ke NL SQL
Menambahkan konteks umum
Kita dapat menambahkan beberapa konteks untuk skema terdaftar kita. Konteks ini seharusnya membantu menghasilkan hasil yang lebih baik sebagai respons terhadap permintaan pengguna. Misalnya, kita dapat mengatakan bahwa satu merek adalah merek pilihan pengguna jika tidak ditentukan secara eksplisit. Mari jadikan Clades (merek fiktif) sebagai merek default kita.
Di AlloyDB Studio, jalankan:
SELECT
alloydb_ai_nl.g_manage_configuration(
'add_general_context',
'cymbal_ecomm_config',
general_context_in => '{"If the user doesn''t clearly define preferred brand then use Clades."}'
);
Mari kita verifikasi cara kerja konteks umum untuk kita.
Di AlloyDB Studio, jalankan:
SELECT
alloydb_ai_nl.get_sql(
'cymbal_ecomm_config', -- nl_config
'How many products do we have of our preferred brand?' -- nl question
);
Kueri yang dihasilkan menggunakan merek default kita yang ditentukan sebelumnya dalam konteks umum:
{"sql": "SELECT\n COUNT(*)\nFROM \"ecomm\".\"inventory_items\"\nWHERE\n \"product_brand\" = 'Clades';", "method": "default", "prompt": "", "retries": 0, "time(ms)": {"llm": 498.268000, "magic": 885.226000}, "error_msg": "", "nl_question": "How many products do we have of our preferred brand?", "toolbox_used": false}
Kita dapat membersihkannya dan menghasilkan hanya pernyataan SQL sebagai output.
Contoh:
SELECT
alloydb_ai_nl.get_sql(
'cymbal_ecomm_config', -- nl_config
'How many products do we have of our preferred brand?' -- nl question
) ->> 'sql';
Output yang dihapus:
SELECT COUNT(*) FROM "ecomm"."inventory_items" WHERE "product_brand" = 'Clades';
Anda melihat bahwa aplikasi tersebut otomatis memilih tabel inventory_items, bukan produk, dan menggunakannya untuk membuat kueri. Hal itu mungkin berhasil untuk beberapa kasus, tetapi tidak untuk skema kami. Dalam kasus kami, tabel inventory_items berfungsi untuk melacak penjualan yang dapat menyesatkan jika Anda tidak memiliki informasi orang dalam. Kita akan memeriksa nanti cara membuat kueri kita lebih akurat.
Konteks skema
Konteks skema menjelaskan objek skema seperti tabel, tampilan, dan kolom individual yang menyimpan informasi sebagai komentar dalam objek skema.
Kita dapat membuatnya secara otomatis untuk semua objek skema dalam konfigurasi yang ditentukan menggunakan kueri berikut:
SELECT
alloydb_ai_nl.generate_schema_context(
'cymbal_ecomm_config', -- nl_config
TRUE
);
Parameter "TRUE" mengarahkan kita untuk membuat ulang konteks dan menggantinya. Eksekusi akan memakan waktu beberapa saat, bergantung pada model data. Makin banyak hubungan dan koneksi yang Anda miliki, makin lama waktu yang dibutuhkan.
Setelah membuat konteks, kita dapat memeriksa apa yang telah dibuat untuk tabel item inventaris menggunakan kueri:
SELECT
object_context
FROM
alloydb_ai_nl.generated_schema_context_view
WHERE
schema_object = 'ecomm.inventory_items';
Output yang dihapus:
The `ecomm.inventory_items` table stores information about individual inventory items in an e-commerce system. Each item is uniquely identified by an `id` (primary key). The table tracks the `product_id` (foreign key referencing `ecomm.products`), the timestamp when the item was `created_at`, and the timestamp when it was `sold_at` (which can be null if the item hasn't been sold). The `cost` represents the cost of the item to the business, while `product_retail_price` is the price at which the item is sold. Additional product details include `product_category`, `product_name`, `product_brand`, `product_department`, and `product_sku` (stock keeping unit). The `product_distribution_center_id` (foreign key referencing `ecomm.distribution_centers`) indicates the distribution center where the item is located. The table includes information on both men's and women's apparel across various categories like jeans, tops & tees, activewear, sleep & lounge, intimates, swim, and accessories. The `sold_at` column indicates whether an item has been sold and when.
Sepertinya deskripsi tidak memiliki beberapa bagian penting yang menunjukkan pergerakan item dalam tabel inventory_items. Kita dapat memperbaruinya dengan menambahkan informasi utama ini ke konteks untuk relasi ecomm.inventory_items.
SELECT alloydb_ai_nl.update_generated_relation_context(
'ecomm.inventory_items',
'The `ecomm.inventory_items` table stores information about moving and sales of inventory items in an e-commerce system. Each movement is uniquely identified by an `id` (primary key) and used in order_items table as `inventory_item_id`. The table tracks sales and movements for the `product_id` (foreign key referencing `ecomm.products`), the timestamp when the movement for the item was `created_at`, and the timestamp when it was `sold_at` (which can be null if the item hasn''t been sold). The `cost` represents the cost of the item to the business, while `product_retail_price` is the price at which the item is sold. Additional product details include `product_category`, `product_name`, `product_brand`, `product_department`, and `product_sku` (stock keeping unit). The `product_distribution_center_id` (foreign key referencing `ecomm.distribution_centers`) indicates the distribution center where the item is located. The table includes information on both men''s and women''s apparel across various categories like jeans, tops & tees, activewear, sleep & lounge, intimates, swim, and accessories. The `sold_at` column indicates whether an item has been sold and when.'
);
Selain itu, kita dapat memverifikasi akurasi deskripsi untuk tabel produk.
SELECT
object_context
FROM
alloydb_ai_nl.generated_schema_context_view
WHERE
schema_object = 'ecomm.products';
Saya mendapati bahwa konteks yang dibuat secara otomatis untuk tabel produk cukup akurat dan tidak memerlukan perubahan.
Saya juga memeriksa informasi tentang setiap kolom di kedua tabel dan ternyata sudah benar.
Mari terapkan konteks yang dihasilkan untuk ecomm.inventory_items dan ecomm.products ke konfigurasi kita.
SELECT alloydb_ai_nl.apply_generated_relation_context(
'ecomm.inventory_items',
TRUE
);
SELECT alloydb_ai_nl.apply_generated_relation_context(
'ecomm.products',
TRUE
);
Apakah Anda ingat kueri kita untuk membuat SQL bagi pertanyaan 'Berapa banyak produk merek pilihan kita yang kita miliki?' ? Sekarang kita dapat mengulanginya dan melihat apakah outputnya berubah.
SELECT
alloydb_ai_nl.get_sql(
'cymbal_ecomm_config', -- nl_config
'How many products do we have of our preferred brand?' -- nl question
) ->> 'sql';
Berikut output barunya.
SELECT COUNT(*) FROM "ecomm"."products" WHERE "brand" = 'Clades';
Sekarang, kode tersebut memeriksa ecomm.products yang lebih akurat dan menampilkan sekitar 300 produk, bukan 5.000 operasi dengan item inventaris.
9. Bekerja dengan Indeks Nilai
Penautan nilai memperkaya kueri bahasa alami dengan menghubungkan frasa nilai ke jenis konsep dan nama kolom yang telah terdaftar sebelumnya. Hal ini dapat membantu membuat hasil lebih dapat diprediksi.
Mengonfigurasi Indeks Nilai
Kita dapat membuat kueri menggunakan kolom merek di tabel produk dan menelusuri produk dengan merek yang lebih stabil dengan menentukan jenis konsep dan mengaitkannya dengan kolom ecomm.products.brand.
Mari buat konsep dan kaitkan dengan kolom:
SELECT alloydb_ai_nl.add_concept_type(
concept_type_in => 'brand_name',
match_function_in => 'alloydb_ai_nl.get_concept_and_value_generic_entity_name',
additional_info_in => '{
"description": "Concept type for brand name.",
"examples": "SELECT alloydb_ai_nl.get_concept_and_value_generic_entity_name(''Auto Forge'')" }'::jsonb
);
SELECT alloydb_ai_nl.associate_concept_type(
'ecomm.products.brand',
'brand_name',
'cymbal_ecomm_config'
);
Anda dapat memverifikasi konsep dengan membuat kueri alloydb_ai_nl.list_concept_types()
SELECT alloydb_ai_nl.list_concept_types();
Kemudian, kita dapat membuat indeks dalam konfigurasi untuk semua asosiasi yang dibuat dan bawaan:
SELECT alloydb_ai_nl.create_value_index('cymbal_ecomm_config');
Menggunakan Indeks Nilai
Jika Anda menjalankan kueri untuk membuat SQL menggunakan nama merek, tetapi tidak menentukan bahwa itu adalah nama merek, hal ini akan membantu mengidentifikasi entity dan kolom dengan benar. Berikut kuerinya:
SELECT
alloydb_ai_nl.get_sql(
'cymbal_ecomm_config', -- nl_config
'How many Clades do we have?' -- nl question
) ->> 'sql';
Output menunjukkan identifikasi yang benar dari kata 'Clades' sebagai nama merek
SELECT COUNT(*) FROM "ecomm"."products" WHERE "brand" = 'Clades';
10. Menggunakan Template Kueri
Template kueri membantu menentukan kueri yang stabil untuk aplikasi penting bisnis, sehingga mengurangi ketidakpastian dan meningkatkan akurasi.
Membuat Template Kueri
Mari buat template kueri yang menggabungkan beberapa tabel untuk mendapatkan informasi tentang pelanggan yang membeli produk "Republic Outpost" tahun lalu. Kita tahu bahwa kueri dapat menggunakan tabel ecomm.products atau tabel ecomm.inventory_items karena keduanya memiliki informasi tentang merek. Namun, tabel products memiliki 15 kali lebih sedikit baris dan indeks pada kunci utama untuk gabungan. Mungkin lebih efisien menggunakan tabel produk. Jadi, kita membuat template untuk kueri.
SELECT alloydb_ai_nl.add_template(
nl_config_id => 'cymbal_ecomm_config',
intent => 'List the last names and the country of all customers who bought products of `Republic Outpost` in the last year.',
sql => 'SELECT DISTINCT u."last_name", u."country" FROM "ecomm"."users" AS u INNER JOIN "ecomm"."order_items" AS oi ON u.id = oi."user_id" INNER JOIN "ecomm"."products" AS ep ON oi.product_id = ep.id WHERE ep.brand = ''Republic Outpost'' AND oi.created_at >= DATE_TRUNC(''year'', CURRENT_DATE - INTERVAL ''1 year'') AND oi.created_at < DATE_TRUNC(''year'', CURRENT_DATE)',
sql_explanation => 'To answer this question, JOIN `ecomm.users` with `ecom.order_items` on having the same `users.id` and `order_items.user_id`, and JOIN the result with ecom.products on having the same `order_items.product_id` and `products.id`. Then filter rows with products.brand = ''Republic Outpost'' and by `order_items.created_at` for the last year. Return the `last_name` and the `country` of the users with matching records.',
check_intent => TRUE
);
Sekarang kita dapat meminta untuk membuat kueri.
SELECT
alloydb_ai_nl.get_sql(
'cymbal_ecomm_config', -- nl_config
'Show me last name and country about customers who bought "Republic Outpost" products last year.
' -- nl question
) ->> 'sql';
Dan menghasilkan output yang diinginkan.
SELECT DISTINCT u."last_name", u."country" FROM "ecomm"."users" AS u INNER JOIN "ecomm"."order_items" AS oi ON u.id = oi."user_id" INNER JOIN "ecomm"."products" AS ep ON oi.product_id = ep.id WHERE ep.brand = 'Republic Outpost' AND oi.created_at >= DATE_TRUNC('year', CURRENT_DATE - INTERVAL '1 year') AND oi.created_at < DATE_TRUNC('year', CURRENT_DATE)
Atau, Anda dapat menjalankan kueri secara langsung menggunakan kueri berikut:
SELECT
alloydb_ai_nl.execute_nl_query(
'Show me last name and country about customers who bought "Republic Outpost" products last year.',
'cymbal_ecomm_config'
);
Fungsi ini akan menampilkan hasil dalam format JSON yang dapat diuraikan.
execute_nl_query -------------------------------------------------------- {"last_name":"Adams","country":"China"} {"last_name":"Adams","country":"Germany"} {"last_name":"Aguilar","country":"China"} {"last_name":"Allen","country":"China"}
11. Membersihkan lingkungan
Hancurkan instance dan cluster AlloyDB setelah Anda selesai mengerjakan lab
Hapus cluster AlloyDB dan semua instance
Cluster tersebut dihancurkan dengan opsi paksa yang juga akan menghapus semua instance milik cluster tersebut.
Di Cloud Shell, tentukan variabel project dan lingkungan jika koneksi Anda terputus dan semua setelan sebelumnya hilang:
gcloud config set project <your project id>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)
Hapus cluster:
gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-001-402417)$ gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force All of the cluster data will be lost when the cluster is deleted. Do you want to continue (Y/n)? Y Operation ID: operation-1697820178429-6082890a0b570-4a72f7e4-4c5df36f Deleting cluster...done.
Hapus Cadangan AlloyDB
Hapus semua cadangan AlloyDB untuk cluster:
for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done
Output konsol yang diharapkan:
student@cloudshell:~ (test-project-001-402417)$ for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done Operation ID: operation-1697826266108-60829fb7b5258-7f99dc0b-99f3c35f Deleting backup...done.
12. Selamat
Selamat, Anda telah menyelesaikan codelab. Sekarang Anda dapat mencoba menerapkan solusi Anda sendiri menggunakan fitur NL2SQL AlloyDB. Sebaiknya coba codelab lain yang terkait dengan AlloyDB dan AlloyDB AI. Anda dapat memeriksa cara kerja sematan multimodal di AlloyDB dalam codelab ini.
Yang telah kita bahas
- Cara men-deploy AlloyDB untuk Postgres
- Cara mengaktifkan natural language AlloyDB AI
- Cara membuat dan menyesuaikan konfigurasi untuk natural language AI
- Cara membuat kueri SQL dan mendapatkan hasil menggunakan bahasa alami
13. Survei
Output: