iOS'te ML Kit ile akıllı yanıtlar oluşturma

ML Kit, cihaz üzerindeki bir modeli kullanarak mesajlara kısa yanıtlar oluşturabilir.

Akıllı yanıtlar oluşturmak için bir görüşmedeki son mesajların günlüğünü ML Kit'e iletirsiniz. ML Kit, konuşmanın İngilizce olduğunu belirlerse ve görüşmenin hassas olabilecek bir konu içermediğini tespit ederse ML Kit, kullanıcınıza önerebileceğiniz üç yanıt oluşturur.

Deneyin

Başlamadan önce

  1. Aşağıdaki ML Kiti kapsüllerini Podfile'ınıza ekleyin:
    pod 'GoogleMLKit/SmartReply', '3.2.0'
    
  2. Projenizin Kapsüllerini yükledikten veya güncelledikten sonra Xcode projenizi, .xcworkspace ile açın. ML Kit, Xcode 12.4 veya üzeri sürümlerde desteklenir.

1. Görüşme geçmişi nesnesi oluşturma

Akıllı yanıtlar oluşturmak için ML Kit'i en erken zaman damgası en başta olacak şekilde kronolojik olarak sıralanmış TextMessage nesneleri dizisi iletirsiniz. Kullanıcı bir mesaj gönderdiğinde veya aldığında mesajı, zaman damgasını ve mesajı gönderenin kullanıcı kimliğini görüşme geçmişine ekleyin.

Kullanıcı kimliği, görüşmede göndereni benzersiz bir şekilde tanımlayan herhangi bir dize olabilir. User-ID'nin herhangi bir kullanıcı verisine karşılık gelmesi gerekmez ve kullanıcı kimliğinin, akıllı yanıt oluşturucudaki konuşmalar veya çağrılar arasında tutarlı olması gerekmez.

Mesaj, yanıt önermek istediğiniz kullanıcı tarafından gönderildiyse isLocalUser değerini true olarak ayarlayın.

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];

Bir ileti dizisi geçmişi nesnesi aşağıdaki örnekteki gibi görünür:

Zaman damgası userID isLocalUser Message
21 Şubat 2019 Perşembe 13:13:39 PST 2019 true Yolda mısın?
21 Şubat Perşembe 13:15:03 PST 2019 FRIEND0 false Maalesef gecikiyorum.

ML Kiti, görüşme geçmişindeki son iletiye yanıt önerir. Son mesaj, yerel olmayan bir kullanıcıdan olmalıdır. Yukarıdaki örnekte, ileti dizisindeki son ileti yerel olmayan FRIEND0 adlı kullanıcı tarafından gönderilmiştir. Bu günlüğü kullanarak ML Kit'i kullandığınızda FRIENDO'nun mesajına yanıt verilir: "Üzgünüm, geç geçiyorum!"

2. Mesaj yanıtlarını alma

Bir mesaja akıllı yanıtlar oluşturmak için SmartReply örneği alın ve görüşme geçmişini suggestReplies(for:completion:) yöntemine iletin:

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.
      // ...
  }
}];

İşlem başarılı olursa tamamlama işleyiciye bir SmartReplySuggestionResult nesnesi aktarılır. Bu nesne, kullanıcınıza sunabileceğiniz en fazla üç önerilen yanıtın bir listesini içerir:

Swift

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

Objective-C

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

Model, önerilen yanıtların alaka düzeyinden emin değilse, girilen ileti dizisi İngilizce değilse veya model hassas bir konu algılarsa ML Kit'in sonuç döndürmeyebileceğini unutmayın.