机器学习套件可以使用设备端模型生成简短的消息回复。
如需生成智能回复,您需要向机器学习套件传递对话中最近消息的日志。如果机器学习套件确认对话使用的语言是英语,并且其中没有潜在的敏感主题,则会生成最多三个回复,供您向用户推荐。
| 捆绑 | 解除绑定 | |
|---|---|---|
| 库名称 | com.google.mlkit:smart-reply | com.google.android.gms:play-services-mlkit-smart-reply | 
| 实现 | 模型在构建时静态链接到您的应用。 | 模型通过 Google Play 服务动态下载。 | 
| 应用大小的影响 | 大小增加了约 5.7 MB。 | 大小增加了约 200 KB。 | 
| 初始化时间 | 模型可立即使用。 | 可能需要等待模型下载完毕,然后才能首次使用。 | 
试试看
- 您可以试用示例应用,了解此 API 的使用示例。
准备工作
- 请务必在您的项目级 - 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.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. 创建对话历史记录对象- 如需生成智能回复,您需要向机器学习套件传递按时间排序的 - TextMessage对象的- List,时间戳早的排在前面。- 每当用户发送消息时,系统都会将消息及其时间戳添加到会话历史记录中: - Kotlin- conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis())) - Java- conversation.add(TextMessage.createForLocalUser( "heading out now", System.currentTimeMillis())); - 每当用户收到消息时,系统都会将消息、其时间戳和发送者的用户 ID 添加到会话历史记录中。用户 ID 可以是用于在对话中唯一标识发送者的任何字符串。用户 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 - 要迟到了,对不起! - ML Kit 会针对对话记录中的最后一条消息建议回复。最后一条消息应来自非本地用户。在上面的示例中,对话中的最后一条消息来自非本地用户 FRIEND0。当您向机器学习套件传递此日志时,它会针对 FRIENDO 的消息“Running late, sorry!”建议回复。 - 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对象。此对象包含最多 3 条您可以向用户显示的推荐回复:- Kotlin- for (suggestion in result.suggestions) { val replyText = suggestion.text } - Java- for (SmartReplySuggestion suggestion : result.getSuggestions()) { String replyText = suggestion.getText(); } - 请注意,如果模型对建议回复的相关性不确定、输入会话不是英语,或者模型检测到敏感主题,则机器学习套件可能不会返回结果。 
