SDK klien Google AI

SDK klien Google AI memungkinkan Anda memanggil Gemini API dan menggunakan rangkaian model Gemini langsung dari aplikasi Android.

Paket gratis memungkinkan Anda bereksperimen tanpa biaya. Untuk detail harga lainnya, lihat panduan harga.

Arsitektur integrasi Google AI
Gambar 1. Arsitektur integrasi Google AI.

Memulai

Sebelum berinteraksi dengan Gemini API langsung dari aplikasi, Anda harus melakukan beberapa hal terlebih dahulu, termasuk memahami perintah serta membuat kunci API dan menyiapkan aplikasi untuk menggunakan SDK.

Bereksperimen dengan perintah

Mulailah dengan membuat prototipe perintah Anda di Google AI Studio.

Google AI Studio adalah IDE untuk desain dan pembuatan prototipe perintah. Dengan alat ini, Anda dapat mengunggah 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 ilmu pengetahuan, yang membuat eksperimen menjadi penting. Anda dapat mempelajari perintah lebih lanjut di dokumentasi Google AI resmi.

Google AI Studio
Gambar 2. Google AI Studio

Untuk mempelajari lebih lanjut kemampuan lanjutan Google AI Studio, lihat panduan memulai Google AI Studio.

Membuat kunci API

Setelah puas dengan perintah Anda, klik Dapatkan kunci API untuk membuat kunci Gemini API Anda. Kunci akan dipaketkan dengan aplikasi Anda, yang tidak masalah untuk eksperimen dan pembuatan prototipe, tetapi tidak direkomendasikan untuk kasus penggunaan produksi.

Selain itu, untuk mencegah kunci API Anda di-commit ke repositori kode sumber, gunakan plugin gradle Secrets.

Menambahkan dependensi Gradle

Tambahkan dependensi untuk SDK klien Google AI ke aplikasi Anda:

Kotlin

dependencies {
  [...]
 implementation("com.google.ai.client.generativeai:generativeai:0.7.0")
}

Java

dependencies {
  [...]
  implementation("com.google.ai.client.generativeai:generativeai:0.7.0")

  // 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")
}

Membuat GenerativeModel

Mulailah dengan membuat instance GenerativeModel dengan memberikan hal berikut:

  • Nama model: gemini-1.5-flash, gemini-1.5-pro, atau gemini-1.0-pro
  • Kunci API yang dibuat dengan Google AI Studio.

Secara opsional, Anda dapat menentukan parameter model dan memberikan nilai untuk temperature, topK, topP, dan token output maksimum.

Anda juga dapat menentukan fitur keamanan untuk topik berikut:

  • HARASSMENT
  • HATE_SPEECH
  • SEXUALLY_EXPLICIT
  • DANGEROUS_CONTENT

Kotlin

val model = GenerativeModel(
  model = "gemini-1.5-flash-001",
  apiKey = BuildConfig.apikey,
  generationConfig = generationConfig {
    temperature = 0.15f
    topK = 32
    topP = 1f
    maxOutputTokens = 4096
  },
  safetySettings = listOf(
    SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.MEDIUM_AND_ABOVE),
    SafetySetting(HarmCategory.HATE_SPEECH, BlockThreshold.MEDIUM_AND_ABOVE),
    SafetySetting(HarmCategory.SEXUALLY_EXPLICIT, BlockThreshold.MEDIUM_AND_ABOVE),
    SafetySetting(HarmCategory.DANGEROUS_CONTENT, BlockThreshold.MEDIUM_AND_ABOVE),
  )
)

Java

GenerationConfig.Builder configBuilder = new GenerationConfig.Builder();
configBuilder.temperature = 0.15f;
configBuilder.topK = 32;
configBuilder.topP = 1f;
configBuilder.maxOutputTokens = 4096;

ArrayList<SafetySetting> safetySettings = new ArrayList();
safetySettings.add(new SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.MEDIUM_AND_ABOVE));
safetySettings.add(new SafetySetting(HarmCategory.HATE_SPEECH, BlockThreshold.MEDIUM_AND_ABOVE));
safetySettings.add(new SafetySetting(HarmCategory.SEXUALLY_EXPLICIT, BlockThreshold.MEDIUM_AND_ABOVE));
safetySettings.add(new SafetySetting(HarmCategory.DANGEROUS_CONTENT, BlockThreshold.MEDIUM_AND_ABOVE));

GenerativeModel gm = new GenerativeModel(
    "gemini-1.5-flash-001",
    BuildConfig.apiKey,
    configBuilder.build(),
    safetySettings
);

Menggunakan SDK klien Google AI di aplikasi

Setelah memiliki kunci API dan menyiapkan aplikasi untuk menggunakan SDK, Anda siap berinteraksi dengan Gemini API.

Membuat teks

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

Kotlin

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

Java

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

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

Content content = new Content.Builder()
      .addText("Write a story about a green robot.")
      .build();
Executor executor = // ...

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);

Perhatikan bahwa generateContent() adalah fungsi suspend, yang terintegrasi dengan baik dengan kode Kotlin yang ada.

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).

Kotlin

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

Java

Content content = new Content.Builder()
     .addImage(bitmap)
     .addText("What is the object in this picture?")
     .build();

Executor executor = // ...

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);

Multi-turn chat

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 = 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();

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

Content.Builder userMessageBuilder = new Content.Builder();
userMessageBuilder.setRole("user");
userMessageBuilder.addText("How many paws are in my house?");
Content userMessage = userMessageBuilder.build();

Executor executor = // ...

ListenableFuture<GenerateContentResponse> response = chat.sendMessage(userMessage);

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);

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

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

Java

// In Java, the method generateContentStream() returns a Publisher
// from the Reactive Streams library.
// https://www.reactive-streams.org/

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

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);  // Request all messages
 }
});

Android Studio

Android Studio menyediakan alat tambahan untuk membantu Anda memulai.

  • Template awal Gemini API: Template awal ini membantu Anda membuat kunci API langsung dari Android Studio dan membuat project yang menyertakan dependensi Android yang diperlukan untuk menggunakan Gemini API.
  • Contoh AI generatif: Contoh ini memungkinkan Anda mengimpor SDK klien Google AI untuk aplikasi contoh Android di Android Studio.

Langkah berikutnya