机器学习套件可以使用设备端模型生成对消息的简短回复。
要生成智能回复,您需要向机器学习套件传递 对话。如果机器学习套件确定对话是英语,并且 对话没有可能敏感的主题;机器学习套件 最多生成三个回复,您可以推荐给用户。
<ph type="x-smartling-placeholder">捆绑 | 不分类显示 | |
---|---|---|
库名称 | com.google.mlkit:smart-reply | com.google.android.gms:play-services-mlkit-smart-reply |
实现 | 模型在构建时静态关联到您的应用。 | 模型通过 Google Play 服务动态下载。 |
应用大小影响 | 大小增加约 5.7 MB。 | 大小增加约 200 KB。 |
初始化时间 | 模型立即可用。 | 可能需要等到模型下载完毕后才能首次使用。 |
试试看
- 您可以试用示例应用, 请查看此 API 的用法示例。
准备工作
<ph type="x-smartling-placeholder">请务必在您的项目级
build.gradle
文件中添加 Google 的buildscript
和allprojects
部分中的 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.4' }
- 如需在 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. 创建对话历史记录对象
如需生成智能回复,请向机器学习套件传递按时间排序的
List
最多包含TextMessage
个对象,时间戳早的在前面。每当用户发送消息时,请将消息及其时间戳添加到 对话记录:
Kotlin
conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis()))
Java
conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis()));
每当用户收到消息时,都添加消息、其时间戳和 将发送者的用户 ID 添加到对话记录中。用户 ID 可以是 唯一标识对话中的发送者。用户 ID 不需要 与任何用户数据相对应,且 User-ID 不必保持一致 。
Kotlin
conversation.add(TextMessage.createForRemoteUser( "Are you coming back soon?", System.currentTimeMillis(), userId))
Java
conversation.add(TextMessage.createForRemoteUser( "Are you coming back soon?", System.currentTimeMillis(), userId));
对话历史记录对象如以下示例所示:
时间戳 userID isLocalUser 消息 太平洋标准时间 2019 年 2 月 21 日星期四 13:13:39 true 你在路上吗? 太平洋标准时间 2019 年 2 月 21 日星期四 13:15:03 FRIEND0 false 要迟到了,对不起! 机器学习套件会针对对话历史记录中的最后一条消息提供回复建议。最后一条消息 应来自非本地用户。在上面的示例中,会话中的最后一封邮件 来自非本地用户 FRIEND0。当您使用向机器学习套件传递此日志时,它会 回复了 FRIENDO 的消息:“抱歉,晚点了!”
2. 获取消息回复
如需生成对消息的智能回复,请获取
SmartReplyGenerator
的实例 并将对话历史记录传递给其suggestReplies()
方法:Kotlin
val smartReplyGenerator = SmartReply.getClient() smartReply.suggestReplies(conversation) .addOnSuccessListener { 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 { // Task failed with an exception // ... }
Java
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
对象传递给 成功处理程序。此对象包含一个最多包含三个建议回复的列表, 您可以向用户展示:Kotlin
for (suggestion in result.suggestions) { val replyText = suggestion.text }
Java
for (SmartReplySuggestion suggestion : result.getSuggestions()) { String replyText = suggestion.getText(); }
请注意,如果模型对 建议回复的相关性,输入会话不在 英语,或者模型检测到敏感主题的情况。