Genera respuestas inteligentes con ML Kit en iOS

ML Kit 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 en un conversación. Si el Kit de AA 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 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 a través de su .xcworkspace El Kit de AA 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 array ordenado cronológicamente de Objetos TextMessage, con la marca de tiempo más antigua primero. Cuando el usuario envía o recibe un mensaje, agrega el mensaje, su marca de tiempo y el mensaje ID de usuario del remitente en el historial de conversaciones.

El ID de usuario puede ser cualquier cadena que identifique de forma única al remitente dentro del conversación. El ID del usuario no tiene que corresponder a ningún dato del usuario. y el ID del usuario no tiene que ser coherente entre conversaciones o invocaciones del generador de respuestas inteligentes.

Si el mensaje lo envió el usuario al que quieres 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 verdadero ¿vas en camino?
Jue 21 de feb 13:15:03 PST 2019 FRIEND0 falso Llegaré tarde, lo siento.

El Kit de AA sugiere respuestas al último mensaje de un historial de conversación. Último mensaje debe ser de un usuario que no sea local. En el ejemplo anterior, el último mensaje de la conversación es del usuario no local FRIEND0. Cuando usas pasar este registro del ML Kit, te sugiere respuestas al mensaje de FRIENDO: "¡Llegaré 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 conversaciones 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 a el controlador de finalización. Este objeto contiene una lista de hasta tres respuestas, que puedes presentar al 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 ML Kit no devuelva resultados si el modelo no está seguro de la relevancia de las respuestas sugeridas, la conversación ingresada no está inglés o si el modelo detecta cuestiones sensibles.