借助 Google AI 客户端 SDK,您可以直接从 Android 应用调用 Gemini API 并使用 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 密钥。
您可以视需要定义模型参数,并为温度、topK、topP 和输出词元数量上限提供值。
您还可以为以下主题定义安全功能:
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 中导入适用于 Android 的 Google AI 客户端 SDK 示例应用。
后续步骤
- 查看 GitHub 上的 Google AI 客户端 SDK for Android 示例应用。