Google推出Gemini AI开发——10年工作经验的Android开发要被2年工作经验的淘汰了?

应用程序中利用 Gemini

  • 前言(可略过)、使用 Gemini Pro 开发应用程序
  • 正文、Android Studio 中构建Gemini API Starter 应用
    • 第 1 步:在 AI 的新项目模板的基础上进行构建
    • 第 2 步:生成 API 密钥
    • 第 3 步:开始原型设计
  • 正文补充、快速入门:使用 Gemini Pro 开始构建 AI 驱动的功能和 Android 应用。
    • 设置项目
    • 设置您的 API 密钥
    • 保护您的 API 密钥
    • 将 SDK 依赖项添加到项目中
    • 初始化生成模型
    • 实现常见用例
      • 根据纯文本输入生成文本
      • 根据文本和图片输入生成文本(多模式)
      • 构建多轮对话(聊天)
      • 使用流式传输实现更快速的互动
    • 实现高级用例
      • 计算令牌数
    • 用于控制内容生成的选项
      • 配置模型参数
      • 使用安全设置
    • 后续步骤

在这里插入图片描述

上周,谷歌推出了最强大的基础模型GeminiGemini 是多模式的AI——它可以接受文本和图像输入。
谷歌为 Android 开发者引入了一种在设备上,利用最小模型Gemini Nano的方法。此功能可通过 AICore 在部分设备上使用,这是一项处理模型管理、运行时、安全功能等的系统服务,可简化开发人员的工作。

前言(可略过)、使用 Gemini Pro 开发应用程序

Gemini Pro 可通过 Gemini API 访问,它是我们在各种文本和图像推理任务中扩展的最佳模型。为了简化 Gemini Pro 的集成,您可以使用 Google AI SDK(适用于 Android 的客户端 SDK)。该 SDK 支持与 Android 应用直接集成,开发人员无需构建和管理自己的后端基础设施,从而降低了开发成本并提高了速度。

Google AI Studio 为开发者提供了一种简化的方式来集成 Gemini Pro 模型、制作提示、创建 API 密钥以及轻松地将想法转化为 AI 应用。在 Google AI Studio 中开发出提示后,您只需单击“获取代码”操作即可生成 Kotlin 代码片段,并立即开始使用适用于 Android 的 Google AI SDK 集成 Gemini。

在这里插入图片描述
我们还让开发者能够更轻松地在Android Studio 最新预览版中直接使用 Gemini API。我们推出了新项目模板,供开发者立即开始使用适用于 Android 的 Google AI SDK。您将受益于 Android Studio 增强的代码完成和 lint 检查器,有助于 API 密钥和安全性。

在这里插入图片描述
要利用 Android Studio 中的新模板,请通过 File > 启动一个新项目新的>新建项目并选择 Gemini API 入门模板。该模板提供了一个预配置的项目,其中包含使用 Gemini API 所需的代码。选择项目名称和位置后,系统会提示您在 Google AI Studio 中生成 API 密钥,并要求您在 Android Studio 中输入该密钥。 Android Studio 将通过 Gemini API 连接自动为您设置项目,从而简化您的工作流程。

或者,您可以导入生成式 AI 代码示例并通过 在 Android Studio 中进行设置文件>新的>导入示例,然后搜索“Generative AI Sample”。

在这里插入图片描述
至此,一个简单的示例就搭建完毕了。接下来是详细的Android Studio中的操作步骤。

正文、Android Studio 中构建Gemini API Starter 应用

本文档简要介绍了如何使用 Android Studio 构建使用 Google AI SDK 实现生成式 AI 的应用。该流程分为三个步骤。在开始之前,请确保您运行的是最新的预览版 Android Studio。

第 1 步:在 AI 的新项目模板的基础上进行构建

启动 Android Studio,然后依次选择 File > New Project 以打开一个新项目。选择新的 Gemini API 入门模板
在这里插入图片描述

第 2 步:生成 API 密钥

在向导的下一步中,选择项目名称和位置后,请提供用于向 Gemini API 进行身份验证的 API 密钥。如果您没有 Gemini API 密钥,请点击向导中提供的链接转到 Google AI Studio 并请求新密钥。完成后,将新的 API 密钥复制回向导。 点击 Finish。
在这里插入图片描述
在这里插入图片描述

第 3 步:开始原型设计

Android Studio 会自动为您设置一个连接到 Gemini API 的项目,从而简化您的工作流程。点击 Run 即可在 Android 模拟器中查看代码的实际运行情况。 该应用附带一条硬编码提示,要求模型“为我总结以下文本”。您可以直接在代码中修改或展开提示,以修改其功能。
在这里插入图片描述

如需详细了解如何创建提示,请参阅 下面的快速入门模块中的:实现常见用例等。

正文补充、快速入门:使用 Gemini Pro 开始构建 AI 驱动的功能和 Android 应用。

设置项目

在调用 Gemini API 之前,您需要设置 Android 项目,其中包括设置 API 密钥、将 SDK 依赖项添加到 Android 项目,以及初始化模型。

设置您的 API 密钥

您需要 API 密钥才能使用 Gemini API。如果您还没有密钥,请在 Google AI Studio 中创建一个。

保护您的 API 密钥

强烈建议您不要将 API 密钥签入版本控制系统。您应将其存储在 local.properties 文件中(该文件位于项目的根目录中,但不在版本控制范围内),然后使用 Android 版 Secrets Gradle 插件以 build 配置变量的形式读取 API 密钥。

// Access your API key as a Build Configuration variable
val apiKey = BuildConfig.apiKey

本快速入门中的所有代码段均采用此最佳实践。此外,如果您想查看 Secrets Gradle 插件的实现,可以查看此 SDK 的示例应用,或者使用 Android Studio Iguana 的最新预览版,它具有 Gemini API Starter 模板(包含 local.properties 文件,旨在帮助您开始使用)

将 SDK 依赖项添加到项目中

1、在您的模块(应用级)Gradle 配置文件(如 //build.gradle.kts)中,添加 Google AI SDK for Android 的依赖项:

dependencies {// ... other androidx dependencies// add the dependency for the Google AI client SDK for Androidimplementation("com.google.ai.client.generativeai:generativeai:0.1.1")
}

2、将您的 Android 项目与 Gradle 文件同步。

初始化生成模型

在进行任何 API 调用之前,您需要先初始化 GenerativeModel 对象:

val generativeModel = GenerativeModel(// Use a model that's applicable for your use case (see "Implement basic use cases" below)modelName = "MODEL_NAME",// Access your API key as a Build Configuration variable (see "Set up your API key" above)apiKey = BuildConfig.apiKey
)

指定模型时,请注意以下事项:

您需要使用特定于您的用例的模型(例如,gemini-pro-vision 适用于多模态输入);如需了解每个用例的推荐模型,请参阅本指南的下一部分。

实现常见用例

现在您的项目已设置完毕,您可以探索如何使用 Gemini API 来实现不同的用例:

  • 根据纯文本输入生成文本
  • 从文本和图片输入生成文本(多模式)
  • 构建多轮对话(聊天)
  • 使用流式传输加快互动速度

根据纯文本输入生成文本

当提示输入仅包含文本时,请将 gemini-pro 模型与 generateContent 结合使用以生成文本输出:
请注意,generateContent() 是一个挂起函数,需要从协程作用域中调用。如果您不熟悉协程,请参阅 Android 上的 Kotlin 协程。

kotlin
val generativeModel = GenerativeModel(// For text-only input, use the gemini-pro modelmodelName = "gemini-pro",// Access your API key as a Build Configuration variable (see "Set up your API key" above)apiKey = BuildConfig.apiKey
)val prompt = "Write a story about a magic backpack."
val response = generativeModel.generateContent(prompt)
print(response.text)

根据文本和图片输入生成文本(多模式)

Gemini 提供了一个多模态模型 (gemini-pro-vision),因此您可以同时输入文本和图片。请务必查看提示的图片要求

当提示输入同时包含文本和图片时,请将 gemini-pro-vision 模型与 generateContent 结合使用以生成文本输出:

val generativeModel = GenerativeModel(// For text-and-images input (multimodal), use the gemini-pro-vision modelmodelName = "gemini-pro-vision",// Access your API key as a Build Configuration variable (see "Set up your API key" above)apiKey = BuildConfig.apiKey
)val image1: Bitmap = // ...
val image2: Bitmap = // ...val inputContent = content {image(image1)image(image2)text("What's different between these pictures?")
}val response = generativeModel.generateContent(inputContent)
print(response.text)

构建多轮对话(聊天)

借助 Gemini,您可以构建多轮自由对话。该 SDK 通过管理对话状态简化了流程,因此与 generateContent 不同,您无需自行存储对话历史记录。

如需构建多轮对话(如聊天),请使用 gemini-pro 模型,并通过调用 startChat() 来初始化聊天。然后,使用 sendMessage() 发送一条新用户消息,此消息还会将该消息和响应附加到聊天记录中。

与对话内容关联的 role 有两个可能的选项:

user:提供提示的角色。这是 sendMessage 调用的默认值。

model:提供响应的角色。在使用现有 history 调用 startChat() 时,可以使用此角色。

注意 :gemini-pro-vision 模型(适用于文本和图片输入)尚未针对多轮对话进行优化。请务必针对聊天用例使用 gemini-pro 和纯文字输入。

val generativeModel = GenerativeModel(// For text-only input, use the gemini-pro modelmodelName = "gemini-pro",// Access your API key as a Build Configuration variable (see "Set up your API key" above)apiKey = BuildConfig.apiKey
)val chat = generativeModel.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?") })
)chat.sendMessage("How many paws are in my house?")

使用流式传输实现更快速的互动

默认情况下,模型会在完成整个生成过程后返回响应。通过不等待整个结果,而是使用流式传输来处理部分结果,您可以实现更快的互动。

以下示例展示了如何使用 generateContentStream 实现流式传输,以根据文本和图像输入提示生成文本。

val generativeModel = GenerativeModel(// For text-and-image input (multimodal), use the gemini-pro-vision modelmodelName = "gemini-pro-vision",// Access your API key as a Build Configuration variable (see "Set up your API key" above)apiKey = BuildConfig.apiKey
)val image1: Bitmap = // ...
val image2: Bitmap = // ...val inputContent = content {image(image1)image(image2)text("What's the difference between these pictures?")
}var fullResponse = ""
generativeModel.generateContentStream(inputContent).collect { chunk ->print(chunk.text)fullResponse += chunk.text
}

您可以在纯文本输入和聊天用例中使用类似方法:

// Use streaming with text-only input
generativeModel.generateContentStream(inputContent).collect { chunk ->print(chunk.text)
}
// Use streaming with multi-turn conversations (like chat)
val chat = generativeModel.startChat()
chat.sendMessageStream(inputContent).collect { chunk ->print(chunk.text)
}

实现高级用例

本快速入门的上一部分中介绍的常见用例可帮助您熟悉 Gemini API。本部分介绍了一些可能被视为更高级的用例。

计算令牌数

使用长提示时,在向模型发送任何内容之前统计令牌数可能很有用。以下示例展示了如何针对各种用例使用 countTokens():

// For text-only input
val (totalTokens) = generativeModel.countTokens("Write a story about a magic backpack.")// For text-and-image input (multi-modal)
val multiModalContent = content {image(image1)image(image2)text("What's the difference between these pictures?")
}val (totalTokens) = generativeModel.countTokens(multiModalContent)// For multi-turn conversations (like chat)
val history = chat.history
val messageContent = content { text("This is the message I intend to send")}
val (totalTokens) = generativeModel.countTokens(*history.toTypedArray(), messageContent)

用于控制内容生成的选项

您可以通过配置模型参数和使用安全设置来控制内容生成。、

配置模型参数

您发送到模型的每个提示都包含用于控制模型如何生成回答的参数值。对于不同的参数值,模型会生成不同的结果。详细了解模型参数

val config = generationConfig {temperature = 0.9ftopK = 16topP = 0.1fmaxOutputTokens = 200stopSequences = listOf("red")
}val generativeModel = GenerativeModel(modelName = "MODEL_NAME",apiKey = BuildConfig.apiKey,generationConfig = config
)

使用安全设置

您可以使用安全设置来调整收到可能被视为有害的响应的可能性。默认情况下,安全设置会在所有维度上屏蔽概率中等和/或高可能属于不安全内容的内容。详细了解安全设置
下面是设置一项安全设置的具体方法:

val generativeModel = GenerativeModel(modelName = "MODEL_NAME",apiKey = BuildConfig.apiKey,safetySettings = listOf(SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.ONLY_HIGH))
)

您还可以设定多个安全设置:

val harassmentSafety = SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.ONLY_HIGH)val hateSpeechSafety = SafetySetting(HarmCategory.HATE_SPEECH, BlockThreshold.MEDIUM_AND_ABOVE)val generativeModel = GenerativeModel(modelName = "MODEL_NAME",apiKey = BuildConfig.apiKey,safetySettings = listOf(harassmentSafety, hateSpeechSafety)
)

后续步骤

提示设计是创建提示以从语言模型引出所需回复的过程。编写结构合理的提示对于确保语言模型提供准确、高质量的响应至关重要。了解提示撰写的最佳做法。

Gemini 提供了多种模型变体,以满足不同用例的需求,例如输入类型和复杂度、聊天或其他对话框语言任务的实现,以及大小限制。了解可用的 Gemini 模型。

Gemini 提供用于请求提高速率限制的选项。Genmini Pro 模型的速率限制为每分钟 60 个请求 (RPM)。

借助本快速入门中介绍的适用于 Android 的客户端 SDK,您可以访问在 Google 服务器上运行的 Genmini Pro 模型。对于涉及处理敏感数据、实现离线可用性的用例,或者需要为常用用户流节省费用,您可能需要考虑访问在设备上运行的 Gemini Nano。如需了解详情,请参阅 Android(设备端)快速入门。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/240404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis之增删改查

目录 一、引言 二、Mybatis——增 举例:添加用户 三、Mybatis——删 举例:删除用户 四、Mybatis——改 举例:修改用户 五、Mybatis——查 六、注意 END: 一、引言 书接上回,我们在了解完mybatis之后,肯…

STM32F4 HAL流水灯Proteus仿真

源码下载:https://download.csdn.net/download/zlkk00/88654405

CSS基础小练习

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>圣诞节快乐</title><style>/*设置背景色*/body{background-image:linear-gradient(green 50%,red 50%);background-size:100% 30px;}/*让div在页面居中*/#text{…

20231223使用Rockchip原厂的Android11调通Firefly的AIO-3399J开发板上的AP6356S

20231223使用Rockchip原厂的Android11调通Firefly的AIO-3399J开发板上的AP6356S 2023/12/23 14:14 开发板&#xff1a;Firefly的AIO-3399J【RK3399】 SDK&#xff1a;rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBrick】 Android11.0.tar.bz2…

C# Onnx yolov8n csgo player detection

目录 效果 模型信息 项目 代码 下载 C# Onnx yolov8n csgo player detection 效果 模型信息 Model Properties ------------------------- date&#xff1a;2023-12-22T15:01:08.014205 author&#xff1a;Ultralytics task&#xff1a;detect license&#xff1a;AGPL-…

学会这套Pytest接口自动化测试框架,击败99%的人

Pytest 的下载安装 1、Python3 使用 pip install -U pytest 安装 2、查看 pytest 版本信息 pytest --version 3、pytest 用例的执行规则&#xff1a; ①测试文件以 test_xx.py 命名需要以 test_开头&#xff08;或_test 结尾&#xff09; ②测试类以 Test_开头&#xff0…

智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.骑手优化算法4.实验参数设定5.算法结果6.…

跨平台应用程序开发软件,携RAD Studio 12新版上线

RAD Studio 是一款专为程序员而准备的跨平台应用程序开发软件&#xff0c;内置Delphi和CBuilder这两种开发工具&#xff0c;另外还提供了新的C功能&#xff0c;扩展了对ExtJS的RAD服务器支持&#xff0c;增强了对vcL的高dpi支持&#xff0c;提高了firemonk (FMX)的质量等等&…

C++结合OpenCV:掌握图像基础与处理

本文详细介绍了使用 OpenCV4 进行图像处理的基础知识和操作。内容包括图像的基础概念、色彩空间理解、以及如何在 C 中进行图像读取、显示和基础操作。 1.图像的基本概念与术语 图像表示 在计算机视觉中&#xff0c;图像通常表示为一个二维或三维的数组。二维数组表示灰度图像&…

[SQL]实验 视图和索引的应用

实验目的&#xff1a; [实验目的和要求] 1、掌握视图的创建、修改和重命名的方法 2、掌握视图中数据的操作 3、了解索引的作用 4、掌握索引的创建方法 实验步骤&#xff1a; 1、在销售管理数据库中&#xff0c;创建一个女职工视图&#xff0c;包括员工的编号、姓名、性别、雇佣…

网站怎么才能做好SEO?网站SEO指引!!

在当今互联网的激烈竞争中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已成为提升网站流量和吸引更多用户的关键手段。为了帮助您更好地掌握SEO网站优化技巧&#xff0c;本文将深入探讨以下几个方面&#xff1a; 一、关键词策略 关键词策略是SEO优化的基石。正确选择…

【WPF.NET开发】创建样式

本文内容 创建样式隐式应用样式显式应用样式以编程方式应用样式扩展样式TargetType 属性与 x:Key 属性之间的关系 使用 Windows Presentation Foundation (WPF)&#xff0c;可以使用自己的可重用样式自定义现有控件的外观。 可以对应用、窗口和页面全局应用样式&#xff0c;也…

Ansible的脚本---Playbook剧本编写

playbook的组成部分 1、 tasks&#xff1a;任务 在目标主机上需要执行的操作。使用模块定义这些操作。每个任务都是一个模块的调用。 2、 variables&#xff1a;变量 用于存储和传递数据。类似于shell脚本中的变量。变量可以自定义。可以在playbook当中定义为全局变量&…

基于Vite+Vue3 给项目引入Axios

基于ViteVue3 给项目引入Axios,方便与后端进行通信。 系列文章指路&#x1f449; 系列文章-基于Vue3创建前端项目并引入、配置常用的库和工具类 文章目录 安装依赖新建src/config/config.js 用于存放常用配置进行简单封装解决跨域问题调用尝试 安装依赖 npm install axios …

PIL/Pillow

Abstract PIL(Python Imaging Library)是一个用于图像处理的 Python 库。它提供了广泛的功能&#xff0c;包括图像加载、保存、调整大小、裁剪、旋转、滤镜应用等。 由于 PIL 的开发停止在 2009 年&#xff0c;因此推荐使用其后续的维护版本 Pillow。Pillow 是一个兼容 PIL 接…

Springboot启动异常 OgnlException: sqlSelect [java.lang.NoSuchMethodError

完整的日志如下&#xff1a; Invocation of init method failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression ew ! null and ew.sqlSelect ! null. Cause…

不忍学弟学妹受苦受难!!!逐一讲解发动机原理实验报告(1)

固体火箭发动机侵蚀燃烧测试实验 经过了愉快迷糊——哦不瑟瑟发抖——哦不痛不欲生的两天&#xff0c;终于和小伙伴们协力完成了西北工业大学航天学院发动机原理实验报告。具体的实验指导书均可在本人博客资源站下载。 固体火箭发动机侵蚀燃烧测试实验&#xff0c;嗯哼—— 实…

MySQL 事务的ACID特性

MySQL事务是什么&#xff0c;它就是一组数据库的操作&#xff0c;是访问数据库的程序单元&#xff0c;事务中可能包含一个或者多个 SQL 语句。这些SQL 语句要么都执行、要么都不执行。我们知道&#xff0c;在MySQL 中&#xff0c;有不同的存储引擎&#xff0c;有的存储引擎比如…

c++学习笔记-提高篇-STL标准模板库3(stack容器、queue容器以及list容器)

目录 Stack容器 一、Stack容器介绍 二、stack常用接口 三、栈的示例 queue&#xff08;队列&#xff09;容器 一、queue容器介绍 二、queue常用接口 三、queue示例 list容器 一、list容器介绍 二、list常用接口及示例 &#xff08;一&#xff09;list构造函数 &am…

使用Swift Package Manager (SPM)实现xcframework分发

Swift Package Manager (SPM) 是苹果官方提供的用于管理 Swift 项目的依赖关系和构建过程的工具。它是一个集成在 Swift 编程语言中的包管理器&#xff0c;用于解决在开发过程中管理和构建包依赖项的需求。 1、上传xcframework.zip到服务端 压缩xcframeworks成一个zip包&…