在 Android 上使用机器学习套件生成智能回复
机器学习套件可以使用设备端模型生成简短的消息回复。
如需生成智能回复,您需要向机器学习套件传递会话中最近消息的日志。如果机器学习套件确认会话使用的语言是英语,并且其中没有潜在的敏感主题,则会生成最多三个回复,供您向用户推荐。
此 API 是使用必须在下载之前下载的未捆绑库,或者是会增加应用大小的捆绑库。如需详细了解这两个安装选项之间的差异,请参阅此指南。
捆绑 | 未捆绑 | |
---|---|---|
库名称 | com.google.mlkit:smart-reply |
com.google.android.gms:play-services-mlkit-smart-reply |
实现 | 模型在构建时以静态方式关联到您的应用。 | 模型通过 Google Play 服务动态下载。 |
应用大小影响 | 大小增加约 5.7 MB。 | 大小增加约 200 KB。 |
初始化时间 | 模型可立即使用。 | 可能要等到模型下载后才能使用。 |
注意 :智能回复的未捆绑版本目前处于 Beta 版阶段,这意味着它可能会以不向后兼容的方式更改,并且不受任何服务等级协议 (SLA) 或弃用政策的约束。
须知事项
此 API 需要 Android API 级别 19 或更高级别。确保应用的 build 文件使用的 minSdkVersion
值不小于 19。
-
请务必在您的项目级
build.gradle
文件中的buildscript
和allprojects
部分添加 Google 的 Maven 代码库。 -
将 Android 版机器学习套件库的依赖项添加到模块的应用级 Gradle 文件(通常为
app/build.gradle
)。根据您的需求选择以下依赖项之一:- 如需将模型与您的应用捆绑在一起,请执行以下操作:
dependencies { // ... // Use this dependency to bundle the model with your app implementation 'com.google.mlkit:smart-reply:17.0.2' }
- 如需在 Google Play 服务中使用该模型,请执行以下操作:
dependencies { // ... // Use this dependency to use the dynamically downloaded model in Google Play Services implementation 'com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1' }
如果您选择在 Google Play 服务中使用该模型,则可以将应用配置为在从 Play 商店安装您的应用后,自动将模型下载到设备上。通过将以下声明添加到您应用的
AndroidManifest.xml
文件:<application ...> ... <meta-data android:name="com.google.mlkit.vision.DEPENDENCIES" android:value="smart_reply" > <!-- To use multiple models: android:value="smart_reply,model2,model3" --> </application>
您还可以通过 Google Play 服务 ModuleInstallClient API 明确检查模型可用性并请求下载。
如果您未启用安装时模型下载或请求明确下载,则模型会在您首次运行智能回复生成器时下载。 您在下载完毕之前提出的请求不会产生任何结果。
1. 创建会话历史记录对象
如需生成智能回复,您需要向机器学习套件传递按时间排序的
TextMessage
对象的List
,时间戳早的排在前面。每当用户发送消息时,将消息及其时间戳添加到对话历史记录中:
conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis()));
每当用户收到消息时,将消息、其时间戳和发送者的用户 ID 添加到对话历史记录中。用户 ID 可以是对话中唯一标识发送者的任何字符串。用户 ID 无需对应于任何用户数据,用户 ID 也无需在智能回复生成器的对话或调用之间保持一致。
conversation.add(TextMessage.createForRemoteUser( "Are you coming back soon?", System.currentTimeMillis(), userId));
会话历史记录对象如以下示例所示:
时间戳 用户 ID isLocalUser 讯息 太平洋标准时间 2019 年 2 月 21 日星期四 13:13:39 true 你在路上吗? 太平洋标准时间 2019 年 2 月 21 日星期四 13:15:03 好友 false 要迟到了,对不起! 机器学习套件会针对对话历史记录中的最后一条消息提供回复建议。最后一条消息应该来自非本地用户。在上面的示例中,会话中的最后一条消息来自非本地用户 PLAY0。当您使用此 ML Kit 时,此日志会建议对 FriendsO 的消息回复:“抱歉,它迟到了!”
2. 获取消息回复
如需为消息生成智能回复,请获取
SmartReplyGenerator
的一个实例,并将对话历史记录传递给其suggestReplies()
方法:SmartReplyGenerator smartReply = SmartReply.getClient(); smartReply.suggestReplies(conversation) .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(SmartReplySuggestionResult result) { if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) { // The conversation's language isn't supported, so // the result doesn't contain any suggestions. } else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) { // Task completed successfully // ... } } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Task failed with an exception // ... } });
如果操作成功,系统会向成功处理程序传递一个
SmartReplySuggestionResult
对象。该对象包含一个最多包含三条建议的回复的列表,您可以向用户显示这些回复:for (SmartReplySuggestion suggestion : result.getSuggestions()) { String replyText = suggestion.getText(); }
请注意,如果模型对建议回复的相关性不确定、输入会话使用的语言不是英语,或者模型检测到敏感主题,机器学习套件都可能不会返回结果。