Genere respuestas inteligentes con ML Kit en Android

Puede utilizar ML Kit para generar respuestas a mensajes utilizando un modelo en el dispositivo.

Para generar respuestas inteligentes, le pasa a ML Kit un registro de mensajes recientes en una conversación. Si ML Kit determina que la conversación es en inglés y que la conversación no tiene temas potencialmente confidenciales, ML Kit genera hasta tres respuestas, que puede sugerirle a su usuario.

Antes de que empieces

  1. Si aún no lo has hecho, agrega Firebase a tu proyecto de Android .
  2. Agregue las dependencias de las bibliotecas de Android ML Kit al archivo Gradle de su módulo (nivel de aplicación) (generalmente app/build.gradle ):
    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    dependencies {
      // ...
      implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0'
      implementation 'com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7'
    }
    
  3. También en su archivo build.gradle a nivel de aplicación, deshabilite la compresión de archivos tflite :
    android {
        // ...
        aaptOptions {
            noCompress "tflite"
        }
    }
    

1. Crea un objeto de historial de conversación.

Para generar respuestas inteligentes, le pasa al ML Kit una List ordenada cronológicamente de objetos FirebaseTextMessage , con la marca de tiempo más antigua primero.

Siempre que el usuario envíe un mensaje, agregue el mensaje y su marca de tiempo al historial de conversación:

Java

conversation.add(FirebaseTextMessage.createForLocalUser(
        "heading out now", System.currentTimeMillis()));

Kotlin

conversation.add(FirebaseTextMessage.createForLocalUser(
        "heading out now", System.currentTimeMillis()))

Siempre que el usuario reciba un mensaje, agregue el mensaje, su marca de tiempo y la identificación de usuario del remitente al historial de conversaciones. El ID de usuario puede ser cualquier cadena que identifique de forma única al remitente dentro de la conversación. No es necesario que la ID de usuario corresponda a ningún dato de usuario y no es necesario que la ID de usuario sea coherente entre la conversación o las invocaciones del generador de respuestas inteligente.

Java

conversation.add(FirebaseTextMessage.createForRemoteUser(
        "Are you coming back soon?", System.currentTimeMillis(), userId));

Kotlin

conversation.add(FirebaseTextMessage.createForRemoteUser(
        "Are you coming back soon?", System.currentTimeMillis(), userId))

Un objeto de historial de conversación se parece al siguiente ejemplo:

Marca de tiempo ID de usuario ¿Usuario local? Mensaje
Jueves 21 de febrero 13:13:39 PST 2019 verdadero ¿estas tu en tu camino?
Jueves 21 de febrero 13:15:03 PST 2019 AMIGO0 FALSO Llegando tarde, ¡lo siento!

Tenga en cuenta que el mensaje más reciente en el ejemplo anterior es de un usuario no local. Esto es importante porque ML Kit sugiere respuestas destinadas a ser enviadas por el usuario de su aplicación: el usuario local. Debe asegurarse de pasarle a ML Kit un registro de conversación que finalice con un mensaje al que su usuario podría querer responder.

2. Obtener respuestas a mensajes

Para generar respuestas inteligentes a un mensaje, obtén una instancia de FirebaseSmartReply y pasa el historial de conversaciones a su método suggestReplies() :

Java

FirebaseSmartReply smartReply = FirebaseNaturalLanguage.getInstance().getSmartReply();
smartReply.suggestReplies(conversation)
        .addOnSuccessListener(new OnSuccessListener<SmartReplySuggestionResult>() {
            @Override
            public void onSuccess(SmartReplySuggestionResult result) {
                if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                    // The conversation's language isn't supported, so the
                    // 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
                // ...
            }
        });

Kotlin

val smartReply = FirebaseNaturalLanguage.getInstance().smartReply
smartReply.suggestReplies(conversation)
        .addOnSuccessListener { result ->
            if (result.getStatus() == SmartReplySuggestionResult.STATUS_NOT_SUPPORTED_LANGUAGE) {
                // The conversation's language isn't supported, so the
                // the result doesn't contain any suggestions.
            } else if (result.getStatus() == SmartReplySuggestionResult.STATUS_SUCCESS) {
                // Task completed successfully
                // ...
            }
        }
        .addOnFailureListener {
            // Task failed with an exception
            // ...
        }

Si la operación tiene éxito, se pasa un objeto SmartReplySuggestionResult al controlador de éxito. Este objeto contiene una lista de hasta 3 respuestas sugeridas, que puedes presentar a tu usuario:

Java

for (SmartReplySuggestion suggestion : result.getSuggestions()) {
    String replyText = suggestion.getText();
}

Kotlin

for (suggestion in result.suggestions) {
    val replyText = suggestion.text
}

Tenga en cuenta que es posible que el kit de aprendizaje automático no arroje resultados si el modelo no confía en la relevancia de las respuestas sugeridas, la conversación de entrada no está en inglés o si el modelo detecta un tema delicado.