您可以使用 Google AI 用戶端 SDK 呼叫 Gemini API,並直接透過 Android 應用程式使用 Gemini 系列模型。
免付費方案可讓您免費試驗。如需其他定價詳細資訊,請參閱定價指南。
開始使用
您必須先完成幾項操作,才能直接從應用程式與 Gemini API 互動,包括熟悉提示、產生 API 金鑰,以及設定應用程式以使用 SDK。
測試提示
請先在 Google AI Studio 中設計提示的原型。
Google AI Studio 是用於設計提示和原型設計的 IDE。您可以上傳檔案來測試含有文字和圖片的提示,並儲存提示以便日後查看。
為特定用途設計合適的提示,不只是科學,更是一門藝術,因此實驗至關重要。如要進一步瞭解提示,請參閱 Google AI 官方說明文件。
如要進一步瞭解 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-flash
、gemini-1.5-pro
或gemini-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 範例應用程式。
後續步驟
- 請參閱 GitHub 上的 Google AI 客戶端 SDK for Android 範例應用程式。