ML Kit では、オンデバイス モデルを使用してメッセージへの短い返信を生成できます。
スマート リプライを生成するには、会話内の最近のメッセージのログを ML Kit に渡します。ML Kit は、会話が英語であり、会話の主題が機密情報ではないと判断した場合、ML Kit は最大 3 つの返信を生成します。この返信をユーザーに提案できます。
試してみる
- サンプルアプリを試して、この API の使用例をご覧ください。
始める前に
- Podfile に次の ML Kit Pod を含めます。
pod 'GoogleMLKit/SmartReply', '3.2.0'
- プロジェクトの Pod をインストールまたは更新した後に、
.xcworkspace
を使用して Xcode プロジェクトを開きます。ML Kit は Xcode バージョン 12.4 以降でサポートされています。
1. 会話履歴オブジェクトを作成する
スマート リプライを生成するには、ML Kit に TextMessage
オブジェクトの時系列の配列を渡し、最も古いタイムスタンプを最初に使用します。ユーザーがメッセージを送受信するたびに、メッセージ、タイムスタンプ、送信者のユーザー ID を会話履歴に追加します。
ユーザー 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];
会話履歴オブジェクトは、次の例のようになります。
タイムスタンプ | ユーザー ID | isLocalUser | メッセージ |
---|---|---|---|
2019 年 2 月 21 日(木)13:13:39(太平洋標準時) | ○ | 今向かっていますか | |
2019 年 2 月 21 日(木)13:15:03(太平洋標準時) | お友達 | false | 遅れて申し訳ありません。 |
ML Kit は会話履歴の最後のメッセージへの返信を提案します。最後のメッセージは、ローカル ユーザー以外からのものにする必要があります。上記の例では、会話の最後のメッセージは、ローカル ユーザー以外の Friendly0 さんからのメッセージです。このログパスで ML Kit を使用すると、FriendlyO のメッセージに対して「遅れて申し訳ありません。
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 は結果を返しない可能性があります。