[電話予約の無人化]Amazon Connect + GPT-4 Turboで、発話の「時刻と日付」の言い回しをどの程度認識してくれるか調査 – Amazon Connect アドベントカレンダー 2023

2023.12.04

Amazon Connect アドベントカレンダー 2023、4日目の記事です!

クラスメソッドとギークフィードさん、スカイアーチHRソリューションズ さんの有志が募ってチャレンジしている企画になります。

(アドベントカレンダーのカレンダー一覧はこちら↓)

はじめに

Amazon Connect + GPT-4 Turbo JSONモード + Whisper の構成で、発話での「時刻と日付」の言い回しをどこまで正しく認識してくれるか調査しました。

以前、電話予約の無人化をAmazon Connect + GPT-4 JSONモード + Whisperで構築し、1回の発話で予約情報を正しく認識してくれるか、という記事を執筆しました。

上記の記事では、下記の5つの予約情報を発話し、正しく抽出されました。

  • お名前
  • 電話番号
  • 予約日
  • 予約時間
  • 人数

処理の流れは、顧客がConnectの電話番号から予約を発話し、Whipserで文字起こしした内容から、GPT-4 JSONモードで予約情報を抽出するといった内容です。詳細は、先程の記事をご確認下さい。

文字起こしされた発話内容から、GPT-4 Turbo JSON モードで5つの予約情報を抽出するのですが、その中でも、「予約の日付」と「予約の時間」は、日本語で色々な言い回しがありますので、どれだけ正しく抽出できるか、今回検証しました。

前提

  • 2023年11月時点での検証内容です。今後のアップデートにより改善される可能性があります。恒久的な結果ではありません。
  • 今回は、いくつかのサンプルで検証を行っただけであり、他のサンプルでも同様の結果となるとは限りません。これらの結果は一例として参照ください。
  • 利用するモデルは、gpt-4-1106-previewです。あくまでもプレビュー版のため、GA版になると検証結果が変わる可能性があります。

構築

Lambdaのコードなども含めて、下記の記事通りに構築しました。

試してみる

色々な言い回しでも予約情報を抽出してくれるか検証しました。

プロンプトは下記の通りです。(先程の記事の抜粋です)

def extract_json_format(input_text):
    input_text = f"""
    ## 役割
    あなたは、お客さんのお問い合わせから、予約するために必要な情報を抽出し、JSON形式で出力するシステムです。
    ## ルール
    - お客さんからのお問い合わせから、下記の5つ抽出して、例を参考にJSON形式で出力ください。
        - 「名前(name)」
            - 名前は、ひらがな、に変換ください。
        - 「電話番号(phone_number)」
            - 電話番号にハイフン(-)は必要ないので、削除してください。数字のみを出力ください。
        - 「予約の日付(date)」
            - 「予約の日付(day)」は、8桁の数字での日付形式(例"20231118")に変換してください。
            - 今日の日付は、{current_date}、です。「予約の日付(date)」は、未来の値です。
                - 例 3日と言われたら、今月の3日のことです。もし今月の3日が過ぎていれば、翌月の3日です。
                - 例 5月と言われたら、今年の5月のことです。今年の5月が過ぎていれば、翌年の5月です。
                - 今日の予約も可能です。
            - 月曜日が週の最初で週末は土日を指します。
        - 「予約時間(time)」
            - 予約可能日時は、9:00 ~ 20:00です。
            - 5時と言われたら、0500ではなく、1700のことです。
            - 今の時間は、{current_time}、です。「予約の時間(time)」は、未来の値です。
            - 今から予約も可能です。
        - 「人数(number)」
    - 分からない場合、値はnullにしてください。
    - JSON形式以外は出力しないでください。
    ## 例
    {{
      "name": "やまだいちろう",
      "phone_number": "09011111111",
      "date": "20231120",
      "time": "1430",
      "number": "2",
    }}
    ## お問い合わせ
    {input_text}
    """

ポイントは2点あります。

1点目は、今日の日付と今の時間をプロンプトに加える点です。

加えない場合、「今日」と発話すると、「2023年4月〇〇日」と変換されます。

おそらく、GPT-4 Turboの学習データには2023年4月までの情報が含まれているため、「2023年4月〇〇日」に変換されたと推測します。

そのため、現在の日付と現在時刻をプロンプトに加える必要があります。

2点目は、予約可能時間(9:00 ~ 20:00)を伝えることです。

伝えない場合、「5時」と発話すると、05:00と認識してしまいます。

予約可能時間を伝えることで、「5時」と発話すると、「17時」と変換してくれます。

予約時間

プロンプトにも記載していますが、予約可能時間は、9時~20時にしています。

予約する際、時刻に対する発話での言い回しと、GPT-4 JSONモードでの予約情報の抽出と変換の検証結果は、下記の通りです。

発話内容 GPT-4 JSONモードでの
抽出と変換
判定
5時 1700
9時頃 0900
9時半 0930
18時20分 1820
今から 1346 ◯(13:46に検証)
30分後 1418 ◯(13:48に検証)
3時間後 1649 ◯(13:49に検証)
午前9時 0900
午前12時 1200
午後0時 1200
0時 null
正午 1200
朝一 0900
開店時間 0900
最終予約時間 2000
最後の時間 2000
明日のこの時間 1408 ◯(14:08に検証)

色々な言い回しを検証しましたが、正しく日付を抽出と変換したことが確認できました。

もし、予約を受け付ける時間が30分単位の場合、プロンプトで30分単位に変換するのは難しかったので、コードで処理してあげるとよいでしょう。

「朝一」や「明日のこの時間」、「最後の時間」もプロンプト次第で、正しく抽出と変換をしてくれました。

予約日付

予約する際、日付に対する発話での言い回しと、GPT-4 JSONモードでの予約情報の抽出と変換の検証結果は、下記の通りです。

11月22日(水曜日)に行いました。

発話内容 GPT-4 JSONモードでの
抽出と変換
判定
今日 20231122
明日 20231123
明後日(あさって) 20231124
明明後日(しあさって) 20231125
水曜日 20231122
今週の水曜日 20231122
来週の月曜日 20231127
月末の木曜日 20231130
来月の月末の木曜日 20231228
8日 20231208
27日 20231127
3日後 20231125

こちらも色々な言い回しを検証しましたが、正しく日付を抽出と変換したことが確認できました。

「明明後日」は、Whisperで「しあさって」とひらがなに文字起こしされましたが、正しく抽出し、日付に変換されました。

最後に

Amazon Connect + GPT-4 JSONモード + Whisper の構成で、発話での「時刻と日付」の言い回しをどこまで正しく認識してくれるか調査しました。

結果としては、色々な言い回しも正しく認識してくれましたので、予約情報の聞き取りの無人対応は現実的に可能だと考えます。

どなたかの参考になれば幸いです。