1. Giới thiệu
Trong lớp học lập trình này, bạn sẽ tìm hiểu cách triển khai AlloyDB và sử dụng ngôn ngữ tự nhiên dựa trên AI để truy vấn dữ liệu cũng như điều chỉnh cấu hình cho các truy vấn có thể dự đoán và hiệu quả. Phòng thí nghiệm này là một phần của bộ sưu tập phòng thí nghiệm dành riêng cho các tính năng AI của AlloyDB. Bạn có thể đọc thêm trên trang AlloyDB AI trong tài liệu.
Điều kiện tiên quyết
- Có kiến thức cơ bản về Google Cloud Console
- Kỹ năng cơ bản về giao diện dòng lệnh và Cloud Shell
Kiến thức bạn sẽ học được
- Cách triển khai AlloyDB cho Postgres
- Cách bật ngôn ngữ tự nhiên của AI AlloyDB
- Cách tạo và điều chỉnh cấu hình cho ngôn ngữ tự nhiên của AI
- Cách tạo truy vấn SQL và nhận kết quả bằng ngôn ngữ tự nhiên
Bạn cần có
- Tài khoản Google Cloud và dự án trên Google Cloud
- Một trình duyệt web như Chrome hỗ trợ Google Cloud Console và Cloud Shell
2. Thiết lập và yêu cầu
Thiết lập môi trường theo tốc độ của riêng bạn
- Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.
- Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự mà các API của Google không sử dụng. Bạn luôn có thể cập nhật thông tin này.
- Mã dự án là giá trị duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là
PROJECT_ID
). Nếu không thích mã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Hoặc bạn có thể thử tên người dùng của riêng mình để xem tên đó có được chấp nhận hay không. Bạn không thể thay đổi tên này sau bước này và tên này sẽ tồn tại trong suốt thời gian của dự án. - Để bạn nắm được thông tin, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
- Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.
Khởi động Cloud Shell
Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.
Trên Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:
Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:
Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện mọi thao tác trong lớp học lập trình này trong trình duyệt. Bạn không cần cài đặt bất cứ thứ gì.
3. Trước khi bắt đầu
Bật API
Trong Cloud Shell, hãy đảm bảo bạn đã thiết lập mã dự án:
gcloud config set project [YOUR-PROJECT-ID]
Đặt biến môi trường PROJECT_ID:
PROJECT_ID=$(gcloud config get-value project)
Bật tất cả các dịch vụ cần thiết:
gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com \
discoveryengine.googleapis.com \
secretmanager.googleapis.com
Kết quả đầu ra dự kiến
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. Triển khai AlloyDB
Tạo cụm và phiên bản chính AlloyDB. Quy trình sau đây mô tả cách tạo một cụm và phiên bản AlloyDB bằng Google Cloud SDK. Nếu muốn sử dụng phương pháp dựa trên bảng điều khiển, bạn có thể tham khảo tài liệu tại đây.
Trước khi tạo một cụm AlloyDB, chúng ta cần có một dải IP riêng tư có sẵn trong VPC để phiên bản AlloyDB trong tương lai sử dụng. Nếu chưa có, chúng ta cần tạo, chỉ định để các dịch vụ nội bộ của Google sử dụng. Sau đó, chúng ta sẽ có thể tạo cụm và phiên bản.
Tạo dải IP riêng tư
Chúng ta cần định cấu hình chế độ cài đặt Private Service Access trong VPC cho AlloyDB. Giả định ở đây là chúng ta có mạng VPC "mặc định" trong dự án và mạng này sẽ được dùng cho mọi hành động.
Tạo dải IP riêng tư:
gcloud compute addresses create psa-range \
--global \
--purpose=VPC_PEERING \
--prefix-length=24 \
--description="VPC private service access" \
--network=default
Tạo kết nối riêng tư bằng dải IP được phân bổ:
gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=psa-range \
--network=default
Kết quả đầu ra dự kiến trên bảng điều khiển:
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)$
Tạo cụm AlloyDB
Trong phần này, chúng ta sẽ tạo một cụm AlloyDB ở khu vực us-central1.
Xác định mật khẩu cho người dùng postgres. Bạn có thể tự xác định mật khẩu hoặc sử dụng một hàm ngẫu nhiên để tạo mật khẩu
export PGPASSWORD=`openssl rand -hex 12`
Kết quả đầu ra dự kiến trên bảng điều khiển:
student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`
Ghi lại mật khẩu PostgreSQL để sử dụng sau này.
echo $PGPASSWORD
Sau này, bạn sẽ cần mật khẩu đó để kết nối với phiên bản dưới dạng người dùng postgres. Bạn nên ghi lại hoặc sao chép mã này vào đâu đó để có thể sử dụng sau.
Kết quả đầu ra dự kiến trên bảng điều khiển:
student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD bbefbfde7601985b0dee5723
Tạo Cụm dùng thử miễn phí
Nếu chưa sử dụng AlloyDB, bạn có thể tạo một cụm dùng thử miễn phí:
Xác định khu vực và tên cụm AlloyDB. Chúng ta sẽ sử dụng khu vực us-central1 và alloydb-aip-01 làm tên cụm:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
Chạy lệnh để tạo cụm:
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION \
--subscription-type=TRIAL
Kết quả đầu ra dự kiến trên bảng điều khiển:
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.
Tạo một phiên bản chính AlloyDB cho cụm của chúng ta trong cùng một phiên cloud shell. Nếu bị ngắt kết nối, bạn sẽ cần xác định lại các biến môi trường tên vùng và tên cụm.
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=8 \
--region=$REGION \
--cluster=$ADBCLUSTER
Kết quả đầu ra dự kiến trên bảng điều khiển:
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.
Tạo Cụm AlloyDB chuẩn
Nếu đây không phải là cụm AlloyDB đầu tiên của bạn trong dự án, hãy tiếp tục tạo một cụm tiêu chuẩn.
Xác định khu vực và tên cụm AlloyDB. Chúng ta sẽ sử dụng khu vực us-central1 và alloydb-aip-01 làm tên cụm:
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
Chạy lệnh để tạo cụm:
gcloud alloydb clusters create $ADBCLUSTER \
--password=$PGPASSWORD \
--network=default \
--region=$REGION
Kết quả đầu ra dự kiến trên bảng điều khiển:
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.
Tạo một phiên bản chính AlloyDB cho cụm của chúng ta trong cùng một phiên cloud shell. Nếu bị ngắt kết nối, bạn sẽ cần xác định lại các biến môi trường tên vùng và tên cụm.
gcloud alloydb instances create $ADBCLUSTER-pr \
--instance-type=PRIMARY \
--cpu-count=2 \
--region=$REGION \
--cluster=$ADBCLUSTER
Kết quả đầu ra dự kiến trên bảng điều khiển:
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. Chuẩn bị cơ sở dữ liệu
Chúng ta cần tạo một cơ sở dữ liệu, bật tính năng tích hợp Vertex AI, tạo các đối tượng cơ sở dữ liệu và nhập dữ liệu.
Cấp các quyền cần thiết cho AlloyDB
Thêm quyền Vertex AI vào đơn vị hỗ trợ dịch vụ AlloyDB.
Mở một thẻ Cloud Shell khác bằng cách sử dụng dấu "+" ở trên cùng.
Trong thẻ cloud shell mới, hãy thực thi:
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"
Kết quả đầu ra dự kiến trên bảng điều khiển:
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
Đóng thẻ bằng lệnh thực thi "exit" trong thẻ:
exit
Kết nối với AlloyDB Studio
Trong các chương sau, bạn có thể thực thi tất cả các lệnh SQL yêu cầu kết nối với cơ sở dữ liệu trong AlloyDB Studio. Để chạy lệnh này, bạn cần mở giao diện bảng điều khiển web cho cụm AlloyDB bằng cách nhấp vào phiên bản chính.
Sau đó, hãy nhấp vào AlloyDB Studio ở bên trái:
Chọn cơ sở dữ liệu postgres, người dùng postgres và cung cấp mật khẩu đã ghi lại khi chúng ta tạo cụm. Sau đó, hãy nhấp vào nút "Xác thực".
Thao tác này sẽ mở giao diện AlloyDB Studio. Để chạy các lệnh trong cơ sở dữ liệu, bạn nhấp vào thẻ "Trình chỉnh sửa 1" ở bên phải.
Thao tác này sẽ mở giao diện nơi bạn có thể chạy các lệnh SQL
Tạo cơ sở dữ liệu
Tạo cơ sở dữ liệu bắt đầu nhanh.
Trong Trình chỉnh sửa AlloyDB Studio, hãy thực thi lệnh sau.
Tạo cơ sở dữ liệu:
CREATE DATABASE quickstart_db
Kết quả đầu ra dự kiến:
Statement executed successfully
Kết nối với quickstart_db
Kết nối lại với studio bằng nút chuyển đổi người dùng/cơ sở dữ liệu.
Chọn cơ sở dữ liệu quickstart_db mới trong danh sách thả xuống và sử dụng cùng một người dùng và mật khẩu như trước.
Thao tác này sẽ mở một kết nối mới để bạn có thể làm việc với các đối tượng trong cơ sở dữ liệu quickstart_db.
6. Dữ liệu mẫu
Bây giờ, chúng ta cần tạo các đối tượng trong cơ sở dữ liệu và tải dữ liệu. Chúng ta sẽ sử dụng một cửa hàng "Cymbal ecomm" hư cấu với một bộ bảng cho các cửa hàng trực tuyến. Cơ sở dữ liệu này chứa nhiều bảng được kết nối bằng các khoá, tương tự như một giản đồ cơ sở dữ liệu quan hệ.
Tập dữ liệu được chuẩn bị và đặt dưới dạng tệp SQL có thể được tải vào cơ sở dữ liệu bằng giao diện nhập. Trong Cloud Shell, hãy thực thi các lệnh sau:
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
Lệnh này đang sử dụng AlloyDB SDK và tạo một giản đồ thương mại điện tử, sau đó nhập dữ liệu mẫu trực tiếp từ vùng chứa GCS vào cơ sở dữ liệu, tạo tất cả các đối tượng cần thiết và chèn dữ liệu.
Sau khi nhập, chúng ta có thể kiểm tra các bảng trong AlloyDB Studio
Và xác minh số lượng hàng trong bảng.
7. Định cấu hình SQL ngôn ngữ tự nhiên
Trong chương này, chúng ta sẽ định cấu hình NL để hoạt động với giản đồ mẫu của bạn
Cài đặt tiện ích alloydb_nl_ai
Chúng ta cần cài đặt tiện ích alloydb_ai_nl vào cơ sở dữ liệu. Trước khi làm như vậy, chúng ta phải đặt cờ cơ sở dữ liệu alloydb_ai_nl.enabled thành on.
Trong phiên Cloud Shell, hãy thực thi
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
Thao tác này sẽ bắt đầu quá trình cập nhật phiên bản. Bạn có thể xem trạng thái của phiên bản đang cập nhật trong bảng điều khiển web:
Khi phiên bản được cập nhật (trạng thái phiên bản là màu xanh lục), bạn có thể bật tiện ích alloydb_ai_nl.
Trong AlloyDB Studio, hãy thực thi
CREATE EXTENSION IF NOT EXISTS google_ml_integration;
CREATE EXTENSION alloydb_ai_nl cascade;
Tạo cấu hình ngôn ngữ tự nhiên
Để sử dụng các tiện ích, chúng ta cần tạo một cấu hình. Bạn cần phải định cấu hình để liên kết các ứng dụng với một số giản đồ, mẫu truy vấn và điểm cuối mô hình. Hãy tạo một cấu hình có mã nhận dạng là cymbal_ecomm_config.
Trong AlloyDB Studio, hãy thực thi
SELECT
alloydb_ai_nl.g_create_configuration(
configuration_id => 'cymbal_ecomm_config'
);
Bây giờ, chúng ta có thể đăng ký giản đồ thương mại điện tử trong cấu hình. Chúng tôi đã nhập dữ liệu vào giản đồ thương mại điện tử, vì vậy, chúng tôi sẽ thêm giản đồ đó vào cấu hình NL.
SELECT
alloydb_ai_nl.g_manage_configuration(
operation => 'register_schema',
configuration_id_in => 'cymbal_ecomm_config',
schema_names_in => '{ecomm}'
);
8. Thêm bối cảnh vào SQL bằng ngôn ngữ tự nhiên
Thêm bối cảnh chung
Chúng ta có thể thêm một số bối cảnh cho giản đồ đã đăng ký. Ngữ cảnh này được cho là sẽ giúp tạo ra kết quả tốt hơn để đáp lại yêu cầu của người dùng. Ví dụ: chúng ta có thể nói rằng một thương hiệu là thương hiệu mà người dùng ưu tiên khi thương hiệu đó không được xác định rõ ràng. Hãy đặt Clades (thương hiệu hư cấu) làm thương hiệu mặc định.
Trong AlloyDB Studio, hãy thực thi:
SELECT
alloydb_ai_nl.g_manage_configuration(
operation => 'add_general_context',
configuration_id_in => 'cymbal_ecomm_config',
general_context_in => '{"If the user doesn''t clearly define preferred brand then use Clades."}'
);
Hãy xác minh cách ngữ cảnh chung hoạt động đối với chúng ta.
Trong AlloyDB Studio, hãy thực thi:
SELECT
alloydb_ai_nl.get_sql(
nl_config_id => 'cymbal_ecomm_config',
nl_question => 'How many products do we have of our preferred brand?'
);
Truy vấn được tạo đang sử dụng thương hiệu mặc định của chúng tôi được xác định trước đó trong ngữ cảnh chung:
{"sql": "SELECT count(*) FROM \"ecomm\".\"products\" WHERE \"brand\" = 'Clades'", "method": "default", "prompt": "", "retries": 0, "time(ms)": {"llm": 505.628000, "magic": 424.019000}, "error_msg": "", "nl_question": "How many products do we have of our preferred brand?", "toolbox_used": false}
Chúng ta có thể dọn dẹp và chỉ tạo câu lệnh SQL làm đầu ra.
Ví dụ:
SELECT
alloydb_ai_nl.get_sql(
nl_config_id => 'cymbal_ecomm_config',
nl_question => 'How many products do we have of our preferred brand?'
) ->> 'sql';
Kết quả đã xoá:
SELECT count(*) FROM "ecomm"."products" WHERE "brand" = 'Clades'
Bạn nhận thấy rằng hệ thống đã tự động chọn bảng inventory_items thay vì bảng products và dùng bảng này để tạo truy vấn. Điều đó có thể hiệu quả trong một số trường hợp nhưng không hiệu quả đối với giản đồ của chúng tôi. Trong trường hợp của chúng tôi, bảng inventory_items dùng để theo dõi doanh số bán hàng. Điều này có thể gây hiểu lầm nếu bạn không có thông tin nội bộ. Sau này, chúng ta sẽ kiểm tra cách làm cho các truy vấn của mình chính xác hơn.
Ngữ cảnh lược đồ
Ngữ cảnh giản đồ mô tả các đối tượng giản đồ như bảng, khung hiển thị và các cột riêng lẻ lưu trữ thông tin dưới dạng nhận xét trong các đối tượng giản đồ.
Chúng ta có thể tự động tạo đối tượng này cho tất cả các đối tượng lược đồ trong cấu hình đã xác định bằng cách sử dụng truy vấn sau:
SELECT
alloydb_ai_nl.generate_schema_context(
nl_config_id => 'cymbal_ecomm_config',
overwrite_if_exist => TRUE
);
Tham số "TRUE" hướng dẫn chúng ta tạo lại ngữ cảnh và ghi đè ngữ cảnh đó. Quá trình thực thi sẽ mất một khoảng thời gian tuỳ thuộc vào mô hình dữ liệu. Bạn càng có nhiều mối quan hệ và kết nối thì quá trình này càng có thể mất nhiều thời gian hơn.
Sau khi tạo ngữ cảnh, chúng ta có thể kiểm tra những gì ngữ cảnh đã tạo cho bảng mục hàng tồn kho bằng cách sử dụng truy vấn:
SELECT
object_context
FROM
alloydb_ai_nl.generated_schema_context_view
WHERE
schema_object = 'ecomm.inventory_items';
Kết quả đã xoá:
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.
Có vẻ như nội dung mô tả thiếu một số phần chính mà bảng inventory_items phản ánh sự di chuyển của các mặt hàng. Chúng ta có thể cập nhật thông tin này bằng cách thêm thông tin chính này vào bối cảnh cho mối quan hệ ecomm.inventory_items.
SELECT alloydb_ai_nl.update_generated_relation_context(
relation_name => 'ecomm.inventory_items',
relation_context => '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.'
);
Ngoài ra, chúng tôi có thể xác minh độ chính xác của nội dung mô tả cho bảng sản phẩm.
SELECT
object_context
FROM
alloydb_ai_nl.generated_schema_context_view
WHERE
schema_object = 'ecomm.products';
Tôi nhận thấy ngữ cảnh được tạo tự động cho bảng sản phẩm khá chính xác và không cần thay đổi.
Tôi cũng đã kiểm tra thông tin về từng cột trong cả hai bảng và thấy thông tin đó cũng chính xác.
Hãy áp dụng ngữ cảnh đã tạo cho ecomm.inventory_items và ecomm.products vào cấu hình của chúng ta.
SELECT alloydb_ai_nl.apply_generated_relation_context(
relation_name => 'ecomm.inventory_items',
overwrite_if_exist => TRUE
);
SELECT alloydb_ai_nl.apply_generated_relation_context(
relation_name => 'ecomm.products',
overwrite_if_exist => TRUE
);
Bạn có nhớ truy vấn của chúng ta để tạo SQL cho câu hỏi "Chúng ta có bao nhiêu sản phẩm của thương hiệu mà chúng ta yêu thích?" không? ? Giờ đây, chúng ta có thể lặp lại thao tác này và xem kết quả có thay đổi hay không.
SELECT
alloydb_ai_nl.get_sql(
nl_config_id => 'cymbal_ecomm_config',
nl_question => 'How many products do we have of our preferred brand?'
) ->> 'sql';
Sau đây là kết quả mới.
SELECT COUNT(*) FROM "ecomm"."products" WHERE "brand" = 'Clades';
Giờ đây, công cụ này đang kiểm tra ecomm.products, chính xác hơn và trả về khoảng 300 sản phẩm thay vì 5.000 sản phẩm của các thao tác với mặt hàng trong kho.
9. Làm việc với chỉ mục giá trị
Tính năng liên kết giá trị giúp làm phong phú các cụm từ tìm kiếm bằng ngôn ngữ tự nhiên bằng cách kết nối các cụm từ giá trị với các loại khái niệm và tên cột đã đăng ký trước. Điều này có thể giúp kết quả dễ dự đoán hơn.
Định cấu hình Chỉ số giá trị
Chúng ta có thể tạo các truy vấn bằng cách sử dụng cột thương hiệu trong bảng sản phẩm và tìm kiếm các sản phẩm có thương hiệu ổn định hơn bằng cách xác định loại khái niệm và liên kết loại đó với cột ecomm.products.brand.
Hãy tạo khái niệm và liên kết khái niệm đó với cột:
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(
column_names_in => 'ecomm.products.brand',
concept_type_in => 'brand_name',
nl_config_id_in => 'cymbal_ecomm_config'
);
Bạn có thể xác minh khái niệm này bằng cách truy vấn alloydb_ai_nl.list_concept_types()
SELECT alloydb_ai_nl.list_concept_types();
Sau đó, chúng ta có thể tạo chỉ mục trong cấu hình cho tất cả các mối liên kết đã tạo và được tạo sẵn:
SELECT alloydb_ai_nl.create_value_index(
nl_config_id_in => 'cymbal_ecomm_config'
);
Sử dụng Chỉ số giá trị
Nếu bạn chạy một truy vấn để tạo SQL bằng tên thương hiệu nhưng không xác định đó là tên thương hiệu, thì điều này sẽ giúp xác định đúng thực thể và cột. Sau đây là truy vấn:
SELECT
alloydb_ai_nl.get_sql(
nl_config_id => 'cymbal_ecomm_config',
nl_question => 'How many Clades do we have?'
) ->> 'sql';
Và kết quả cho thấy thông tin nhận dạng chính xác của từ "Clades" là tên thương hiệu
SELECT COUNT(*) FROM "ecomm"."products" WHERE "brand" = 'Clades';
10. Làm việc với mẫu truy vấn
Mẫu truy vấn giúp xác định các truy vấn ổn định cho các ứng dụng quan trọng đối với doanh nghiệp, giảm sự không chắc chắn và cải thiện độ chính xác.
Tạo mẫu truy vấn
Hãy tạo một mẫu truy vấn kết hợp nhiều bảng để lấy thông tin về những khách hàng đã mua sản phẩm "Republic Outpost" vào năm ngoái. Chúng ta biết rằng truy vấn có thể sử dụng bảng ecomm.products hoặc bảng ecomm.inventory_items vì cả hai đều có thông tin về thương hiệu. Nhưng bảng products có số hàng ít hơn 15 lần và có một chỉ mục trên khoá chính để kết hợp. Bạn nên sử dụng bảng sản phẩm để tăng hiệu quả. Vì vậy, chúng ta sẽ tạo một mẫu cho truy vấn.
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
);
Giờ đây, chúng ta có thể yêu cầu tạo một truy vấn.
SELECT
alloydb_ai_nl.get_sql(
nl_config_id => 'cymbal_ecomm_config',
nl_question => 'Show me last name and country about customers who bought "Republic Outpost" products last year.'
) ->> 'sql';
Và nó tạo ra kết quả đầu ra mong muốn.
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)
Hoặc bạn có thể thực thi truy vấn trực tiếp bằng cách sử dụng truy vấn sau:
SELECT
alloydb_ai_nl.execute_nl_query(
nl_config_id => 'cymbal_ecomm_config',
nl_question => 'Show me last name and country about customers who bought "Republic Outpost" products last year.'
);
Thao tác này sẽ trả về kết quả ở định dạng JSON mà bạn có thể phân tích cú pháp.
execute_nl_query -------------------------------------------------------- {"last_name":"Adams","country":"China"} {"last_name":"Adams","country":"Germany"} {"last_name":"Aguilar","country":"China"} {"last_name":"Allen","country":"China"}
11. Dọn dẹp môi trường
Huỷ các phiên bản và cụm AlloyDB khi bạn hoàn tất bài thực hành.
Xoá cụm AlloyDB và tất cả các phiên bản
Nếu bạn đã dùng phiên bản dùng thử của AlloyDB. Đừng xoá cụm dùng thử nếu bạn có kế hoạch kiểm thử các phòng thí nghiệm và tài nguyên khác bằng cụm dùng thử. Bạn sẽ không thể tạo một cụm thử nghiệm khác trong cùng một dự án.
Cụm bị huỷ bằng lựa chọn force, thao tác này cũng sẽ xoá tất cả các phiên bản thuộc cụm.
Trong cloud shell, hãy xác định dự án và các biến môi trường nếu bạn bị ngắt kết nối và mất tất cả các chế độ cài đặt trước đó:
gcloud config set project <your project id>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)
Xoá cụm:
gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
Kết quả đầu ra dự kiến trên bảng điều khiển:
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.
Xoá bản sao lưu AlloyDB
Xoá tất cả bản sao lưu AlloyDB cho cụm:
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
Kết quả đầu ra dự kiến trên bảng điều khiển:
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. Xin chúc mừng
Chúc mừng bạn đã hoàn thành lớp học lập trình này. Giờ đây, bạn có thể thử triển khai các giải pháp của riêng mình bằng cách sử dụng các tính năng NL2SQL của AlloyDB. Bạn nên dùng thử các lớp học lập trình khác liên quan đến AlloyDB và AlloyDB AI. Bạn có thể kiểm tra cách hoạt động của các vectơ nhúng đa phương thức trong AlloyDB trong lớp học lập trình này.
Nội dung đã đề cập
- Cách triển khai AlloyDB cho Postgres
- Cách bật ngôn ngữ tự nhiên của AI AlloyDB
- Cách tạo và điều chỉnh cấu hình cho ngôn ngữ tự nhiên của AI
- Cách tạo truy vấn SQL và nhận kết quả bằng ngôn ngữ tự nhiên
13. Khảo sát
Kết quả: