Thêm các tính năng của Gemini vào ứng dụng Android

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

Gemini API cấp cho bạn quyền truy cập vào các mô hình AI tạo sinh thuộc nhóm mô hình của Gemini. Nhờ đó, bạn có thể tạo ra những trải nghiệm mới chưa từng có.

Lớp học lập trình này sẽ hướng dẫn bạn quy trình thêm tính năng tóm tắt vào ứng dụng JetNews. JetNews là một ứng dụng đọc tin tức được tạo bằng Jetpack Compose, thuộc kho lưu trữ compose-samples.

Ứng dụng JetNews trong thực tế

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

  • Tạo một câu lệnh để tóm tắt các tin bài trong Vertex AI Studio.
  • Tích hợp Vertex AI in Firebase SDK vào JetNews.
  • Thêm phần "Gemini summary" (Tóm tắt bằng Gemini) ở đầu khung hiển thị bài viết và một nút "tóm tắt" ở thanh dưới cùng.

7eee9f1dcad682c.png

Ứng dụng JetNews có tính năng tóm tắt dựa trên Gemini API.

Điều kiện tiên quyết

  • Kiến thức cơ bản về Kotlin
  • Thành thạo cách sử dụng Android Studio và kiểm thử ứng dụng trong một trình mô phỏng hoặc thiết bị thực chạy Android có cấp độ API 21 trở lên
  • Một Tài khoản Google để truy cập vào Firebase

2. Thiết kế câu lệnh

Câu lệnh là thông báo mà ứng dụng của bạn gửi đến mô hình Gemini thông qua Gemini API. Câu lệnh này có thể bao gồm văn bản, hình ảnh, tệp âm thanh và video.

Quá trình tạo ra câu lệnh lý tưởng cho một trường hợp sử dụng cụ thể mang tính nghệ thuật hơn là khoa học và thường cần lặp lại nhiều lần. Vertex AI Studio là một công cụ hữu ích giúp bạn tạo câu lệnh.

Trong ví dụ dưới đây, bạn sẽ tạo một câu lệnh văn bản trong Vertex AI Studio. Hãy mở Vertex AI Studio, rồi nhấp vào "Freeform" (Tuỳ chỉnh) trong bảng điều hướng bên trái.

52e11cb6e67d7199.png

Trong lớp học lập trình này, bạn sẽ tóm tắt nội dung của một bài viết kỹ thuật thành 4 gạch đầu dòng. Bạn tạo câu lệnh này nhằm đảm bảo rằng nội dung tóm tắt phù hợp và ở dạng văn bản thuần tuý mà không có định dạng Markdown nào.

Sau một vài lần lặp lại, có thể bạn sẽ tìm ra một câu lệnh hoạt động đặc biệt hiệu quả. Chẳng hạn như câu lệnh sau đây:

Summarize the core findings of the following article in 4 concise bullet points. Ensure each bullet point is specific, informative and relevant. Return just the bullet points as plain text. Don't use markdown.

[article body]

Khi đã hài lòng với kết quả, giờ đây, bạn có thể tích hợp Gemini API vào ứng dụng Android.

3. Kiểm tra mã

Bắt đầu bằng cách kiểm tra mã nguồn khởi đầu trên GitHub:

git clone https://github.com/android/codelab-gemini-summary

Ứng dụng JetNews được thiết kế từ đầu để tuân theo các phương pháp hay nhất về cấu trúc Android và hoạt động tốt trên mọi thiết bị di động, dù lớn hay nhỏ.

Đọc thêm về phương pháp triển khai JetNews để hỗ trợ màn hình lớn.

Nếu bạn thấy mã nguồn của ứng dụng JetNews quá phức tạp thì đừng lo lắng. Để thêm tính năng tóm tắt dựa trên Gemini, bạn sẽ chỉ sửa đổi mã trong lớp GeminiRepositoryImpl. Mã kích hoạt tính năng tóm tắt và hiển thị nội dung tóm tắt trong ứng dụng đã được triển khai cho bạn rồi.

Triển khai cuối cùng

Bạn có thể truy cập trực tiếp vào phương thức triển khai cuối cùng của mã nguồn bằng cách chuyển sang nhánh sau đây:

git clone https://github.com/android/codelab-gemini-summary
git switch final

Bạn sẽ cần làm theo hướng dẫn chi tiết ở bước 4 của lớp học lập trình này để tạo và thiết lập dự án Firebase.

4. Thiết lập dự án Firebase

Tạo một dự án Firebase

Tạo một dự án Firebase trong bảng điều khiển của Firebase. Tạo một dự án Firebase mới bằng cách nhập tên dự án mới ở bước đầu tiên trong quy trình "Tạo dự án". Dự án Google Cloud cơ bản sẽ được tạo tự động.

Trong dự án của bạn, hãy chuyển đến trang Tạo bằng Gemini để làm như sau:

Kết nối ứng dụng với Firebase

Giờ đây, khi đã thiết lập dự án Firebase, bạn cần kết nối ứng dụng Android với dự án đó.

  1. Trong bảng điều khiển của Firebase, hãy chọn dự án của bạn.
  2. Nhấp vào "Add app" (Thêm ứng dụng) rồi chọn "Android".
  3. Làm theo hướng dẫn trên màn hình để đăng ký ứng dụng bằng cách cung cấp tên gói của ứng dụng.
  4. Tải tệp google-services.json xuống rồi thêm tệp đó vào thư mục gốc của mô-đun (cấp ứng dụng) của ứng dụng.
  5. Tiếp tục làm theo hướng dẫn trên màn hình để thêm trình bổ trợ Gradle cho các dịch vụ của Google cùng những phần phụ thuộc Gradle của Bảng kê khai thành phần (BoM) Firebase vào ứng dụng.

Giải pháp thay thế: Dùng Trợ lý Firebase trong Android Studio để kết nối ứng dụng

Ngoài ra, bạn có thể sử dụng Trợ lý Firebase trong Android Studio để kết nối ứng dụng của mình với Firebase chỉ bằng vài cú nhấp chuột.

Với Trợ lý Firebase, bạn có thể đăng ký ứng dụng với một dự án Firebase, thêm các tệp, trình bổ trợ và phần phụ thuộc Firebase cần thiết vào dự án Android ngay trong Android Studio!

Xem hướng dẫn chi tiết trong tài liệu về Firebase.

5. Cập nhật dữ liệu nhập Gradle

Ứng dụng JetNews sử dụng tính năng danh mục phiên bản Gradle, giúp tập trung các phiên bản của phần phụ thuộc.

  1. Để thêm dữ liệu nhập Gradle cho Vertex AI in Firebase SDK, hãy thêm nội dung sau đây vào libs.versions.toml:
    [versions]
    ...
    vertexai = "16.0.0"
    
    [libraries]
    ...
    firebase-vertexai = { module = "com.google.firebase:firebase-vertexai", version.ref = "vertexai"}
    
  2. Cập nhật build.gradle.kts:
    implementation(libs.firebase.vertexai)
    
  3. Nhấp vào "Sync now" (Đồng bộ hoá ngay) để tìm nạp cấu phần phần mềm Gradle.

Nếu không muốn sử dụng danh mục phiên bản Gradle, bạn có thể trực tiếp thêm dữ liệu nhập trong build.gradle.kts:

// Import the Firebase BoM
implementation(platform("com.google.firebase:firebase-bom:33.5.1"))
implementation("com.google.firebase:firebase-vertexai")

6. Tích hợp Kotlin

Giờ đây, khi đã thêm các phần phụ thuộc thích hợp, hãy cập nhật mã Kotlin.

Mở lớp GeminiRepositoryImpl. Lớp này sẽ lưu trữ tất cả mã tương tác với Gemini API.

Khởi chạy mô hình Gemini

Tạo thực thể cho GenerativeModel:

private val generativeModel = Firebase.vertexAI.generativeModel(
   "gemini-1.5-flash",
   generationConfig = generationConfig {
      temperature = 0f
   },
      safetySettings = listOf(
         SafetySetting(HarmCategory.HARASSMENT, HarmBlockThreshold.LOW_AND_ABOVE),
                SafetySetting(HarmCategory.HATE_SPEECH, HarmBlockThreshold.LOW_AND_ABOVE),
                SafetySetting(HarmCategory.SEXUALLY_EXPLICIT, HarmBlockThreshold.LOW_AND_ABOVE),
                SafetySetting(HarmCategory.DANGEROUS_CONTENT, HarmBlockThreshold.LOW_AND_ABOVE),
       )
    )

Trong ví dụ này, bạn đang truy cập vào mô hình Gemini 1.5 Flash. Mô hình này có khả năng xử lý trường hợp sử dụng tóm tắt văn bản trong ví dụ nêu trên, đồng thời tiết kiệm hơn so với Gemini 1.5 Pro. Hãy tìm hiểu thêm về các mô hình Gemini hiện có trong tài liệu về Vertex AI in Firebase.

Ví dụ này cũng đặt giá trị nhiệt độ thành 0, giúp đảm bảo tính nhất quán hơn trong quá trình tạo nội dung tóm tắt. Hãy tìm hiểu thêm về các tham số cấu hình mô hình trong tài liệu về Vertex AI in Firebase.

Cuối cùng, ví dụ này xác định các chế độ cài đặt an toàn để đảm bảo rằng mô hình tạo ra ngôn ngữ phù hợp trong phản hồi. Hãy tìm hiểu thêm về các tính năng cài đặt an toàn trong tài liệu về Vertex AI in Firebase.

Tóm tắt bằng Gemini

Tiếp theo, hãy cập nhật hàm summarizePost() để tóm tắt bài đăng được truyền dưới dạng một tham số.

Trước tiên, hãy trích xuất văn bản từ bài đăng đó để truyền văn bản cho mô hình:

val postString = StringBuilder()
for (paragraph in post.paragraphs) {
  postString.append(paragraph.text)
}

Tạo prompt dựa trên câu lệnh được thiết kế ở bước 2 của lớp học lập trình này và truyền vào bài đăng:

val prompt =
            "Summarize the following article in 4 concise bullet points. " +
                    "Ensure each bullet point is specific, informative and relevant. " +
                    "Return just the bullet points as plain text. " +
                    "Use plain text, don't use markdown. \n $postString"

Cuối cùng, hãy truyền câu lệnh cho mô hình và trả về phản hồi:

return generativeModel.generateContent(prompt).text

Kiểm thử quá trình triển khai

Để kiểm thử quá trình triển khai, hãy nhấp vào "Run app" (Chạy ứng dụng) trong Android Studio, sau đó cài đặt ứng dụng JetNews trên trình mô phỏng của bạn hoặc một thiết bị thực.

Mở một tin bài bất kỳ trên trang chủ rồi nhấp vào nút tóm tắt ở thanh dưới cùng:

Nút kích hoạt tính năng tóm tắt bằng Gemini

Bạn sẽ thấy phần "Gemini summary" (Tóm tắt bằng Gemini) xuất hiện ở đầu bài viết, bên dưới hình minh hoạ bài viết:

Phần tóm tắt bằng Gemini xuất hiện ở đầu bài viết

Cấu trúc ứng dụng JetNews

JetNews được xây dựng để giới thiệu các tính năng giao diện người dùng hiện tại của Jetpack Compose. Tính năng này được triển khai để hỗ trợ nhiều kích thước màn hình (xem bài đăng trên blog này để biết chi tiết).

Lớp học lập trình này không nhằm tìm hiểu chi tiết về cấu trúc ứng dụng JetNews. Quá trình tích hợp Gemini chủ yếu diễn ra trong lớp GeminiRepositoryImpl.

Tuy nhiên, nếu muốn xem cách nút kích hoạt tính năng tóm tắt, bạn có thể xem SummaryButton() trong JetnewsIcons.kt. Bạn cũng có thể xem lại cách triển khai giao diện người dùng của giao diện người dùng tóm tắt trong hàm SummarySection() thuộc PostContent.kt.

7. Kết luận

Trong lớp học lập trình này, bạn đã tìm hiểu cách:

  • Tạo và kiểm thử một câu lệnh trong Vertex AI Studio.
  • Thiết lập một dự án trong Firebase để sử dụng Vertex AI in Firebase và Gemini API.
  • Định cấu hình các phần phụ thuộc Gradle để sử dụng Vertex AI in Firebase trong một ứng dụng Android.
  • Gọi Gemini API để truy cập vào mô hình Gemini 1.5 Flash từ mã Kotlin.

Nếu muốn khám phá thêm về Vertex AI in Firebase cho ứng dụng Android, bạn có thể xem mã mẫu Androidtài liệu.