Chuyển dữ liệu sang AI tạo sinh bằng Spanner và Vertex AI Imagen API

1. Giới thiệu

Trong lớp học lập trình này, hãy xây dựng một trình tạo tư thế dựa trên AI bằng Java, Spring Boot, cơ sở dữ liệu Cloud Spanner và Vertex AI Imagen API. Người dùng sẽ nhập một câu lệnh và ứng dụng sẽ tạo một tư thế dựa trên câu lệnh đó. Chúng tôi cũng sẽ sử dụng dữ liệu từ cơ sở dữ liệu Spanner được hiển thị dưới dạng API REST. Đây là một cách thú vị và mang tính giáo dục để chứng minh các chức năng của AI tạo sinh thông qua Spring Boot trên Google Cloud.

Danh sách các dịch vụ được sử dụng là:

  1. Cloud Spanner
  2. Vertex AI Imagen API
  3. Cloud Run

Sơ đồ luồng cấp cao

60192bcbff4c39de.png.

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

Bạn sẽ tạo

  • Ứng dụng Java Spring Boot dành cho dữ liệu Spanner dưới dạng API dịch vụ
  • Ứng dụng Java Khởi động vào mùa xuân cho trường hợp sử dụng tạo hình ảnh bằng Imagen
  • Giao diện người dùng có tính tương tác để nhập thông tin và trả lời lời nhắc

2. Yêu cầu

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

Trước khi bắt đầu

  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 rằng bạn đã bật tính năng thanh toán cho dự án trên Google Cloud. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trên một dự án hay không
  3. Đảm bảo rằng tất cả các API cần thiết (Cloud Spanner API, Vertex AI API, Cloud Run API, Cloud Functions API) đều được bật
  4. Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud được tải sẵn bằng bq. Tham khảo tài liệu về các lệnh gcloud và cách sử dụng

Trong Bảng điều khiển Cloud, hãy nhấp vào Kích hoạt Cloud Shell ở góc trên cùng bên phải:

51622c00acec2fa.png.

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 dự án:

gcloud config set project <YOUR_PROJECT_ID>
  1. Chuyển đến trang Cloud Spanner bằng dự án Google Cloud đang hoạt động để bắt đầu

3. Chuẩn bị dữ liệu bằng Spanner

Trước khi tạo ứng dụng, hãy hoàn tất việc thiết lập cơ sở dữ liệu bằng cách tạo một thực thể, cơ sở dữ liệu và bảng của Cloud Spanner. Bạn có thể tham khảo blog này để đọc thêm chi tiết về các tính năng của Cloud Spanner, DDL, DML và nhiều tính năng khác. Bạn có thể làm theo những bước bên dưới để tạo các đối tượng cơ sở dữ liệu cần thiết cho dự án này:

  1. Tạo một thực thể bằng cách nhấp vào TẠO TÌNH TRẠNG trên trang thực thể.
  2. Nhập thông tin chi tiết như trong hình sau đây rồi nhấp vào TẠO:

f869fcbb922027a5.png

  1. Sau khi tạo, trên trang tổng quan về phiên bản, hãy nhấp vào TẠO CƠ SỞ DỮ LIỆU
  2. Đặt tên cho cơ sở dữ liệu là "first-spanner-db" và nhập DDL sau đây vào phần MẪU DDL rồi nhấp vào GỬI:
CREATE TABLE Yoga_Poses(
  Pose_Id   INT64 NOT NULL,
  Name  STRING(1024),
  Breath STRING(1024),
  Description STRING(1024)
) PRIMARY KEY(Pose_Id);

Sau khi thực hiện bước cuối cùng, bạn phải tạo cơ sở dữ liệu và bảng. Bây giờ, hãy chèn một vài hàng vào bảng Yoga_Poses để có thể bắt đầu tạo ứng dụng Spring Boot.

  1. Nhấp vào Spanner Studio trên ngăn Database ở bên trái và mở một thẻ truy vấn truy vấn mới như trong hình dưới đây:

c86774e8fd32eca0.png

  1. Chạy các truy vấn INSERT sau:
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(1, 'STAND', 'INHALE AND EXHALE', 
'STAND WITH YOUR FEET HIP WIDTH APART AND ARMS RESTING BY THE SIDES');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(2, 'PLANK', 'INHALE OR EXHALE', 
'PLANT YOUR TOES AND PALMS ON THE MAT WITH BODY PARALLEL TO THE GROUND');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(3, 'SIT', 'INHALE AND EXHALE', 
'SIT ON THE FLOOR LEGS CROSSED');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(4, 'BEND', 'EXHALE', 
'FOLD FORWARD AS YOU STAND, HANDS REACHING TO THE FLOOR');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(5, 'PUSH UP', 'EXHALE', 
'PLANK WITH ELBOWS ON MAT');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(6, 'SEATED FORWARD BEND', 'EXHALE', 
'FOLD FORWARD AS YOU SIT, HANDS TRYING TO REACH THE FEET');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(7, 'LUNGE', 'EXHALE', 
'ONE LEG TO THE FRONT 90 DEGREES TO THE FLOOR AND THE BACK LEG STRAIGHT');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(8, 'COURTESY LUNGE', 'INHALE', 
'ONE LEG TO THE FRONT 90 DEGREES TO THE FLOOR AND THE BACK KNEE TOUCHING THE FLOOR');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(9, 'BANK BEND', 'INHALE', 
'STAND WITH ARMS UP AND BODY BENT BACKWARDS, ARCHING YOUR SPINE, LOOKING AT THE SKY');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(10, 'BICEP ACTION', 'INHALE AND EXHALE', 
'CURL, PRESS AND WORK YOUR BICEPS');

Bây giờ, chúng ta đã tạo phiên bản Spanner, cơ sở dữ liệu, bảng và dữ liệu và sẵn sàng cho ứng dụng.

4. Tạo API REST với Spring Boot và Spanner cho dữ liệu tư thế

Để làm quen với Spring Boot và bảng điều khiển Google Cloud, hãy tham khảo blog này.

  1. Tự khởi động ứng dụng Spring Boot Để khởi động ứng dụng này từ đầu, hãy theo dõi blog này. Để sao chép từ kho lưu trữ và thao tác, bạn chỉ cần chạy lệnh bên dưới trong thiết bị đầu cuối Cloud shell:
git clone https://github.com/AbiramiSukumaran/spanner-springb

Thao tác này sẽ tạo dự án spanner-springb trong máy Cloud shell của bạn. Để tìm hiểu các thành phần của ứng dụng, hãy xem qua blog.

  1. Hãy tạo bản dựng và chạy ứng dụng Để thực hiện việc này, hãy chạy các lệnh sau từ thiết bị đầu cuối Cloud shell:
cd spanner-springb

./mvnw package

./mvnw spring-boot:run
  1. Triển khai ứng dụng trong Cloud Run để ứng dụng có sẵn cho ứng dụng tạo tư thế Để thực hiện việc này, hãy chạy lệnh sau từ thiết bị đầu cuối Cloud shell:
gcloud run deploy –source .

Truyền các tham số bắt buộc và đảm bảo ứng dụng của bạn đã được triển khai. URL dịch vụ được tạo có thể liệt kê dữ liệu được tạo trong Spanner.

5. Tự thân khởi động một ứng dụng tạo tư thế với Spring Boot, Spanner và Imagen

Đến thời điểm này, chúng ta đã hoàn thành phần trên cùng của sơ đồ luồng, tức là cung cấp dữ liệu Spanner dưới dạng dịch vụ (API REST). Bây giờ, hãy tạo một ứng dụng khách để gọi dữ liệu spanner, gọi IMAGEN API với lời nhắc và trả về chuỗi được mã hoá Base64 dưới dạng hình ảnh giao diện người dùng.

  1. Bây giờ, bạn đã quen thuộc với cấu trúc dự án Spring Boot và tầm quan trọng của nó. Do đó, sẽ nhanh chóng chuyển thẳng đến quá trình sao chép kho lưu trữ vào máy Cloud shell của bạn bằng cách chạy lệnh bên dưới trong thiết bị đầu cuối Cloud shell:
git clone https://github.com/AbiramiSukumaran/genai-posegen

Thao tác này sẽ tạo dự án genai-posegen trong máy Cloud shell của bạn. Cấu trúc dự án được sao chép sẽ xuất hiện như sau trong trình chỉnh sửa shell trên đám mây:

b19a94f895f74c62.png

Lớp Java PromptController có lệnh gọi dịch vụ cơ sở dữ liệu, cách triển khai logic nghiệp vụ và lệnh gọi API AI tạo sinh của Imagen. Lớp này tương tác với các mẫu Thymeleaf để đảm nhận việc tích hợp dữ liệu với giao diện người dùng. Có 3 phương thức dịch vụ trong lớp này - 1) để nhận đầu vào nhắc 2) để xử lý yêu cầu và gọi Imagen API và 3) để xử lý phản hồi hình ảnh.

Prompt (Nhắc) và Yoga là các lớp POJO chứa các trường, phương thức getter và setter để giao tiếp với API Imagen và API máy chủ dữ liệu Spanner.

Các tệp html Index và getImage trong thư mục mẫu chứa các mẫu cho giao diện người dùng, đồng thời các tệp này có phần phụ thuộc của tập lệnh JS và css trong các thư mục tương ứng.

Tích hợp API Imagen của Vertex AI Đối với trường hợp sử dụng tạo hình ảnh, chúng tôi đang sử dụng Imagen API của Vertex AI theo định dạng sau:

https://<<region>>- aiplatform.googleapis.com/v1/projects/<<your-project-id>>/locations/<<region>>/publishers/google/models/imagegeneration:predict

Bạn có thể đọc thêm về các chức năng của Hình ảnh tại đây. Phương thức này trả về phản hồi ở định dạng chuỗi được mã hoá Base64. Để chuyển đổi hình ảnh thành hình ảnh, chúng ta đã sử dụng phương pháp setattribute javascript (trong tệp getImage.js) trên đối tượng hình ảnh như sau trong tệp getImage.HTML:

poseImage.setAttribute('src', "data:image/jpg;base64," + baseStr64);

Cấp phép API Imagen yêu cầu bạn bật tính năng xác thực mã thông báo mang để truy cập vào API đó. Trong trường hợp này, tôi đã sử dụng phương pháp JSON chứa thông tin xác thực mặc định của ứng dụng. Bạn có thể triển khai chế độ này bằng cách chạy lệnh bên dưới trên thiết bị đầu cuối Cloud shell và làm theo hướng dẫn trong cửa sổ dòng lệnh:

gcloud auth application-default login

Nhập "Y" để xác thực với tài khoản của bạn. Cho phép truy cập và sao chép mã uỷ quyền xuất hiện trong cửa sổ bật lên. Ngay sau khi bạn làm điều đó, bạn sẽ nhận được thông tin xác thực mặc định của ứng dụng trong tệp JSON được lưu vào một vị trí tương tự như sau: /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json.

Tải tệp xuống hoặc sao chép nội dung của tệp JSON bằng cách chạy lệnh mèo (cat /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json) và sử dụng nó trong ứng dụng trong phương thức callImagen() của lớp PromptController.java. Bạn có thể đọc thêm về tính năng xác thực tại đây.

Giao diện người dùng Chúng tôi đã sử dụng Thymeleaf làm công cụ mẫu để phân tích cú pháp và kết xuất dữ liệu vào các tệp mẫu giao diện người dùng và thêm thiết kế trang nhã vào giao diện người dùng. HTML này tương tự như HTML nhưng hỗ trợ thêm nhiều thuộc tính để làm việc với dữ liệu được hiển thị. Chỉ mục.html chứa các thành phần thiết kế trang đích và cho phép người dùng chọn chủ đề cũng như thêm lời nhắc ghi đè để tạo hình ảnh mong muốn.

6. Xây dựng và triển khai

Bây giờ, bạn đã sao chép mã, thay thế các giá trị cho phần giữ chỗ nếu có thể áp dụng cho dự án, khu vực và thông tin xác thực của bạn, hãy chuyển sang xây dựng và triển khai ứng dụng. Chuyển đến thư mục dự án trong thiết bị đầu cuối Cloud shell bằng lệnh, bản dựng, sau đó triển khai để kiểm thử cục bộ trong máy Cloud shell bằng 3 lệnh sau:

cd genai-posegen

./mvnw package

./mvnw spring-boot:run

Triển khai ứng dụng trong Cloud Run để ứng dụng có thể sử dụng trên đám mây. Để thực hiện việc này, hãy chạy lệnh sau từ cửa sổ dòng lệnh shell trên đám mây trong thư mục dự án:

gcloud run deploy –source .

Truyền các tham số bắt buộc và đảm bảo ứng dụng của bạn đã được triển khai.

7. Bản minh hoạ

Sau khi triển khai ứng dụng, bạn sẽ thấy URL dịch vụ trong thiết bị đầu cuối. Hãy nhấp vào đường liên kết đó để xem ứng dụng tạo hình ảnh tư thế của bạn đang chạy trên Google Cloud mà không cần máy chủ!

92bdb22109b2f756.gif

8. Dọn dẹp

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

  1. Trong bảng điều khiển Google Cloud, 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, nhập ID dự án, sau đó nhấp vào Tắt để xoá dự án
  4. Nếu không muốn xoá dự án, hãy xoá thực thể Spanner bằng cách chuyển đến phiên bản mà bạn vừa tạo cho dự án này rồi nhấp vào nút XOÁ TÌNH TRẠNG ở góc trên cùng bên phải trang tổng quan về phiên bản
  5. Bạn cũng có thể chuyển đến trang các dịch vụ của Cloud Run, chọn các dịch vụ được tạo trong dự án này rồi nhấp vào nút xoá để xoá các dịch vụ.

9. Xin chúc mừng

Trong blog này, chúng tôi có thể cung cấp ứng dụng Spring Boot hoàn chỉnh giúp lưu trữ và xử lý dữ liệu trong Cloud Spanner để tạo tư thế bằng Imagen API của Vertex AI của Google Cloud trong một ứng dụng khách tương tác được triển khai trong Cloud Run. Trong phần sơ đồ cấu trúc của blog này, bạn sẽ thấy thành phần Cloud Functions (Java) mà chúng ta không bao giờ phải làm? Bạn cũng có thể nắm bắt nếu muốn đóng góp. Bạn có thể triển khai 2 Java Cloud Functions để thực hiện 2 phương thức có trong tệp getimage.html: lưu tư thế vào cơ sở dữ liệu và phương thức tải hình ảnh lên. Hãy xem tài liệu của Imagen trên Vertex AI để tìm hiểu thêm về mô hình này.