Untuk mengakses model Gemini Pro dan Flash, sebaiknya developer Android menggunakan Gemini Developer API menggunakan Firebase AI Logic. Dengan begitu, Anda dapat memulai tanpa memerlukan kartu kredit, dan mendapatkan paket gratis yang melimpah. Setelah memvalidasi integrasi dengan basis pengguna kecil, Anda dapat menskalakan dengan beralih ke paket berbayar.
Memulai
Sebelum berinteraksi dengan Gemini API langsung dari aplikasi, Anda harus melakukan beberapa hal terlebih dahulu, termasuk memahami perintah serta menyiapkan Firebase dan aplikasi Anda untuk menggunakan SDK.
Bereksperimen dengan perintah
Bereksperimen dengan perintah dapat membantu Anda menemukan frasa, konten, dan format terbaik untuk aplikasi Android Anda. Google AI Studio adalah IDE yang dapat Anda gunakan untuk membuat prototipe dan mendesain perintah untuk kasus penggunaan aplikasi Anda.
Membuat perintah yang tepat untuk kasus penggunaan Anda lebih membutuhkan kreativitas daripada ilmu pengetahuan, sehingga eksperimen menjadi sangat penting. Anda dapat mempelajari lebih lanjut perintah di dokumentasi Firebase.
Setelah puas dengan perintah, klik tombol "<>" untuk mendapatkan cuplikan kode yang dapat Anda tambahkan ke kode.
Menyiapkan project Firebase dan menghubungkan aplikasi ke Firebase
Setelah Anda siap memanggil API dari aplikasi, ikuti petunjuk di "Langkah 1" panduan memulai Logika AI Firebase untuk menyiapkan Firebase dan SDK di aplikasi Anda.
Menambahkan dependensi Gradle
Tambahkan dependensi Gradle berikut ke modul aplikasi Anda:
Kotlin
dependencies {
// ... other androidx dependencies
// Import the BoM for the Firebase platform
implementation(platform("com.google.firebase:firebase-bom:33.13.0"))
// Add the dependency for the Firebase AI Logic library When using the BoM,
// you don't specify versions in Firebase library dependencies
implementation("com.google.firebase:firebase-ai")
}
Java
dependencies {
// Import the BoM for the Firebase platform
implementation(platform("com.google.firebase:firebase-bom:33.13.0"))
// Add the dependency for the Firebase AI Logic library When using the BoM,
// you don't specify versions in Firebase library dependencies
implementation("com.google.firebase:firebase-ai")
// Required for one-shot operations (to use `ListenableFuture` from Guava
// Android)
implementation("com.google.guava:guava:31.0.1-android")
// Required for streaming operations (to use `Publisher` from Reactive
// Streams)
implementation("org.reactivestreams:reactive-streams:1.0.4")
}
Melakukan inisialisasi model generatif
Mulai dengan membuat instance GenerativeModel
dan menentukan nama model:
Kotlin
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.generativeModel("gemini-2.0-flash")
Java
GenerativeModel firebaseAI = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel("gemini-2.0-flash");
GenerativeModelFutures model = GenerativeModelFutures.from(firebaseAI);
Pelajari lebih lanjut model yang tersedia untuk digunakan dengan Gemini Developer API. Anda juga dapat mempelajari lebih lanjut cara mengonfigurasi parameter model.
Berinteraksi dengan Gemini Developer API dari aplikasi Anda
Setelah menyiapkan Firebase dan aplikasi untuk menggunakan SDK, Anda siap untuk berinteraksi dengan Gemini Developer API dari aplikasi Anda.
Membuat teks
Untuk membuat respons teks, panggil generateContent()
dengan perintah Anda.
Kotlin
scope.launch {
val response = model.generateContent("Write a story about a magic backpack.")
}
Java
Content prompt = new Content.Builder()
.addText("Write a story about a magic backpack.")
.build();
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
[...]
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Membuat teks dari gambar dan media lainnya
Anda juga dapat membuat teks dari perintah yang menyertakan teks plus gambar atau media
lainnya. Saat memanggil generateContent()
, Anda dapat meneruskan media sebagai data inline.
Misalnya, untuk menggunakan bitmap, gunakan jenis konten image
:
Kotlin
scope.launch {
val response = model.generateContent(
content {
image(bitmap)
text("what is the object in the picture?")
}
)
}
Java
Content content = new Content.Builder()
.addImage(bitmap)
.addText("what is the object in the picture?")
.build();
ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
[...]
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Untuk meneruskan file audio, gunakan jenis konten inlineData
:
Kotlin
val contentResolver = applicationContext.contentResolver
val inputStream = contentResolver.openInputStream(audioUri).use { stream ->
stream?.let {
val bytes = stream.readBytes()
val prompt = content {
inlineData(bytes, "audio/mpeg") // Specify the appropriate audio MIME type
text("Transcribe this audio recording.")
}
val response = model.generateContent(prompt)
}
}
Java
ContentResolver resolver = getApplicationContext().getContentResolver();
try (InputStream stream = resolver.openInputStream(audioUri)) {
File audioFile = new File(new URI(audioUri.toString()));
int audioSize = (int) audioFile.length();
byte audioBytes = new byte[audioSize];
if (stream != null) {
stream.read(audioBytes, 0, audioBytes.length);
stream.close();
// Provide a prompt that includes audio specified earlier and text
Content prompt = new Content.Builder()
.addInlineData(audioBytes, "audio/mpeg") // Specify the appropriate audio MIME type
.addText("Transcribe what's said in this audio recording.")
.build();
// To generate text output, call `generateContent` with the prompt
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String text = result.getText();
Log.d(TAG, (text == null) ? "" : text);
}
@Override
public void onFailure(Throwable t) {
Log.e(TAG, "Failed to generate a response", t);
}
}, executor);
} else {
Log.e(TAG, "Error getting input stream for file.");
// Handle the error appropriately
}
} catch (IOException e) {
Log.e(TAG, "Failed to read the audio file", e);
} catch (URISyntaxException e) {
Log.e(TAG, "Invalid audio file", e);
}
Dan untuk memberikan file video, lanjutkan menggunakan jenis konten inlineData
:
Kotlin
val contentResolver = applicationContext.contentResolver
contentResolver.openInputStream(videoUri).use { stream ->
stream?.let {
val bytes = stream.readBytes()
val prompt = content {
inlineData(bytes, "video/mp4") // Specify the appropriate video MIME type
text("Describe the content of this video")
}
val response = model.generateContent(prompt)
}
}
Java
ContentResolver resolver = getApplicationContext().getContentResolver();
try (InputStream stream = resolver.openInputStream(videoUri)) {
File videoFile = new File(new URI(videoUri.toString()));
int videoSize = (int) videoFile.length();
byte[] videoBytes = new byte[videoSize];
if (stream != null) {
stream.read(videoBytes, 0, videoBytes.length);
stream.close();
// Provide a prompt that includes video specified earlier and text
Content prompt = new Content.Builder()
.addInlineData(videoBytes, "video/mp4")
.addText("Describe the content of this video")
.build();
// To generate text output, call generateContent with the prompt
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
}
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
Demikian pula, Anda juga dapat meneruskan dokumen PDF (application/pdf
) dan teks biasa
(text/plain
) yang meneruskan Jenis MIME masing-masing sebagai parameter.
Multi-turn chat
Anda juga dapat mendukung percakapan multi-giliran. Lakukan inisialisasi chat dengan
fungsi startChat()
. Anda dapat memberikan histori pesan
ke model secara opsional. Kemudian, panggil fungsi sendMessage()
untuk mengirim pesan chat.
Kotlin
val chat = model.startChat(
history = listOf(
content(role = "user") { text("Hello, I have 2 dogs in my house.") },
content(role = "model") { text("Great to meet you. What would you like to know?") }
)
)
scope.launch {
val response = chat.sendMessage("How many paws are in my house?")
}
Java
Content.Builder userContentBuilder = new Content.Builder();
userContentBuilder.setRole("user");
userContentBuilder.addText("Hello, I have 2 dogs in my house.");
Content userContent = userContentBuilder.build();
Content.Builder modelContentBuilder = new Content.Builder();
modelContentBuilder.setRole("model");
modelContentBuilder.addText("Great to meet you. What would you like to know?");
Content modelContent = userContentBuilder.build();
List<Content> history = Arrays.asList(userContent, modelContent);
// Initialize the chat
ChatFutures chat = model.startChat(history);
// Create a new user message
Content.Builder messageBuilder = new Content.Builder();
messageBuilder.setRole("user");
messageBuilder.addText("How many paws are in my house?");
Content message = messageBuilder.build();
// Send the message
ListenableFuture<GenerateContentResponse> response = chat.sendMessage(message);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Lihat dokumentasi Firebase untuk mengetahui detail selengkapnya.
Langkah berikutnya
- Tinjau aplikasi contoh Firebase Quickstart Android dan Katalog Contoh AI Android di GitHub.
- Siapkan aplikasi Anda untuk produksi, termasuk menyiapkan Firebase App Check untuk melindungi Gemini API dari penyalahgunaan oleh klien yang tidak sah.
- Pelajari Firebase AI Logic lebih lanjut di dokumentasi Firebase.