Google AI 用戶端 SDK

您可以使用 Google AI 用戶端 SDK 呼叫 Gemini API,並直接透過 Android 應用程式使用 Gemini 系列模型。

免付費方案可讓您免費試驗。如需其他定價詳細資訊,請參閱定價指南

Google AI 整合架構
圖 1:Google AI 整合架構。

開始使用

您必須先完成幾項操作,才能直接從應用程式與 Gemini API 互動,包括熟悉提示、產生 API 金鑰,以及設定應用程式以使用 SDK。

測試提示

請先在 Google AI Studio 中設計提示的原型。

Google AI Studio 是用於設計提示和原型設計的 IDE。您可以上傳檔案來測試含有文字和圖片的提示,並儲存提示以便日後查看。

為特定用途設計合適的提示,不只是科學,更是一門藝術,因此實驗至關重要。如要進一步瞭解提示,請參閱 Google AI 官方說明文件

Google AI Studio
圖 2. Google AI Studio

如要進一步瞭解 Google AI Studio 的進階功能,請參閱 Google AI Studio 快速入門指南

產生 API 金鑰

確認提示內容無誤後,請按一下「取得 API 金鑰」,產生 Gemini API 金鑰。金鑰會與應用程式一併提供,可用於實驗和原型設計,但不建議用於正式版用途

此外,為避免 API 金鑰提交至原始碼存放區,請使用 Secrets Gradle 外掛程式

新增 Gradle 依附元件

將 Google AI 用戶端 SDK 的依附元件新增至應用程式:

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

建立 GenerativeModel

首先,請提供下列資訊來例項化 GenerativeModel

  • 型號名稱gemini-1.5-flashgemini-1.5-progemini-1.0-pro
  • 您透過 Google AI Studio 產生的 API 金鑰

您可以選擇定義模型參數,並為溫度前 K 個可能性總和為 P輸出符元的數量上限提供值。

您也可以為下列主題定義安全功能

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

在應用程式中使用 Google AI 用戶端 SDK

取得 API 金鑰並設定應用程式以使用 SDK 後,您就可以與 Gemini API 互動了。

產生文字

如要產生文字回應,請使用提示呼叫 generateContent()

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

請注意,generateContent()suspend 函式,可與現有的 Kotlin 程式碼完美整合。

使用圖片和其他媒體生成文字

您也可以根據包含文字和圖片或其他媒體的提示產生文字。呼叫 generateContent() 時,您可以將媒體做為內嵌資料傳遞 (如以下範例所示)。

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

多輪對話

您也可以支援多輪對話。使用 startChat() 函式初始化即時通訊。您可以選擇提供訊息記錄。接著呼叫 sendMessage() 函式,傳送即時通訊訊息。

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

逐句顯示回應

您可以不等待模型產生的完整結果,改用串流處理部分結果,以便加快互動速度。使用 generateContentStream() 串流回應。

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 提供其他工具,可協助您快速上手。

  • Gemini API 啟動專案範本:這個啟動專案範本可協助您直接透過 Android Studio 建立 API 金鑰,並產生專案,其中包含使用 Gemini API 所需的 Android 依附元件。
  • 生成式 AI 範例:這個範例可讓您在 Android Studio 中匯入 Google AI 用戶端 SDK for Android 範例應用程式。

後續步驟