Vertex AI in Firebase

Untuk mengakses Gemini API dan serangkaian model Gemini langsung dari aplikasi Anda, sebaiknya gunakan Vertex AI di Firebase SDK untuk Android. SDK ini adalah bagian dari platform Firebase yang lebih besar yang membantu Anda mem-build dan menjalankan aplikasi full-stack.

Arsitektur integrasi Vertex AI in Firebase
Gambar 1. Arsitektur integrasi Vertex AI di Firebase.

Bermigrasi dari SDK klien Google AI

Vertex AI di Firebase SDK mirip dengan SDK klien Google AI, tetapi Vertex AI di Firebase SDK menawarkan opsi keamanan penting dan fitur lainnya untuk kasus penggunaan produksi. Misalnya, saat menggunakan Vertex AI di Firebase, Anda juga dapat menggunakan hal berikut:

  • Firebase App Check untuk melindungi Gemini API dari penyalahgunaan oleh klien yang tidak sah.

  • Firebase Remote Config untuk menetapkan dan mengubah nilai secara dinamis untuk aplikasi Anda di cloud (misalnya, nama model) tanpa perlu merilis versi baru aplikasi Anda.

  • Cloud Storage for Firebase untuk menyertakan file media berukuran besar dalam permintaan Anda ke Gemini API.

Jika sudah mengintegrasikan SDK klien Google AI ke dalam aplikasi, Anda dapat Bermigrasi ke Vertex AI di Firebase.

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

Anda dapat bereksperimen dengan perintah di Vertex AI Studio. Vertex AI Studio adalah IDE untuk desain dan pembuatan prototipe perintah. Dengan alat ini, Anda dapat mengupload file untuk menguji perintah dengan teks dan gambar serta menyimpan perintah untuk melihatnya lagi nanti.

Membuat perintah yang tepat untuk kasus penggunaan Anda lebih merupakan seni daripada sains, yang membuat eksperimen menjadi penting. Anda dapat mempelajari lebih lanjut perintah di dokumentasi Firebase.

Menyiapkan project Firebase dan menghubungkan aplikasi ke Firebase

Setelah Anda siap memanggil Gemini API dari aplikasi, ikuti petunjuk dalam panduan memulai Vertex AI di Firebase untuk menyiapkan Firebase dan SDK di aplikasi Anda. Panduan memulai akan membantu Anda melakukan semua tugas berikut dalam panduan ini.

  1. Siapkan project Firebase baru atau yang sudah ada, termasuk menggunakan paket harga Blaze bayar sesuai penggunaan dan mengaktifkan API yang diperlukan.

  2. Hubungkan aplikasi Anda ke Firebase, termasuk mendaftarkan aplikasi dan menambahkan file konfigurasi Firebase (google-services.json) ke aplikasi Anda.

Menambahkan dependensi Gradle

Tambahkan dependensi Gradle berikut ke modul aplikasi Anda:

Kotlin

dependencies {
  ...
  implementation("com.google.firebase:firebase-vertexai:16.0.2")
}

Java

dependencies {

   [...]

   implementation("com.google.firebase:firebase-vertexai:16.0.2")

   // Required to use `ListenableFuture` from Guava Android for one-shot generation
   implementation("com.google.guava:guava:31.0.1-android")

   // Required to use `Publisher` from Reactive Streams for streaming operations
   implementation("org.reactivestreams:reactive-streams:1.0.4")
}

Melakukan inisialisasi layanan Vertex AI dan model generatif

Mulai dengan membuat instance GenerativeModel dan menentukan nama model:

Kotlin

val generativeModel = Firebase.vertexAI.generativeModel("gemini-1.5-flash")

Java

GenerativeModel gm = FirebaseVertexAI.getInstance().generativeModel("gemini-1.5-flash");

Dalam dokumentasi Firebase, Anda dapat mempelajari lebih lanjut model yang tersedia untuk digunakan dengan Vertex AI di Firebase. Anda juga dapat mempelajari cara mengonfigurasi parameter model.

Berinteraksi dengan Gemini API dari aplikasi Anda

Setelah menyiapkan Firebase dan aplikasi untuk menggunakan SDK, Anda siap untuk berinteraksi dengan Gemini API dari aplikasi.

Membuat teks

Untuk membuat respons teks, panggil generateContent() dengan perintah Anda.

Kotlin

// Note: `generateContent()` is a `suspend` function, which integrates well
// with existing Kotlin code.

scope.launch {
  val response = model.generateContent("Write a story about the green robot")
}

Java

// In Java, create a `GenerativeModelFutures` from the `GenerativeModel`.
// Note that `generateContent()` returns a `ListenableFuture`. Learn more:
// https://developer.android.com/develop/background-work/background-tasks/asynchronous/listenablefuture

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

Content prompt = new Content.Builder()
    .addText("Write a story about a green robot.")
    .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 (seperti yang ditunjukkan dalam contoh di bawah). Atau, Anda dapat menyertakan file media berukuran besar dalam permintaan dengan menggunakan URL Cloud Storage untuk Firebase.

Kotlin

scope.launch {
  val response = model.generateContent(
    content {
      image(bitmap)
      text("what is the object in the picture?")
    }
  )
}

Java

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sparky);

Content prompt = new Content.Builder()
        .addImage(bitmap)
        .addText("What developer tool is this mascot from?")
        .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);

Chat multi-giliran

Anda juga dapat mendukung percakapan multi-giliran. Lakukan inisialisasi chat dengan fungsi startChat(). Anda dapat memberikan histori pesan secara opsional. Kemudian, panggil fungsi sendMessage() untuk mengirim pesan chat.

Kotlin

val chat = generativeModel.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

// (Optional) create message history
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();

Publisher<GenerateContentResponse> streamingResponse =
        chat.sendMessageStream(message);

StringBuilder outputContent = new StringBuilder();

streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() {
    @Override
    public void onNext(GenerateContentResponse generateContentResponse) {
        String chunk = generateContentResponse.getText();
        outputContent.append(chunk);
    }

    @Override
    public void onComplete() {
        // ...
    }

    @Override
    public void onError(Throwable t) {
        t.printStackTrace();
    }

    @Override
    public void onSubscribe(Subscription s) {
        s.request(Long.MAX_VALUE);
    }

});

Menampilkan respons secara bertahap

Anda dapat mencapai interaksi yang lebih cepat dengan tidak menunggu seluruh hasil dari pembuatan model, dan sebagai gantinya menggunakan streaming untuk menangani hasil sebagian. Gunakan generateContentStream() untuk melakukan streaming respons.

Kotlin

scope.launch {
  var outputContent = ""

  generativeModel.generateContentStream(inputContent)
          .collect { response ->
            outputContent += response.text
          }
}

Java

// Note that in Java the method `generateContentStream()` returns a
// Publisher from the Reactive Streams library.
// https://www.reactive-streams.org/

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

// Provide a prompt that contains text
Content prompt = new Content.Builder()
        .addText("Write a story about a green robot.")
        .build();

Publisher<GenerateContentResponse> streamingResponse =
    model.generateContentStream(prompt);

StringBuilder outputContent = new StringBuilder();
streamingResponse.subscribe(new Subscriber<GenerateContentResponse>() {
  @Override
  public void onNext(GenerateContentResponse generateContentResponse) {
    String chunk = generateContentResponse.getText();
    outputContent.append(chunk);
  }

  @Override
  public void onComplete() {
    // ...
  }

  @Override
  public void onError(Throwable t) {
    t.printStackTrace();
  }

  @Override
  public void onSubscribe(Subscription s) {
    s.request(Long.MAX_VALUE);
  }
});

Langkah berikutnya