ML Kit を使用してスマート リプライを生成する(iOS)

ML Kit では、オンデバイス モデルを使用してメッセージに対する短い返信を生成できます。

スマート リプライを生成するには、ML Kit に最近のメッセージのログを あります。ML Kit によって会話が英語であると判断され、 会話に機密のテーマが含まれない場合、ML Kit では 最大 3 件の返信が生成され、ユーザーに提案できます。

試してみる

始める前に

  1. Podfile に次の ML Kit Pod を追加します。
    pod 'GoogleMLKit/SmartReply', '3.2.0'
    
  2. プロジェクトの Pod をインストールまたは更新したら、Xcode プロジェクトを開きます。 .xcworkspace。ML Kit は Xcode バージョン 12.4 以降でサポートされています。

1. 会話履歴オブジェクトを作成する

スマート リプライを生成するには、ML Kit に時系列順の配列を渡します。 TextMessage オブジェクト(最も古いタイムスタンプが最初)。ユーザーが メッセージを送信または受信するには、そのメッセージ、そのタイムスタンプ、およびメッセージを 会話履歴に追加します。

ユーザー ID には、送信者を一意に識別する任意の文字列を あります。ユーザー ID はユーザーデータに対応している 必要はありません ユーザー ID は会話や間で一貫していなくてもかまいません。 スマート リプライ生成ツールの呼び出し。

返信を提案するユーザーから送信されたメッセージに対しては、 isLocalUser を true に設定します。

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

会話履歴オブジェクトは次の例のようになります。

タイムスタンプ userID isLocalUser メッセージ
2019 年 2 月 21 日(木)13:13:39(PST) true 今向かっていますか?
2019 年 2 月 21 日(木)13:15:03(PST) FRIEND0 false 遅れてごめんなさい!

ML Kit は、会話履歴の最後のメッセージに対する返信を提案します。最後のメッセージ ローカル以外のユーザーによるものである必要があります。上の例では、会話の最後のメッセージが ローカル以外のユーザー FRIEND0 さんからのものです。Pass ML Kit を使用すると、 FRIENDO さんのメッセージに返信しています。「遅れて申し訳ありません!」

2. メッセージの返信を受け取る

メッセージに対するスマート リプライを生成するには、SmartReply のインスタンスを取得して 会話履歴を 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.
      // ...
  }
}];

オペレーションが成功すると、SmartReplySuggestionResult オブジェクトが 完了ハンドラがあります。このオブジェクトには、最大 3 つの候補リストが ユーザーに提示できる返信文:

Swift

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

Objective-C

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

モデルが信頼できていない場合は、ML Kit が結果を返さない場合があるので注意してください。 定型返信文の関連性を保ちながら、入力された会話は またはモデルがデリケートな主題を検出するかどうかを表します。