Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Genere respuestas inteligentes con ML Kit en Android

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Puede usar ML Kit para generar respuestas de mensajes usando un modelo en el dispositivo.

Para generar respuestas inteligentes, pasa a ML Kit un registro de mensajes recientes en una conversación. Si ML Kit determina que la conversación está en inglés y que la conversación no tiene un tema potencialmente sensible, ML Kit genera hasta tres respuestas, que puede sugerir a su usuario.

Antes de que empieces

  1. Si aún no lo ha hecho, agregue Firebase a su proyecto de Android .
  2. Agregue las dependencias para las bibliotecas de Android ML Kit a su archivo Gradle de 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, pasa a ML Kit una List ordenada cronológicamente de objetos FirebaseTextMessage , con la marca de tiempo más antigua primero.

Cada vez que el usuario envíe un mensaje, agregue el mensaje y su marca de tiempo al historial de la 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 ID 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. El ID de usuario no necesita corresponder a ningún dato de usuario, y el ID de usuario no necesita ser consistente entre conversaciones o invocaciones del generador de respuestas inteligentes.

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
jue 21 de febrero 13:13:39 PST 2019 verdadero ¿estas tu en tu camino?
jue 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 termine con un mensaje al que su usuario podría querer responder.

2. Obtenga respuestas de mensajes

Para generar respuestas inteligentes a un mensaje, obtenga una instancia de FirebaseSmartReply y pase el historial de la conversación 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 puede presentar a su 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 ML Kit 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.