Menambahkan kemampuan Gemini ke aplikasi Android Anda

1. Sebelum memulai

Gemini API memberi Anda akses ke model AI generatif dari rangkaian model Gemini. Gemini API akan memungkinkan Anda membuat pengalaman baru yang hingga saat ini belum tersedia.

Codelab ini memandu Anda melalui proses menambahkan kemampuan ringkasan ke aplikasi JetNews. JetNews adalah aplikasi baca berita yang dibangun dengan Jetpack Compose, bagian dari repositori compose-samples.

Cara kerja aplikasi JetNews

Dalam codelab ini, Anda akan:

  • Membuat perintah untuk meringkas artikel berita di Vertex AI Studio.
  • Mengintegrasikan Vertex AI in Firebase SDK ke JetNews.
  • Menambahkan bagian "Ringkasan Gemini" di bagian atas tampilan artikel dan tombol "ringkasan" di panel bawah.

7eee9f1dcad682c.png

Aplikasi JetNews dengan fitur ringkasan yang didukung oleh Gemini API.

Prasyarat

  • Pengetahuan Kotlin dasar
  • Memahami cara menggunakan Android Studio dan menguji aplikasi di emulator atau perangkat fisik yang menjalankan Android level API 21 atau yang lebih tinggi
  • Akun Google untuk mengakses Firebase

2. Membuat perintah

Perintah adalah pesan yang dikirim oleh aplikasi Anda ke model Gemini melalui Gemini API. Perintah ini dapat mencakup file teks, gambar, audio, dan video.

Membuat perintah yang ideal untuk kasus penggunaan tertentu bukan hanya sekedar membuat pesan, dan sering kali memerlukan beberapa iterasi. Vertex AI Studio adalah alat yang bagus untuk membuat perintah Anda.

Untuk contoh ini, Anda akan membuat perintah teks di Vertex AI Studio. Buka Vertex AI Studio, lalu klik "Freeform" di navigasi sebelah kiri.

52e11cb6e67d7199.png

Dalam codelab ini, Anda akan meringkas konten artikel teknis menjadi empat poin butir. Tujuan Anda membuat perintah ini adalah memastikan bahwa ringkasannya relevan dan dalam bentuk teks biasa tanpa pemformatan Markdown.

Setelah beberapa iterasi, Anda mungkin akan menemukan perintah yang berfungsi dengan sangat baik. Seperti perintah berikut ini:

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]

Setelah merasa puas dengan outputnya, Anda kini dapat mengintegrasikan Gemini API ke aplikasi Android.

3. Melihat kode

Mulai dengan melihat kode sumber awal dari GitHub:

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

Aplikasi JetNews dirancang dari awal untuk mengikuti praktik terbaik arsitektur Android dan agar sesuai untuk digunakan di semua perangkat seluler, baik besar maupun kecil.

Baca selengkapnya tentang pendekatan penerapan JetNews untuk mendukung perangkat layar besar.

Jika kode sumber aplikasi JetNews terlalu banyak, jangan khawatir. Untuk menambahkan fitur ringkasan yang didukung oleh Gemini, Anda hanya akan mengubah kode di class GeminiRepositoryImpl. Kode yang memicu ringkasan dan menampilkan ringkasan di aplikasi sudah diterapkan untuk Anda.

Penerapan akhir

Anda dapat langsung mengakses penerapan akhir kode sumber dengan memeriksa cabang ini:

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

Anda harus mengikuti petunjuk yang dijelaskan di langkah 4 codelab ini untuk membuat dan menyiapkan project Firebase.

4. Menyiapkan project Firebase Anda

Membuat project Firebase

Buat project Firebase di Firebase console. Buat project Firebase baru dengan memasukkan nama project baru di langkah pertama alur kerja "Create project". Project Google Cloud yang mendasarinya dibuat secara otomatis.

Di project Anda, buka halaman Build with Gemini untuk melakukan hal berikut:

Menghubungkan aplikasi Anda ke Firebase

Setelah menyiapkan project Firebase, Anda perlu menghubungkan aplikasi Android ke project tersebut.

  1. Di Firebase console, pilih project Anda.
  2. Klik "Add app", lalu pilih "Android".
  3. Ikuti petunjuk di layar untuk mendaftarkan aplikasi Anda dengan memberikan nama paket aplikasi.
  4. Download file google-services.json, lalu tambahkan ke direktori root modul (level aplikasi) aplikasi Anda.
  5. Lanjutkan mengikuti petunjuk di layar untuk menambahkan plugin Gradle layanan Google dan dependensi Gradle Firebase Bill of Materials (BoM) ke aplikasi Anda.

Alternatif: Gunakan Firebase Assistant di Android Studio untuk menghubungkan aplikasi Anda

Atau, Anda dapat menggunakan Firebase Assistant di Android Studio untuk menghubungkan aplikasi ke Firebase dengan beberapa klik tombol.

Firebase Assistant memungkinkan Anda mendaftarkan aplikasi ke project Firebase, menambahkan file, plugin, dan dependensi Firebase yang diperlukan ke project Android Anda, semuanya dari dalam Android Studio.

Lihat petunjuk mendetail di dokumentasi Firebase.

5. Memperbarui impor Gradle

Aplikasi JetNews menggunakan fitur katalog versi Gradle, yang membantu memusatkan versi dependensi.

  1. Untuk menambahkan impor Gradle untuk Vertex AI in Firebase SDK, tambahkan kode berikut ke libs.versions.toml:
    [versions]
    ...
    vertexai = "16.0.0"
    
    [libraries]
    ...
    firebase-vertexai = { module = "com.google.firebase:firebase-vertexai", version.ref = "vertexai"}
    
  2. Perbarui build.gradle.kts:
    implementation(libs.firebase.vertexai)
    
  3. Klik "Sync now" untuk mengambil artefak Gradle.

Jika tidak ingin menggunakan katalog versi Gradle, Anda dapat langsung menambahkan impor di build.gradle.kts:

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

6. Integrasi Kotlin

Setelah dependensi yang tepat ditambahkan, perbarui kode Kotlin.

Buka class GeminiRepositoryImpl. Class ini akan menghosting semua kode yang berinteraksi dengan Gemini API.

Inisialisasi model Gemini

Buat instance 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),
       )
    )

Dalam contoh ini, Anda mengakses model Gemini 1.5 Flash. Model ini dapat menangani kasus penggunaan ringkasan teks contoh ini, dan lebih hemat biaya daripada Gemini 1.5 Pro. Pelajari lebih lanjut model Gemini yang tersedia di dokumentasi Vertex AI in Firebase.

Contoh ini juga menetapkan nilai suhu ke 0, yang memastikan konsistensi dalam pembuatan ringkasan dengan lebih baik. Pelajari lebih lanjut parameter konfigurasi model di dokumentasi Vertex AI in Firebase.

Terakhir, contoh ini menentukan setelan keamanan untuk memastikan model menghasilkan respons dengan bahasa yang sesuai. Pelajari lebih lanjut fitur setelan keamanan di dokumentasi Vertex AI in Firebase.

Pembuatan ringkasan menggunakan Gemini

Selanjutnya, perbarui fungsi summarizePost() untuk meringkas postingan yang diteruskan sebagai parameter.

Pertama, ekstrak teks dari postingan untuk meneruskannya ke model:

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

Buat prompt berdasarkan perintah yang dibuat di langkah #2 codelab ini, lalu teruskan postingan:

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"

Terakhir, teruskan perintah ke model dan tampilkan respons:

return generativeModel.generateContent(prompt).text

Menguji penerapan

Untuk menguji penerapan, klik "Run app" di Android Studio, lalu instal aplikasi JetNews di emulator atau perangkat fisik.

Buka artikel dari halaman beranda, lalu klik tombol ringkas di panel bawah:

Tombol yang memicu fitur ringkasan Gemini

Anda akan melihat bagian "Ringkasan Gemini" muncul di bagian atas artikel, di bawah ilustrasi artikel:

Bagian ringkasan Gemini yang muncul di bagian atas artikel

Arsitektur aplikasi JetNews

JetNews dibangun untuk menunjukkan kemampuan UI Jetpack Compose saat ini. Hal ini diimplementasikan untuk mendukung berbagai ukuran layar (untuk mengetahui detailnya, lihat postingan blog ini).

Tujuan codelab ini bukan untuk membahas detail arsitektur aplikasi JetNews. Integrasi Gemini sebagian besar terjadi di class GeminiRepositoryImpl.

Namun, jika ingin melihat cara tombol memicu ringkasan, Anda dapat melihat SummaryButton() di JetnewsIcons.kt. Anda juga dapat meninjau penerapan UI dari UI ringkasan dalam fungsi SummarySection() di PostContent.kt.

7. Kesimpulan

Selama codelab ini, Anda telah mempelajari cara:

  • Membuat dan menguji perintah di Vertex AI Studio.
  • Menyiapkan project di Firebase untuk menggunakan Vertex AI in Firebase dan Gemini API.
  • Mengonfigurasi dependensi Gradle untuk menggunakan Vertex AI in Firebase di aplikasi Android.
  • Memanggil Gemini API untuk mengakses model Gemini 1.5 Flash dari kode Kotlin.

Jika ingin mempelajari lebih lanjut Vertex AI in Firebase untuk aplikasi Android, Anda dapat meninjau contoh kode Android dan meninjau dokumentasi.