Genera respuestas inteligentes con ML Kit en iOS

El Kit de AA puede generar respuestas cortas a mensajes con un modelo en el dispositivo.

Para generar respuestas inteligentes, pasa al Kit de AA un registro de mensajes recientes de una conversación. Si el Kit de AA determina que la conversación está en inglés y que no contiene cuestiones potencialmente sensibles, genera hasta tres respuestas que puedes sugerir al usuario.

Probar

Antes de comenzar

  1. Incluye los siguientes pods del ML Kit en tu Podfile:
    pod 'GoogleMLKit/SmartReply', '3.2.0'
    
  2. Después de instalar o actualizar los Pods de tu proyecto, abre el proyecto de Xcode con su .xcworkspace. El ML Kit es compatible con Xcode 12.4 o versiones posteriores.

1. Crea un objeto de historial de conversaciones

Para generar respuestas inteligentes, debes pasar al Kit de AA un arreglo de objetos TextMessage ordenado cronológicamente, con la marca de tiempo más antigua. Cuando el usuario envíe o reciba un mensaje, puedes agregarlo junto con su marca de tiempo y el ID de usuario del remitente al historial de conversaciones.

El ID de usuario puede ser cualquier string que identifique de forma única al remitente en la conversación. No es necesario que el ID del usuario corresponda a los datos del usuario ni que sea coherente entre las conversaciones o invocaciones del generador de respuestas inteligentes.

Si el mensaje lo envió el usuario al que deseas sugerirle respuestas, configura isLocalUser como verdadero.

Swift

var conversation: [TextMessage] = []

// Then, for each message sent and received:
let message = TextMessage(
    text: "How are you?",
    timestamp: Date().timeIntervalSince1970,
    userID: "userId",
    isLocalUser: false)
conversation.append(message)

Objective‑C

NSMutableArray *conversation = [NSMutableArray array];

// Then, for each message sent and received:
MLKTextMessage *message = [[MLKTextMessage alloc]
        initWithText:@"How are you?"
        timestamp:[NSDate date].timeIntervalSince1970
        userID:userId
        isLocalUser:NO];
[conversation addObject:message];

Un objeto de historial de conversaciones se parece al siguiente ejemplo:

Marca de tiempo userID isLocalUser Mensaje
Jue 21 de feb 13:13:39 PST 2019 true ¿estás en camino?
Jue 21 de feb 13:15:03 PST 2019 FRIEND0 false Llegaré tarde, lo siento.

El ML Kit sugiere respuestas al último mensaje de un historial de conversación. El último mensaje debe provenir de un usuario no local. En el ejemplo anterior, el último mensaje de la conversación es del usuario Friends0 que no es local. Cuando usas este registro para pasar el Kit de AA, se sugieren respuestas al mensaje de FriendsO: “¡Llegas tarde, lo siento!”.

2. Recibe respuestas de mensajes

Para generar respuestas inteligentes a un mensaje, obtén una instancia de SmartReply y pasa el historial de la conversación a su método suggestReplies(for:completion:):

Swift

SmartReply.smartReply().suggestReplies(for: conversation) { result, error in
    guard error == nil, let result = result else {
        return
    }
    if (result.status == .notSupportedLanguage) {
        // The conversation's language isn't supported, so
        // the result doesn't contain any suggestions.
    } else if (result.status == .success) {
        // Successfully suggested smart replies.
        // ...
    }
}

Objective‑C

MLKSmartReply *smartReply = [MLKSmartReply smartReply];
[smartReply suggestRepliesForMessages:inputText
                           completion:^(MLKSmartReplySuggestionResult * _Nullable result,
                                        NSError * _Nullable error) {
  if (error || !result) {
    return;
  }
  if (result.status == MLKSmartReplyResultStatusNotSupportedLanguage) {
      // The conversation's language isn't supported, so
      // the result doesn't contain any suggestions.
  } else if (result.status == MLKSmartReplyResultStatusSuccess) {
      // Successfully suggested smart replies.
      // ...
  }
}];

Si la operación se realiza correctamente, se pasará un objeto SmartReplySuggestionResult al controlador de finalización. Este objeto contiene una lista de hasta tres respuestas sugeridas que puedes presentar a un usuario:

Swift

for suggestion in result.suggestions {
  print("Suggested reply: \(suggestion.text)")
}

Objective‑C

for (MLKSmartReplySuggestion *suggestion in result.suggestions) {
  NSLog(@"Suggested reply: %@", suggestion.text);
}

Ten en cuenta que es posible que el Kit de AA no muestre resultados si el modelo no está seguro de la relevancia de las respuestas sugeridas, si la conversación que se ingresa no está en inglés o si el modelo detecta cuestiones sensibles.