将 Google 的 Gemini SDK 集成到 Android 应用程序中,开发者无需管理复杂的后端 AI 基础架构,从而简化了应用程序开发流程。本文深入探讨如何将 Gemini 的强大功能引入 Android 项目,包括 API 密钥的获取、项目配置以及各种使用场景,并提供详细的代码示例和参考资料,助力开发者快速上手 Gemini SDK 的集成与应用。
Gemini API 使用入门及其集成 Android 应用程序
一、获取 API 密钥及其项目配置
首先,访问 Google AI Studio 获取 API 密钥。需要注意的是,如果重定向到 可用区域,则表示该 API 在您所在的地区可能尚不可用。您可以使用 VPN 进行测试。
接下来,在您的 Android 项目中导入必要的依赖项。在 build.gradle
文件中添加以下内容:
dependencies {
// add the dependency for the Google AI client SDK for Android
implementation("com.google.ai.client.generativeai:generativeai:0.6.0")
}
此依赖项使您能够在应用程序中使用 Gemini 的功能。请确保同步您的 Gradle 文件以应用更改。
在选择模型时,如果仅需处理文本输入,建议使用 gemini-pro
模型。如果需要处理文本和图像输入,则应选择 gemini-pro-vision
模型。
二、常见使用场景
Gemini API 提供了多种使用场景,以下是一些常见的示例:
1. 根据纯文本输入生成文本
此场景适用于需要根据文本提示生成文本内容的应用程序。例如,您可以创建一个应用程序,根据用户提供的关键词生成文章、故事或诗歌。
以下是一个简单的示例,演示如何使用 gemini-pro
模型根据文本输入生成文本:
import com.google.ai.client.generativeai.GenerativeModel
import com.google.ai.client.generativeai.genai.GenerationConfig
import com.google.ai.client.generativeai.genai.SafetySetting
import com.google.ai.client.generativeai.genai.Text
import com.google.ai.client.generativeai.genai.Content
import com.google.ai.client.generativeai.GenerativeModel
import com.google.ai.client.generativeai.SafetyCategory
import com.google.ai.client.generativeai.HarmBlockThreshold
// 在您的 Activity 或 Fragment 中
val apiKey = "YOUR_API_KEY" // 替换为您的实际 API 密钥
val modelName = "gemini-pro"
val generativeModel = GenerativeModel(modelName, apiKey)
// 准备提示
val prompt = "请写一篇关于人工智能的文章。"
val safetySettings = listOf(
SafetySetting(
SafetyCategory.HARASSMENT,
HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE
),
SafetySetting(
SafetyCategory.HATE_SPEECH,
HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE
),
SafetySetting(
SafetyCategory.SEXUALLY_EXPLICIT,
HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE
),
SafetySetting(
SafetyCategory.DANGEROUS_CONTENT,
HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE
)
)
val generationConfig = GenerationConfig(
temperature = 0.9f,
topK = 1,
topP = 1f,
maxOutputTokens = 2048,
)
val model = GenerativeModel(
modelName = "gemini-pro",
apiKey = apiKey,
generationConfig = generationConfig,
safetySettings = safetySettings
)
// 运行生成请求
CoroutineScope(Dispatchers.IO).launch {
val response = model.generateContent(prompt)
val text = response.text
// 在 UI 线程上更新 UI
withContext(Dispatchers.Main) {
// 将生成的文本显示在 UI 上
textView.text = text
}
}
在此示例中,我们首先创建了一个 GenerativeModel
实例,指定了模型名称和 API 密钥。然后,我们准备了一个提示,并使用 generateContent
方法生成文本。最后,我们将生成的文本显示在 UI 上。
请记住,API 调用应该在后台线程上执行,以避免阻塞 UI 线程。可以使用 CoroutineScope
和 Dispatchers.IO
来实现这一点。
2. 根据文本和图片输入生成文本(多模态)
此场景适用于需要根据文本和图像的组合生成文本内容的应用程序。例如,您可以创建一个应用程序,根据用户上传的图片和提供的关键词生成图像描述或故事。
以下是一个示例,演示如何使用 gemini-pro-vision
模型根据文本和图像输入生成文本:
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import com.google.ai.client.generativeai.GenerativeModel
import com.google.ai.client.generativeai.Content
import com.google.ai.client.generativeai.Part
// 在您的 Activity 或 Fragment 中
val apiKey = "YOUR_API_KEY" // 替换为您的实际 API 密钥
val modelName = "gemini-pro-vision"
val generativeModel = GenerativeModel(modelName, apiKey)
// 准备提示和图片
val prompt = "请描述这张图片。"
val image: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.image)
// 创建内容对象
val content = Content.builder()
.addText(prompt)
.add(image)
.build()
// 运行生成请求
CoroutineScope(Dispatchers.IO).launch {
val response = generativeModel.generateContent(content)
val text = response.text
// 在 UI 线程上更新 UI
withContext(Dispatchers.Main) {
// 将生成的文本显示在 UI 上
textView.text = text
}
}
在此示例中,我们首先加载一张图片,并准备一个提示。然后,我们创建一个 Content
对象,其中包含文本和图像。最后,我们使用 generateContent
方法生成文本,并将生成的文本显示在 UI 上。
同样,API 调用应该在后台线程上执行,以避免阻塞 UI 线程。
3. 发起多轮对话(聊天)
Gemini API 支持多轮对话,允许您创建聊天机器人或其他交互式应用程序。
以下是一个示例,演示如何使用 gemini-pro
模型发起多轮对话:
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import com.google.ai.client.generativeai.GenerativeModel
import com.google.ai.client.generativeai.Chat
import com.google.ai.client.generativeai.Content
// 在您的 Activity 或 Fragment 中
val apiKey = "YOUR_API_KEY" // 替换为您的实际 API 密钥
val modelName = "gemini-pro"
val generativeModel = GenerativeModel(modelName, apiKey)
// 创建聊天对象
val chat: Chat = generativeModel.startChat()
// 发送消息并获取回复
fun sendMessage(message: String) {
CoroutineScope(Dispatchers.IO).launch {
val response = chat.sendMessage(message)
val text = response.text
// 在 UI 线程上更新 UI
withContext(Dispatchers.Main) {
// 将回复显示在 UI 上
textView.text = text
}
}
}
// 使用示例
sendMessage("你好!")
sendMessage("你叫什么名字?")
在此示例中,我们首先创建了一个 Chat
对象。然后,我们定义了一个 sendMessage
函数,该函数接受一条消息作为输入,并使用 sendMessage
方法发送消息并获取回复。最后,我们将回复显示在 UI 上。
4. 使用流式传输加快互动速度
为了提高用户体验,Gemini API 支持流式传输,允许您在生成文本的同时逐步显示文本。
以下是一个示例,演示如何使用流式传输根据文本输入生成文本:
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import com.google.ai.client.generativeai.GenerativeModel
// 在您的 Activity 或 Fragment 中
val apiKey = "YOUR_API_KEY" // 替换为您的实际 API 密钥
val modelName = "gemini-pro"
val generativeModel = GenerativeModel(modelName, apiKey)
// 准备提示
val prompt = "请写一篇关于人工智能的文章。"
// 运行生成请求
CoroutineScope(Dispatchers.IO).launch {
generativeModel.generateContentStream(prompt).collect {
val text = it.text
// 在 UI 线程上更新 UI
withContext(Dispatchers.Main) {
// 将生成的文本逐步显示在 UI 上
textView.append(text)
}
}
}
在此示例中,我们使用 generateContentStream
方法生成文本流。然后,我们使用 collect
方法收集文本流中的每个块,并将生成的文本逐步显示在 UI 上。