Tạo Trợ lý mua sắm thông minh bằng AlloyDB và Vertex AI Agent Builder – Phần 1

1. Tổng quan

Trong bối cảnh bán lẻ phát triển nhanh chóng như hiện nay, việc cung cấp dịch vụ khách hàng xuất sắc trong khi vẫn mang đến trải nghiệm mua sắm được cá nhân hoá là điều tối quan trọng. Chúng tôi sẽ đưa bạn vào hành trình kỹ thuật thông qua việc tạo một ứng dụng trò chuyện dựa trên kiến thức, được thiết kế để trả lời câu hỏi của khách hàng, hướng dẫn khám phá sản phẩm và điều chỉnh kết quả tìm kiếm. Giải pháp sáng tạo này kết hợp sức mạnh của AlloyDB để lưu trữ dữ liệu, công cụ phân tích nội bộ để hiểu ngữ cảnh, Gemini (Mô hình ngôn ngữ lớn) để xác thực mức độ liên quan và Trình tạo tác nhân của Google để nhanh chóng khởi động một trợ lý trò chuyện thông minh.

Thách thức: Khách hàng bán lẻ hiện đại mong muốn nhận được câu trả lời tức thì và các đề xuất sản phẩm phù hợp với lựa chọn ưu tiên riêng của họ. Các phương pháp tìm kiếm truyền thống thường không cung cấp được mức độ cá nhân hoá này.

Giải pháp: Ứng dụng trò chuyện dựa trên kiến thức của chúng tôi giải quyết trực tiếp thách thức này. Công cụ này tận dụng một cơ sở tri thức phong phú bắt nguồn từ dữ liệu bán lẻ của bạn để hiểu ý định của khách hàng, phản hồi một cách thông minh và cung cấp kết quả cực kỳ phù hợp.

Sản phẩm bạn sẽ tạo ra

Trong phần 1 của lớp học lập trình này, bạn sẽ:

  1. Tạo một thực thể AlloyDB và tải Tập dữ liệu thương mại điện tử
  2. Bật tiện ích mô hình AI tạo sinh và pgvector trong AlloyDB
  3. Tạo nội dung nhúng từ nội dung mô tả sản phẩm
  4. Tìm kiếm theo độ tương đồng Cosine theo thời gian thực cho văn bản tìm kiếm của người dùng
  5. Triển khai giải pháp trong Chức năng Cloud Run không có máy chủ

Phần thứ hai của lớp học này sẽ đề cập đến các bước trong Trình tạo tác nhân.

Yêu cầu

  • Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
  • Một dự án Google Cloud đã bật tính năng thanh toán.

2. Kiến trúc

Luồng dữ liệu: Hãy cùng tìm hiểu kỹ hơn về cách dữ liệu di chuyển qua hệ thống của chúng ta:

Quy trình truyền dẫn:

Bước đầu tiên của chúng ta là nhập dữ liệu Bán lẻ (kho hàng, nội dung mô tả sản phẩm, hoạt động tương tác của khách hàng) vào AlloyDB.

Công cụ phân tích:

Chúng ta sẽ sử dụng AlloyDB làm công cụ phân tích để thực hiện các bước sau:

  1. Trích xuất ngữ cảnh: Công cụ này phân tích dữ liệu được lưu trữ trong AlloyDB để hiểu được mối quan hệ giữa các sản phẩm, danh mục, hành vi của khách hàng, v.v. (nếu có).
  2. Tạo nội dung nhúng: Nội dung nhúng (biểu diễn toán học của văn bản) được tạo cho cả truy vấn của người dùng và thông tin được lưu trữ trong AlloyDB.
  3. Tìm kiếm vectơ: Công cụ này thực hiện tìm kiếm theo mức độ tương đồng, so sánh nội dung nhúng của cụm từ tìm kiếm với nội dung nhúng của nội dung mô tả sản phẩm, bài đánh giá và dữ liệu có liên quan khác. Thao tác này sẽ xác định 25 "hàng xóm gần nhất" phù hợp nhất.

Xác thực Gemini:

Những câu trả lời tiềm năng này được gửi đến Gemini để đánh giá. Gemini sẽ xác định xem những thông tin đó có thực sự phù hợp và an toàn để chia sẻ với người dùng hay không.

Tạo phản hồi:

Các phản hồi đã xác thực được sắp xếp thành một mảng JSON và toàn bộ công cụ được đóng gói thành một Hàm Cloud Run không máy chủ được gọi từ Trình tạo tác nhân.

Tương tác trò chuyện:

Trình tạo tác nhân trình bày các phản hồi cho người dùng ở định dạng ngôn ngữ tự nhiên, tạo điều kiện cho cuộc trò chuyện qua lại. Phần này sẽ được đề cập trong một lớp học lập trình tiếp theo.

3. Trước khi bắt đầu

Tạo một dự án

  1. Trong Google Cloud Console, trên trang bộ chọn dự án, hãy chọn hoặc tạo một dự án trên Google Cloud.
  2. Đảm bảo bạn đã bật tính năng thanh toán cho dự án trên Cloud. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trên dự án hay không .
  3. Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud và được tải sẵn bq. Nhấp vào Kích hoạt Cloud Shell ở đầu bảng điều khiển Google Cloud.

Hình ảnh nút Kích hoạt Cloud Shell

  1. Sau khi kết nối với Cloud Shell, hãy kiểm tra để đảm bảo bạn đã được xác thực và dự án được đặt thành mã dự án của bạn bằng lệnh sau:
gcloud auth list
  1. Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn.
gcloud config list project
  1. Nếu dự án của bạn chưa được thiết lập, hãy sử dụng lệnh sau để thiết lập:
gcloud config set project <YOUR_PROJECT_ID>
  1. Bật các API bắt buộc.
gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       run.googleapis.com \
                       cloudbuild.googleapis.com \
                       cloudfunctions.googleapis.com \
                       aiplatform.googleapis.com

Bạn có thể sử dụng bảng điều khiển để tìm kiếm từng sản phẩm hoặc sử dụng đường liên kết này thay cho lệnh gcloud.

Nếu thiếu bất kỳ API nào, bạn luôn có thể bật API đó trong quá trình triển khai.

Tham khảo tài liệu để biết các lệnh và cách sử dụng gcloud.

4. Thiết lập cơ sở dữ liệu

Trong lớp học lập trình này, chúng ta sẽ sử dụng AlloyDB làm cơ sở dữ liệu để lưu trữ dữ liệu bán lẻ. Mô-đun này sử dụng các cụm để lưu giữ tất cả tài nguyên, chẳng hạn như cơ sở dữ liệu và nhật ký. Mỗi cụm có một phiên bản chính cung cấp điểm truy cập vào dữ liệu. Bảng sẽ chứa dữ liệu thực tế.

Hãy tạo một cụm, thực thể và bảng AlloyDB nơi tập dữ liệu thương mại điện tử sẽ được tải.

Tạo cụm và thực thể

  1. Chuyển đến trang AlloyDB trong Cloud Console. Bạn có thể dễ dàng tìm thấy hầu hết các trang trong Cloud Console bằng cách tìm kiếm các trang đó bằng thanh tìm kiếm của bảng điều khiển.
  2. Chọn CREATE CLUSTER (TẠO CLUSTER) trên trang đó:

f76ff480c8c889aa.png

  1. Bạn sẽ thấy một màn hình như màn hình bên dưới. Tạo cụm và thực thể bằng các giá trị sau:
  • mã cụm: "shopping-cluster"
  • password: "alloydb"
  • Tương thích với PostgreSQL 15
  • Vùng: "us-central1"
  • Mạng: "default"

538dba58908162fb.png

  1. Khi chọn mạng mặc định, bạn sẽ thấy một màn hình như dưới đây. Chọn THIẾT LẬP KẾT NỐI.
    7939bbb6802a91bf.png
  2. Tại đó, hãy chọn "Sử dụng dải IP được phân bổ tự động" rồi chọn Tiếp tục. Sau khi xem lại thông tin, hãy chọn TẠO KẾT NỐI. 768ff5210e79676f.png
  3. Sau khi thiết lập mạng, bạn có thể tiếp tục tạo cụm. Nhấp vào CREATE CLUSTER (TẠO CLUSTER) để hoàn tất việc thiết lập cụm như minh hoạ bên dưới:

e06623e55195e16e.png

Hãy nhớ thay đổi mã nhận dạng thực thể thành "shopping-instance"".

Xin lưu ý rằng quá trình tạo cụm sẽ mất khoảng 10 phút. Sau khi thành công, bạn sẽ thấy một màn hình tương tự như sau:

24eec29fa5cfdb3e.png

5. Nhập dữ liệu

Bây giờ, đã đến lúc thêm một bảng chứa dữ liệu về cửa hàng. Chuyển đến AlloyDB, chọn cụm chính rồi chọn AlloyDB Studio:

847e35f1bf8a8bd8.png

Bạn có thể phải đợi thực thể của mình hoàn tất quá trình tạo. Sau khi hoàn tất, hãy đăng nhập vào AlloyDB bằng thông tin xác thực mà bạn đã tạo khi tạo cụm. Sử dụng dữ liệu sau để xác thực với PostgreSQL:

  • Tên người dùng : "postgres"
  • Cơ sở dữ liệu : "postgres"
  • Mật khẩu : "alloydb"

Sau khi bạn xác thực thành công vào AlloyDB Studio, các lệnh SQL sẽ được nhập vào Trình chỉnh sửa. Bạn có thể thêm nhiều cửa sổ Trình chỉnh sửa bằng biểu tượng dấu cộng ở bên phải cửa sổ cuối cùng.

91a86d9469d499c4.png

Bạn sẽ nhập các lệnh cho AlloyDB trong cửa sổ trình chỉnh sửa, sử dụng các tuỳ chọn Run (Chạy), Format (Định dạng) và Clear (Xoá) nếu cần.

Bật tiện ích

Để xây dựng ứng dụng này, chúng ta sẽ sử dụng các tiện ích pgvectorgoogle_ml_integration. Tiện ích pgvector cho phép bạn lưu trữ và tìm kiếm các vectơ nhúng. Tiện ích google_ml_integration cung cấp các hàm mà bạn sử dụng để truy cập vào các điểm cuối dự đoán của Vertex AI nhằm nhận thông tin dự đoán trong SQL. Bật các tiện ích này bằng cách chạy các DDL sau:

CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;

Nếu bạn muốn kiểm tra các tiện ích đã được bật trên cơ sở dữ liệu, hãy chạy lệnh SQL sau:

select extname, extversion from pg_extension;

Tạo bảng

Tạo bảng bằng câu lệnh DDL bên dưới:

CREATE TABLE
 apparels ( id BIGINT,
   category VARCHAR(100),
   sub_category VARCHAR(50),
   uri VARCHAR(200),
   image VARCHAR(100),
   content VARCHAR(2000),
   pdt_desc VARCHAR(5000),
   embedding vector(768) );

Khi thực thi thành công lệnh trên, bạn sẽ có thể xem bảng trong cơ sở dữ liệu. Dưới đây là ảnh chụp màn hình mẫu:

908e33bbff58a6d.png

Nhập dữ liệu

Đối với lớp học này, chúng ta có dữ liệu kiểm thử gồm khoảng 200 bản ghi trong tệp SQL này. Tệp này chứa id, category, sub_category, uri, imagecontent. Các trường khác sẽ được điền vào sau trong lớp học lập trình.

Sao chép 20 dòng/các câu lệnh chèn từ đó, sau đó dán các dòng đó vào thẻ trình chỉnh sửa trống rồi chọn RUN (CHẠY).

Để xem nội dung của bảng, hãy mở rộng mục Trình khám phá cho đến khi bạn thấy bảng có tên là apparels. Chọn biểu tượng ba dấu chấm (⋮) để xem tuỳ chọn Truy vấn bảng. Câu lệnh SELECT sẽ mở trong thẻ Trình chỉnh sửa mới.

b31ece70e670ab89.png

Cấp quyền

Chạy câu lệnh dưới đây để cấp quyền thực thi trên hàm embedding cho người dùng postgres:

GRANT EXECUTE ON FUNCTION embedding TO postgres;

Cấp VAI TRÒ Người dùng Vertex AI cho tài khoản dịch vụ AlloyDB

Chuyển đến cửa sổ dòng lệnh Cloud Shell và nhập lệnh sau:

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"

6. Ngữ cảnh

Quay lại trang Phiên bản AlloyDB.

Để tạo một phần nhúng, chúng ta cần có context, tức là tất cả thông tin mà chúng ta muốn đưa vào một trường duy nhất. Chúng ta sẽ thực hiện việc này bằng cách tạo nội dung mô tả sản phẩm (mà chúng ta sẽ gọi là pdt_desc). Trong trường hợp này, chúng ta sẽ sử dụng tất cả thông tin về từng sản phẩm, nhưng khi bạn thực hiện việc này với dữ liệu của riêng mình, hãy thoải mái thiết kế dữ liệu theo bất kỳ cách nào mà bạn thấy có ý nghĩa cho công việc kinh doanh của mình.

Chạy câu lệnh sau từ AlloyDB studio của thực thể mới tạo. Thao tác này sẽ cập nhật trường pdt_desc bằng dữ liệu ngữ cảnh:

UPDATE
 apparels
SET
 pdt_desc = CONCAT('This product category is: ', category, ' and sub_category is: ', sub_category, '. The description of the product is as follows: ', content, '. The product image is stored at: ', uri)
WHERE
 id IS NOT NULL;

DML này tạo một bản tóm tắt ngữ cảnh đơn giản bằng cách sử dụng thông tin từ tất cả các trường có trong bảng và các phần phụ thuộc khác (nếu có trong trường hợp sử dụng của bạn). Để tạo thông tin và bối cảnh chính xác hơn, hãy tự do thiết kế dữ liệu theo bất kỳ cách nào mà bạn thấy có ý nghĩa cho doanh nghiệp của mình.

7. Tạo nội dung nhúng cho ngữ cảnh

Máy tính xử lý số dễ dàng hơn nhiều so với xử lý văn bản. Hệ thống nhúng chuyển đổi văn bản thành một loạt số dấu phẩy động đại diện cho văn bản đó, bất kể văn bản được viết như thế nào, sử dụng ngôn ngữ nào, v.v.

Hãy cân nhắc việc mô tả một địa điểm bên bờ biển. Cụm từ này có thể là "on the water" (trên mặt nước), "beachfront" (bờ biển), "walk from your room to the ocean" (đi bộ từ phòng đến biển), "sur la mer" (trên biển), "на берегу океана" (trên bờ biển), v.v. Tất cả các cụm từ này đều có vẻ khác nhau, nhưng ý nghĩa ngữ nghĩa của chúng hoặc trong thuật ngữ học máy, nội dung nhúng của chúng phải rất gần nhau.

Giờ đây, khi dữ liệu và ngữ cảnh đã sẵn sàng, chúng ta sẽ chạy SQL để thêm nội dung nhúng của nội dung mô tả sản phẩm vào bảng trong trường embedding. Bạn có thể sử dụng nhiều mô hình nhúng. Chúng ta sẽ sử dụng text-embedding-004 từ Vertex AI. Hãy nhớ sử dụng cùng một mô hình nhúng trong toàn bộ dự án!

Lưu ý: Nếu đang sử dụng một Dự án Google Cloud hiện có được tạo cách đây một thời gian, bạn có thể cần tiếp tục sử dụng các phiên bản cũ của mô hình nhúng văn bản như textembedding-gecko.

UPDATE
 apparels
SET
 embedding = embedding( 'text-embedding-004',
   pdt_desc)
WHERE
 TRUE;

Xem lại bảng apparels để xem một số phần nhúng. Hãy nhớ chạy lại câu lệnh SELECT để xem các thay đổi.

SELECT
 id,
 category,
 sub_category,
 content,
 embedding
FROM
 apparels;

Thao tác này sẽ trả về vectơ nhúng, trông giống như một mảng số thực, cho văn bản mẫu trong truy vấn như minh hoạ bên dưới:

c69c08d085389f74.png

Lưu ý: Các dự án Google Cloud mới tạo trong gói miễn phí có thể gặp vấn đề về hạn mức liên quan đến số lượng yêu cầu nhúng được phép mỗi giây đối với các mô hình Nhúng. Bạn nên sử dụng truy vấn bộ lọc cho mã nhận dạng, sau đó chọn lọc 1-5 bản ghi, v.v. trong khi tạo nội dung nhúng.

8. Tìm kiếm vectơ

Giờ đây, bảng, dữ liệu và nội dung nhúng đã sẵn sàng, hãy thực hiện tìm kiếm vectơ theo thời gian thực cho văn bản tìm kiếm của người dùng.

Giả sử người dùng hỏi:

"Tôi muốn áo nữ, màu hồng, kiểu dáng bình dân, chỉ làm từ cotton nguyên chất."

Bạn có thể tìm thấy các kết quả trùng khớp bằng cách chạy truy vấn dưới đây:

SELECT
id,
category,
sub_category,
content,
pdt_desc AS description
FROM
apparels
ORDER BY
embedding <=> embedding('text-embedding-004',
  'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
5;

Hãy cùng xem chi tiết truy vấn này:

Trong truy vấn này,

  1. Nội dung tìm kiếm của người dùng là: "Tôi muốn áo nữ, màu hồng, bình dân, chỉ có chất liệu cotton nguyên chất".
  2. Chúng ta sẽ chuyển đổi dữ liệu này thành dữ liệu nhúng trong phương thức embedding() bằng cách sử dụng mô hình: text-embedding-004. Bước này sẽ trông quen thuộc sau bước cuối cùng, khi chúng ta áp dụng hàm nhúng cho tất cả các mục trong bảng.
  3. "<=>" thể hiện việc sử dụng phương thức khoảng cách COSINE SIMILARITY (TƯƠNG ĐỒNG COSINE). Bạn có thể tìm thấy tất cả các chỉ số tương đồng có trong tài liệu về pgvector.
  4. Chúng ta đang chuyển đổi kết quả của phương thức nhúng thành loại vectơ để tương thích với các vectơ được lưu trữ trong cơ sở dữ liệu.
  5. LIMIT 5 thể hiện rằng chúng ta muốn trích xuất 5 từ gần nhất cho văn bản tìm kiếm.

Kết quả sẽ có dạng như sau:

4193a68737400535.png

Như bạn có thể quan sát trong kết quả, các cụm từ trùng khớp khá gần với văn bản tìm kiếm. Hãy thử thay đổi màu sắc để xem kết quả thay đổi như thế nào.

9. Xác thực kết quả bằng LLM

Trước khi tiếp tục và tạo một dịch vụ để trả về các kết quả phù hợp nhất cho một ứng dụng, hãy sử dụng mô hình AI tạo sinh để xác thực xem những câu trả lời tiềm năng này có thực sự phù hợp và an toàn để chia sẻ với người dùng hay không.

Đảm bảo thực thể được thiết lập cho Gemini

Trước tiên, hãy kiểm tra xem bạn đã bật tính năng Tích hợp công nghệ học máy của Google cho Cụm và Thực thể của mình hay chưa. Trong AlloyDB Studio, hãy nhập lệnh sau:

show google_ml_integration.enable_model_support;

Nếu giá trị hiển thị là "bật", bạn có thể bỏ qua 2 bước tiếp theo và chuyển thẳng đến phần thiết lập tính năng tích hợp AlloyDB và Mô hình Vertex AI.

  1. Chuyển đến phiên bản chính của cụm AlloyDB rồi nhấp vào CHỈNH SỬA PHIÊN BẢN CHÍNH

456ffdf292d3c0e0.png

  1. Chuyển đến phần Cờ trong Advanced Configuration Options (Tuỳ chọn cấu hình nâng cao). và đảm bảo rằng google_ml_integration.enable_model_support flag được đặt thành "on" như minh hoạ dưới đây:

6a59351fcd2a9d35.png

Nếu bạn chưa đặt thành "bật", hãy đặt thành "bật" rồi nhấp vào nút UPDATE INSTANCE (CẬP NHẬT MẪU). Bước này sẽ mất vài phút.

Tích hợp AlloyDB và Mô hình Vertex AI

Giờ đây, bạn có thể kết nối với AlloyDB Studio và chạy câu lệnh DML sau để thiết lập quyền truy cập vào mô hình Gemini từ AlloyDB, sử dụng mã dự án của bạn ở nơi được chỉ định. Bạn có thể nhận được cảnh báo về lỗi cú pháp trước khi chạy lệnh, nhưng lệnh này sẽ chạy tốt.

Trước tiên, chúng ta tạo kết nối mô hình Gemini 1.5 như minh hoạ bên dưới. Hãy nhớ thay thế $PROJECT_ID trong lệnh bên dưới bằng Mã dự án Google Cloud của bạn.

CALL
 google_ml.create_model( model_id => 'gemini-1.5',
   model_request_url => 'https://us-central1-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.5-pro:streamGenerateContent',
   model_provider => 'google',
   model_auth_type => 'alloydb_service_agent_iam');

Bạn có thể kiểm tra các mô hình được định cấu hình để truy cập thông qua lệnh sau trong AlloyDB Studio:

select model_id,model_type from google_ml.model_info_view;        

Cuối cùng, chúng ta cần cấp quyền cho người dùng cơ sở dữ liệu thực thi hàm ml_predict_row để chạy các dự đoán thông qua mô hình Google Vertex AI. Chạy lệnh sau:

GRANT EXECUTE ON FUNCTION ml_predict_row to postgres;

Lưu ý: Nếu đang sử dụng một Dự án Google Cloud hiện có và một cụm/phiên bản hiện có của AlloyDB được tạo cách đây không lâu, bạn có thể cần xoá các tệp tham chiếu cũ đến mô hình gemini-1.5 và tạo lại bằng câu lệnh CALL ở trên, đồng thời chạy lại grant execute trên hàm ml_predict_row trong trường hợp gặp vấn đề trong các lệnh gọi sắp tới của gemini-1.5.

Đánh giá phản hồi

Mặc dù chúng ta sẽ sử dụng một truy vấn lớn trong phần tiếp theo để đảm bảo các phản hồi từ truy vấn đó là hợp lý, nhưng truy vấn đó có thể khó hiểu. Chúng ta sẽ xem xét các phần này và xem cách kết hợp chúng trong vài phút.

  1. Trước tiên, chúng ta sẽ gửi một yêu cầu đến cơ sở dữ liệu để lấy 5 kết quả phù hợp nhất với cụm từ tìm kiếm của người dùng. Chúng ta sẽ mã hoá cứng truy vấn để đơn giản hoá việc này, nhưng đừng lo, chúng ta sẽ nội suy truy vấn đó vào sau. Chúng ta sẽ thêm nội dung mô tả sản phẩm từ bảng apparels và thêm hai trường mới – một trường kết hợp nội dung mô tả với chỉ mục và một trường khác với yêu cầu ban đầu. Tất cả thông tin này đang được lưu trong một bảng có tên là xyz (chỉ là tên bảng tạm thời).
CREATE TABLE
 xyz AS
SELECT
 id || ' - ' || pdt_desc AS literature,
 pdt_desc AS content,
 'I want womens tops, pink casual only pure cotton.' AS  user_text
FROM
 apparels
ORDER BY
 embedding <=> embedding('text-embedding-004',
   'I want womens tops, pink casual only pure cotton.')::vector
LIMIT
 5;

Kết quả của truy vấn này sẽ là 5 hàng tương tự nhất liên quan đến cụm từ tìm kiếm của người dùng. Bảng mới xyz sẽ chứa 5 hàng, mỗi hàng sẽ có các cột sau:

  • literature
  • content
  • user_text
  1. Để xác định mức độ hợp lệ của các câu trả lời, chúng ta sẽ sử dụng một truy vấn phức tạp để giải thích cách đánh giá các câu trả lời. Hàm này sử dụng user_textcontent trong bảng xyz như một phần của truy vấn.
"Read this user search text: ', user_text, 
' Compare it against the product inventory data set: ', content, 
' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match."
  1. Sau đó, bằng cách sử dụng truy vấn đó, chúng ta sẽ xem xét "độ tốt" của các câu trả lời trong bảng xyz.
CREATE TABLE
  x AS
SELECT
  json_array_elements( google_ml.predict_row( model_id => 'gemini-1.5',
      request_body => CONCAT('{
 "contents": [ 
        { "role": "user", 
          "parts": 
             [ { "text": "Read this user search text: ', user_text, ' Compare it against the product inventory data set: ', content, ' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match." 
             } ]
         } 
] }'
)::json))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'
AS LLM_RESPONSE
FROM
    xyz;
  1. predict_row trả về kết quả ở định dạng JSON. Mã "-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'" được dùng để trích xuất văn bản thực tế từ JSON đó. Để xem JSON thực tế được trả về, bạn có thể xoá mã này.
  2. Cuối cùng, để lấy trường LLM, bạn chỉ cần trích xuất trường đó từ bảng x:
SELECT 
LLM_RESPONSE 
FROM 
        x;
  1. Bạn có thể kết hợp các cụm từ tìm kiếm này thành một cụm từ tìm kiếm tiếp theo như sau.

Bạn cần xoá/loại bỏ các bảng xyz và x khỏi cơ sở dữ liệu AlloyDB trước khi chạy truy vấn này, nếu bạn đã chạy các truy vấn ở trên để kiểm tra kết quả trung gian.

SELECT
 LLM_RESPONSE
FROM (
 SELECT
 json_array_elements( google_ml.predict_row( model_id => 'gemini-1.5',
     request_body => CONCAT('{
     "contents": [
       { "role": "user",
         "parts":
            [ { "text": "Read this user search text: ', user_text, ' Compare it against the product inventory data set: ', content, ' Return a response with 3 values: 1) MATCH: if the 2 contexts are at least 85% matching or not: YES or NO 2) PERCENTAGE: percentage of match, make sure that this percentage is accurate 3) DIFFERENCE: A clear short easy description of the difference between the 2 products. Remember if the user search text says that some attribute should not be there, and the record has it, it should be a NO match."
            } ]
        }
] }'
)::json))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text'
AS LLM_RESPONSE
   FROM (
         SELECT
           id || ' - ' || pdt_desc AS literature,
           pdt_desc AS content,
         'I want womens tops, pink casual only pure cotton.' user_text
         FROM
           apparels
         ORDER BY
             embedding <=> embedding('text-embedding-004',
             'I want womens tops, pink casual only pure cotton.')::vector
         LIMIT
           5 ) AS xyz ) AS X;

Mặc dù điều đó vẫn có vẻ khó khăn, nhưng hy vọng bạn có thể hiểu rõ hơn về vấn đề này. Kết quả sẽ cho biết liệu có trùng khớp hay không, tỷ lệ phần trăm trùng khớp và một số nội dung giải thích về điểm xếp hạng.

Xin lưu ý rằng mô hình Gemini đã bật tính năng truyền trực tuyến theo mặc định, vì vậy, câu trả lời thực tế được phân bổ trên nhiều dòng: 14e74d71293b7b9.png

10. Chuyển ứng dụng sang web

Bạn đã sẵn sàng đưa ứng dụng này lên web chưa? Hãy làm theo các bước dưới đây để tạo Công cụ tri thức không có máy chủ này bằng Hàm chạy trên đám mây:

  1. Chuyển đến phần Hàm Cloud Run trong Google Cloud Console để TẠO một Hàm Cloud Run mới hoặc sử dụng đường liên kết: https://console.cloud.google.com/functions/add.
  2. Chọn Môi trường là "Hàm Cloud Run". Cung cấp Tên hàm "retail-engine" và chọn Khu vực là "us-central1". Đặt Authentication (Xác thực) thành "Allow unauthenticated invocations" (Cho phép các lệnh gọi chưa xác thực) rồi nhấp vào NEXT (TIẾP THEO). Chọn Java 17 làm môi trường thời gian chạy và Inline Editor (Trình soạn thảo cùng dòng) cho mã nguồn.
  3. Theo mặc định, hàm này sẽ đặt Điểm truy cập thành "gcfv2.HelloHttpFunction". Thay thế mã phần giữ chỗ trong HelloHttpFunction.javapom.xml của Hàm chạy trên đám mây bằng mã từ tệp JavaXML tương ứng.
  4. Hãy nhớ thay thế phần giữ chỗ $PROJECT_ID và thông tin xác thực kết nối AlloyDB bằng các giá trị của bạn trong tệp Java. Thông tin xác thực AlloyDB là những thông tin mà chúng ta đã sử dụng ở đầu lớp học lập trình này. Nếu bạn đã sử dụng các giá trị khác, vui lòng sửa đổi các giá trị đó trong tệp Java.
  5. Nhấp vào Triển khai.

Sau khi triển khai, để cho phép Hàm trên đám mây truy cập vào thực thể cơ sở dữ liệu AlloyDB, chúng ta sẽ tạo trình kết nối VPC.

BƯỚC QUAN TRỌNG:

Sau khi triển khai, bạn sẽ thấy các hàm trong bảng điều khiển Hàm Cloud Run của Google. Tìm hàm mới tạo (retail-engine), nhấp vào hàm đó, sau đó nhấp vào CHỈNH SỬA rồi thay đổi như sau:

  1. Chuyển đến phần Thời gian chạy, bản dựng, kết nối và cài đặt bảo mật
  2. Tăng thời gian chờ lên 180 giây
  3. Chuyển đến thẻ KẾT NỐI:

4e83ec8a339cda08.png

  1. Trong phần cài đặt Ingress, hãy nhớ chọn "Allow all traffic" (Cho phép tất cả lưu lượng truy cập).
  2. Trong phần Cài đặt đầu ra, hãy nhấp vào trình đơn thả xuống Mạng rồi chọn "Thêm trình kết nối VPC mới" và làm theo hướng dẫn bạn thấy trên hộp thoại bật lên:

8126ec78c343f199.png

  1. Đặt tên cho Trình kết nối VPC và đảm bảo khu vực giống với phiên bản của bạn. Giữ nguyên giá trị Mạng là mặc định và đặt Mạng con thành Dải IP tuỳ chỉnh với dải IP là 10.8.0.0 hoặc một dải IP tương tự có sẵn.
  2. Mở rộng phần Hiển thị chế độ cài đặt điều chỉnh theo tỷ lệ và đảm bảo bạn đã thiết lập cấu hình chính xác như sau:

7baf980463a86a5c.png

  1. Nhấp vào TẠO và trình kết nối này sẽ xuất hiện trong phần cài đặt đầu ra.
  2. Chọn trình kết nối mới tạo
  3. Chọn định tuyến tất cả lưu lượng truy cập thông qua trình kết nối VPC này.
  4. Nhấp vào TIẾP THEO rồi nhấp vào TRÌNH DƯƠNG.

11. Kiểm thử ứng dụng

Sau khi triển khai Chức năng đám mây đã cập nhật, bạn sẽ thấy điểm cuối ở định dạng sau:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/retail-engine

Bạn có thể kiểm thử từ Cửa sổ dòng lệnh Cloud Shell bằng cách chạy lệnh sau:

gcloud functions call retail-engine --region=us-central1 --gen2 --data '{"search": "I want some kids clothes themed on Disney"}'

Ngoài ra, bạn có thể kiểm thử Hàm Cloud Run như sau:

PROJECT_ID=$(gcloud config get-value project)

curl -X POST https://us-central1-$PROJECT_ID.cloudfunctions.net/retail-engine \
  -H 'Content-Type: application/json' \
  -d '{"search":"I want some kids clothes themed on Disney"}' \
  | jq .

Và kết quả:

88bc1ddfb5644a28.png

Vậy là xong! Bạn có thể thực hiện Tìm kiếm vectơ tương đồng bằng cách sử dụng mô hình Nhúng trên dữ liệu AlloyDB một cách đơn giản như vậy.

Tạo nhân viên hỗ trợ trò chuyện!

Phần mềm sẽ được tạo trong phần 2 của lớp học này.

12. Dọn dẹp

Nếu bạn dự định hoàn thành Phần 2 của lớp học này, hãy bỏ qua bước này vì thao tác này sẽ xoá dự án hiện tại.

Để tránh bị tính phí cho tài khoản Google Cloud của bạn đối với các tài nguyên được sử dụng trong bài đăng này, hãy làm theo các bước sau:

  1. Trong Google Cloud Console, hãy chuyển đến trang Quản lý tài nguyên.
  2. Trong danh sách dự án, hãy chọn dự án mà bạn muốn xoá, rồi nhấp vào Xoá.
  3. Trong hộp thoại, hãy nhập mã dự án, sau đó nhấp vào Shut down (Tắt) để xoá dự án.

13. Xin chúc mừng

Xin chúc mừng! Bạn đã thực hiện thành công một lượt tìm kiếm nội dung tương tự bằng AlloyDB, pgvector và tìm kiếm vectơ. Bằng cách kết hợp các tính năng của AlloyDB, Vertex AITìm kiếm vectơ, chúng tôi đã tiến một bước dài trong việc giúp các tính năng tìm kiếm theo ngữ cảnh và vectơ trở nên dễ tiếp cận, hiệu quả và thực sự mang lại ý nghĩa. Phần tiếp theo của lớp học này sẽ trình bày các bước tạo tác nhân.