1. Giới thiệu
Bạn thích nghiên cứu và tìm tòi sách nhưng bị choáng ngợp trước quá nhiều lựa chọn? Hãy tưởng tượng có một ứng dụng dựa trên AI không chỉ đề xuất cuốn sách hoàn hảo mà còn đưa ra bản tóm tắt ngắn gọn theo thể loại bạn chọn, giúp bạn có cái nhìn tổng quan về giá trị của cuốn sách. Trong lớp học lập trình này, tôi sẽ hướng dẫn bạn cách tạo một ứng dụng như vậy bằng BigQuery, Vertex AI và Cloud Run do Gemini hỗ trợ.
Tổng quan về dự án
Trường hợp sử dụng của chúng ta tập trung vào 4 thành phần chính sau:
- Cơ sở dữ liệu sách: Tập dữ liệu công khai BigQuery khổng lồ về sách lưu trữ trên Internet sẽ đóng vai trò là danh mục sách toàn diện của chúng tôi.
- Công cụ tóm tắt bằng AI: Google Cloud Functions, được trang bị mô hình ngôn ngữ Gemini-Pro, sẽ tạo ra bản tóm tắt chuyên sâu phù hợp với yêu cầu của người dùng.
- Tích hợp BigQuery: Một hàm từ xa trong BigQuery gọi Hàm trên đám mây của chúng tôi để phân phối các chủ đề và bản tóm tắt sách theo yêu cầu.
- Giao diện người dùng: Một ứng dụng web được lưu trữ trên Cloud Run và sẽ cung cấp một ứng dụng web để người dùng xem kết quả.
Chúng tôi đã chia toàn bộ quá trình triển khai dự án thành 3 lớp học lập trình, trong đó lớp học lập trình này sẽ đề cập đến Lớp học lập trình 3 trong danh sách bên dưới:
Lớp học lập trình 1: Sử dụng Gemini để xây dựng Hàm Java Cloud cho ứng dụng Gemini.
Lớp học lập trình 2: Sử dụng Gemini để xây dựng các ứng dụng AI tạo sinh chỉ sử dụng SQL bằng BigQuery.
Lớp học lập trình 3: Sử dụng Gemini để tạo một ứng dụng web Spring Boot Java tương tác với BigQuery.
2. Sử dụng Gemini để tạo ứng dụng web Spring Boot bằng BigQuery
Sản phẩm bạn sẽ tạo ra
- Tạo tập dữ liệu và bảng BigQuery cần thiết.
- Ứng dụng web Java Spring Boot tương tác với BigQuery để tìm nạp dữ liệu sách và hiển thị trên web.
- Ứng dụng này được triển khai trên Cloud Run.
- Bạn sẽ thực hiện các bước này với sự trợ giúp của Gemini.
3. 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
- Bạn nên triển khai Hàm trên đám mây trong lớp học lập trình phần 1 Sử dụng Gemini để tạo Hàm trên đám mây Java cho ứng dụng AI tạo sinh.
- Điều kiện: Nếu tại thời điểm này, bạn có quyền truy cập vào đường liên kết đến khoản tín dụng Google Cloud miễn phí (có thể do người tổ chức hội thảo cung cấp cho bạn), hãy làm theo hướng dẫn trong trang bên dưới để hoàn tất các bước KÍCH HOẠT KÈM TÍN DỤNG và TẠO DỰ ÁN trước. Nếu bạn chưa có đường liên kết này, hãy tiếp tục thực hiện các bước bắt buộc về dự án và thanh toán dưới đây:
Tạo dự án
Bạn có thể bỏ qua các bước bên dưới nếu đã kích hoạt tài khoản thanh toán và tạo dự án bằng đường liên kết được đề cập trong bước có điều kiện ở trên.
- 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.
- Đả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.
Kích hoạt Cloud Shell
- 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 trước bằng bq:
Trên Cloud Console, hãy nhấp vào Activate Cloud Shell (Kích hoạt Cloud Shell) ở góc trên cùng bên phải:
- Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án đã được đặt thành mã dự án của bạn. Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list
- 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
- 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>
Tham khảo tài liệu để biết các lệnh và cách sử dụng gcloud.
4. Bật Gemini và các API cần thiết
Bật Gemini
- Chuyển đến Gemini Marketplace để bật API. Bạn cũng có thể sử dụng lệnh sau:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Truy cập trang Gemini rồi nhấp vào "Bắt đầu trò chuyện".
Bật các API cần thiết khác
Chúng ta sẽ làm như thế nào? Hãy hỏi Gemini rằng chúng ta sẽ làm như vậy. Nhưng trước đó, hãy nhớ:
Lưu ý: LLM không xác định trước. Vì vậy, trong khi bạn thử các câu lệnh này, câu trả lời mà bạn nhận được có thể khác với câu trả lời trong ảnh chụp màn hình của tôi.
Chuyển đến bảng điều khiển trò chuyện của Gemini bằng cách nhấp vào biểu tượng "Mở Gemini" ở góc trên cùng bên phải, bên cạnh thanh tìm kiếm trong bảng điều khiển Google Cloud.
Nhập câu hỏi này vào phần "Nhập câu lệnh tại đây":
How do I enable the BigQuery and Cloud Run apis using gcloud command?
Bạn sẽ nhận được phản hồi như trong hình sau:
Sao chép tệp đó (bạn có thể sử dụng biểu tượng sao chép ở đầu đoạn mã) và chạy trong Cloud Shell Terminal để bật các dịch vụ tương ứng:
- bigquery.googleapis.com
- run.googleapis.com
5. Khám phá tập dữ liệu công khai của BigQuery về dữ liệu sách
Bắt đầu bằng cách làm quen với tập dữ liệu công khai BigQuery chứa thông tin về nhiều sách lưu trữ trên Internet. Nếu bạn không thể truy cập vào tập dữ liệu internetarchivebooks từ đường liên kết này, hãy làm theo các bước dưới đây để khám phá tập dữ liệu này hoặc làm theo tài liệu này:
Bạn có thể tìm thấy tập dữ liệu công khai này trong ngăn trình khám phá BigQuery. Bạn có thể tìm thấy mục này ở bên trái khi truy cập vào bảng điều khiển BigQuery.
Nhập "gdelt-bq" hoặc "internetarchivebooks" vào thanh tìm kiếm rồi nhấp vào TÌM KIẾM TẤT CẢ DỰ ÁN. Mở rộng kết quả và gắn dấu sao vào sách lưu trữ trên Internet như trong hình dưới đây:
.
Mở rộng tập dữ liệu, nhấp vào gdelt-bq.internetarchivebooks, sau đó xem trước dữ liệu trong bảng 1920. Bảng này bao gồm các cuốn sách từ năm 1920 đã được lưu trữ.
Để xem giản đồ mà chúng ta sẽ sử dụng trong các phần tiếp theo, hãy chạy truy vấn sau:
select * from `gdelt-bq.internetarchivebooks.1920` limit 5;
Chúng ta sẽ sử dụng 3 trường sau đây cho lớp học lập trình của mình:
- BookMeta_Title (tên)
- Giao diện (chủ đề được phân tách bằng ';')
- BookMeta_FullText (toàn bộ nội dung của sách)
6. Tạo mẫu Java Cloud Run cơ bản bằng Gemini
Mở Cloud Shell Editor bằng cách nhấp vào biểu tượng Open Editor (Mở trình chỉnh sửa) ở góc trên cùng bên phải của Cloud Shell Terminal (thường thì tôi thích mở trình chỉnh sửa và dòng lệnh trong các thẻ riêng biệt để có thể viết mã trong một thẻ và tạo trong một thẻ khác).
Sau khi mở trình chỉnh sửa, hãy đảm bảo biểu trưng Gemini ở góc dưới bên phải của bảng điều khiển trình chỉnh sửa đang hoạt động (và không bị huỷ). Ngoài ra, hãy đảm bảo rằng dự án Google Cloud ở góc dưới cùng bên trái hướng đến dự án đang hoạt động hiện tại mà bạn muốn làm việc. Nếu các dự án này không hoạt động, hãy nhấp vào các dự án đó, uỷ quyền, chọn Dự án Google Cloud mà bạn muốn các dự án này trỏ đến rồi kích hoạt các dự án đó.
Khi cả hai đều đang hoạt động, hãy nhấp vào tên dự án ở góc dưới bên trái và trong danh sách bật lên có tiêu đề "Mã trên đám mây", hãy di chuyển xuống "Ứng dụng mới".
Trong danh sách đó, hãy chọn ứng dụng Cloud Run. Trong danh sách bật lên, hãy chọn Java:
Trong danh sách kết quả, hãy nhập tên dự án "bookshelf-web" thay vì helloworld rồi nhấp vào OK.
Thật tuyệt! Bạn đã tự khởi động ứng dụng Java Cloud Run đơn giản bằng Gemini và bạn không làm gì nhiều ngoài việc bật và kích hoạt cấu hình, phải không?
Đây là cấu trúc dự án mà bạn sẽ thấy:
Hiện tại, bạn có thể triển khai ứng dụng. Nhưng đó không phải lý do chúng tôi bắt đầu làm việc này. Chúng ta vẫn cần thêm chức năng chính của ứng dụng web là tìm nạp dữ liệu phân tích từ cơ sở dữ liệu BigQuery và hiển thị dữ liệu đó trên web.
Để làm việc này, bạn có thể thêm câu lệnh khác và phát triển dần mã bằng Gemini hoặc tự viết logic. Tôi sẽ kết hợp cả hai.
7. Thêm phần phụ thuộc để sử dụng BigQuery trong ứng dụng web
Giờ đây, khi ứng dụng đã được khởi động, chúng ta đã sẵn sàng thực hiện các thay đổi đối với tài sản và nguồn ứng dụng. Trước tiên, hãy thêm các phần phụ thuộc. Hãy yêu cầu Gemini đề xuất.
Trong Cloud Code Editor, hãy đảm bảo thanh trạng thái hiển thị Gemini đang hoạt động ở góc dưới cùng bên phải và dự án Google Cloud đang hoạt động được chọn ở góc dưới cùng bên trái.
Trong Cloud Code Editor, hãy chuyển đến tệp pom.xml, ngay phía trên thẻ </dependencies>, nhập nhận xét lời nhắc sau :
<!-- What maven dependency should I include to access BigQuery in the app-->
Tôi nhận được kết quả như trong hình bên dưới:
Dán phần phụ thuộc vào đây để thuận tiện. Nếu trong trường hợp của bạn, đề xuất xuất hiện cùng với thẻ phiên bản, bạn có thể bỏ qua thẻ đó.
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-bigquery</artifactId>
</dependency>
8. Cập nhật nguồn để đưa dữ liệu về giá sách lên web
Thay thế mã HelloWorldController.java bằng mã sau:
package cloudcode.helloworld.web;
import java.util.UUID;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;
import com.google.cloud.bigquery.FieldValueList;
@RestController
public final class HelloWorldController {
/**
* Create an endpoint for the landing page
* @return the BigQuery analytics results string to the web
*/
@GetMapping("/")
public String helloWorld() throws Exception {
/* Connect to bigquery and write a select SQL to fetch Title, Theme and Summary fields from the table `bookshelf.bookshelf_theme` if you have executed the codelab 1 of this series, if not just directly use records from gdelt-bq.internetarchivebooks.1920 table */
String query = "SELECT BookMeta_Title || ' (' || Themes || ') ' as summary from gdelt-bq.internetarchivebooks.1920 limit 10 ";
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
QueryJobConfiguration queryConfig =
QueryJobConfiguration.newBuilder(query)
.setUseLegacySql(false)
.build();
// Create a job ID so that we can safely retry.
JobId jobId = JobId.of(UUID.randomUUID().toString());
Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());
// Wait for the query to complete.
queryJob = queryJob.waitFor();
// Check for errors
if (queryJob == null) {
throw new RuntimeException("Job no longer exists");
} else if (queryJob.getStatus().getError() != null) {
throw new RuntimeException(queryJob.getStatus().getError().toString());
}
// Get the results.
TableResult result = queryJob.getQueryResults();
String responseString = "";
// Print all pages of the results.
for (FieldValueList row : result.iterateAll()) {
responseString += row.get("summary").getStringValue() + ". \n";
System.out.printf("%s\n", row.get("summary").getStringValue());
}
return responseString;
}
}
Chúng tôi đã thực hiện những thay đổi sau đối với các tệp nguồn:
- Trong HelloWorldController.java Đã cập nhật @Controller thành @RestController.
- Thay thế nội dung của phương thức helloWorld() để đưa lệnh gọi đến BigQuery, thực thi truy vấn tìm nạp dữ liệu để liệt kê tiêu đề và chủ đề của cuốn sách.
- Thay vì trả về mẫu thành phần hiển thị chỉ mục khi tải, mẫu này được cập nhật để trả về phản hồi dưới dạng chuỗi cho web.
Lưu ý quan trọng: Hãy nhớ cập nhật những thông tin bên dưới
- Cập nhật tệp HelloWorldControllerTests.Java để chú thích lệnh gọi mvc.perform(...) hiện tại.
Gemini để Giải thích mã
Chúng tôi đã cung cấp mã cho bạn và mô tả những thay đổi mà chúng tôi đã thực hiện đối với các tệp nguồn. Bạn có thể cũng đã sử dụng Gemini để nhận nội dung giải thích về mã và/hoặc nhận xét về mã nếu cần. Dưới đây là một vài tính năng mà bạn có thể thử:
- Khi tệp HelloWorldController.java đang mở trong IDE, hãy chuyển đến Chat Panel (Bảng trò chuyện) trong IDE và đưa ra lời nhắc sau: Explain this (Giải thích điều này). Hãy xem nội dung giải thích chi tiết mà Gemini cung cấp. Bạn có thể sử dụng tính năng này bất cứ lúc nào để xem nội dung giải thích về mã.
- Bạn có thể đánh dấu bất kỳ đoạn mã hoặc dòng cụ thể nào trong mã (ví dụ: @GetMapping("/") ) rồi sử dụng lời nhắc sau: Giải thích điều này. Thao tác này sẽ chỉ cung cấp nội dung giải thích chi tiết về dòng mã hoặc đoạn mã mà bạn đã chọn.
- Bạn thậm chí có thể thử một số truy vấn để hỏi về mã theo cách khác. Ví dụ: bạn có thể chọn dòng mã sau
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
và đặt câu hỏi sau "Điều gì sẽ xảy ra nếu biến bigquery là giá trị rỗng?" 4. Bạn cũng có thể yêu cầu cải thiện hoặc tái cấu trúc mã nhờ sự trợ giúp của Gemini. Ví dụ: bạn có thể chọn toàn bộ mã cho phương thức helloWorld() và đưa ra câu lệnh sau: "Làm cách nào để cải thiện hoặc tái cấu trúc mã này?". Xem các đề xuất mà Gemini cung cấp.
9. Xây dựng và triển khai
Chuyển đến Terminal (Cửa sổ dòng lệnh) của Cloud Shell. Đảm bảo rằng đường dẫn này trỏ đến mã dự án của bạn trong thiết bị đầu cuối.
Chuyển đến thư mục dự án bằng cách sử dụng lệnh cd:
cd bookshelf-web
Chạy từng lệnh bên dưới để đảm bảo ứng dụng của bạn đang chạy cục bộ.
mvn package
mvn spring-boot:run
Bây giờ, hãy nhấp vào nút "Xem trước trên web" rồi nhấp vào tuỳ chọn "Xem trước trên cổng 8080" như minh hoạ bên dưới:
Đảm bảo bạn có thể thấy ứng dụng đang chạy cục bộ trên máy shell trên đám mây.
Bây giờ, hãy hỏi Gemini cách triển khai ứng dụng web này trên Cloud Run. Chuyển đến Gemini Chat bằng cách nhấp vào nút "Mở Gemini" trên Google Cloud Console.
Đây là câu lệnh của tôi:
What is the gcloud command to deploy my app to cloud run without having to containerize, only by giving the source file?
Dưới đây là nội dung phản hồi:
Hãy thay thế phần giữ chỗ tên dịch vụ và khu vực trong lệnh gcloud như trong đoạn mã dưới đây:
gcloud run deploy bookshelf-web --source . --allow-unauthenticated --region $REGION
Chạy lệnh này từ Cloud Shell Terminal. Bạn sẽ thấy một vài câu hỏi tiếp theo, hãy chọn câu trả lời thích hợp và bạn sẽ thấy quá trình triển khai đang diễn ra:
Quá trình này sẽ mất vài phút và ứng dụng sẽ được triển khai không cần máy chủ trên Google Cloud. Nhấp vào ứng dụng đã triển khai trên Cloud Run và xem kết quả trên web:
10. Xin chúc mừng
Xin chúc mừng! Chúng tôi đã xây dựng, triển khai và thử nghiệm thành công một ứng dụng web Java Cloud Run để phân tích giá sách bằng Gemini. Để làm việc tiếp theo, hãy hỏi Gemini cách xoá Dịch vụ Cloud Run đã triển khai khỏi Google Cloud Console và làm theo các bước mà Gemini trả lời để dọn dẹp tài nguyên.