Amazon Web Services ブログ

Amazon Lex セッション API チェックポイントを使った複数トピックの会話フローの管理



日常会話では、複数のトピックの間で行き来することがよくあります。たとえば、家の新しい窓とカーテンの改装について話し合うとき、「カーテンのスタイルはこれで決めて、色について考え直してみない?」というような質問が出てくることがあります。 AWS が Amazon Lex セッション API を開始するときに、 会話が脱線する場合の対応方法を学びました。セッション API アクションを使用して、インテントを切り替え、会話を継続することができます。しかし、毎日の対話で、「では窓の選択を終えてからカーテンについて考えましょう」というような複数の脱線に対応することが必要になる場合があります。

一連の脱線を含む会話フローをどのように設計したらよいでしょうか。 あなたが私のようである場合は、家の改装プロジェクトにおける特定の製品を考える前にでも、複数の質問がある場合があります。

セッションのチェックポイントで、あなたは多くのトピックのうちの 1 つに切り替えるサポートをするために容易に会話を設定できます。家の改装の会話を 2 つのインテント、すなわち OrderWindowsOrderCurtains、としてモデル化することができます。 今ではこのトピックの切り替えが容易にできるようになりました。OrderWindows のフローには、チェックポイントがあることがあります。ユーザーがカーテンを注文したが、窓の選択を最初に完了したい場合、「windowSelection」チェックポイントを使用して会話を OrderWindows に戻すことができました。

セッションチェックポイントの管理

Amazon Lex ランタイム API は、会話のセッションチェックポイントを管理できるようにするオペレーションを提供しています。PutSession および GetSession 呼び出しは、チェックポイントを定義して、取得できるようにします。 ここでは、API を使用して以前、説明した会話フローを管理できる方法を示します。ボットの詳細については、ボットスキーマを見直してください。

会話フローを管理するためには、次のステップに従ってください。

  1. 会話の現在の状態を保存します
  2. 以前に保存した状態を取得し、会話を継続します

会話の現在の状態を保存します

フィルターなしで GetSession API を呼び出し、ボットとユーザーの間の会話の現在の状態を取得します。GetSession API 呼び出しの後に PutSession API 呼び出しが続き、チェックポイント「windowSelection」 を OrderWindows インテントに適用します。PutSession 呼び出しは、以下のコード例で示されています。

PutSession Request:  「OrderWindows」インテントで「windowSelection」チェックポイントを適用します

response = client.put_session (
	botName='HomeImprovementBot',
	botAlias='Prod',
	userId='abc1234',
	recentIntentSummaryView=[
	  {
	    "intentName": "OrderCurtains",
	    "slots": {
	      "curtainSize": "None",
	      "curtainStyle": "None"
	    },
	    "confirmationStatus": "None",
	    "dialogActionType": "ElicitSlot",
	    "slotToElicit": "curtainSize",
	    "checkpointLabel": "None"
	  },
	  {
	    "intentName": "OrderWindows",
	    "slots": {
	      "windowSize": "large",
	      "windowStyle": "None"
	    },
	    "confirmationStatus": "None",
	    "dialogActionType": "ElicitSlot",
	    "slotToElicit": "windowStyle",
	    "checkpointLabel": "windowSelection"
	  }
	]
)

以前保存された状態を取得します

この時点で、OrderCurtains インテントが完了しました。GetSession API 呼び出しを発行する一方で、「windowSelection」checkpointLabelFilterを渡します。 この呼び出しは一致するインテント (OrderWindows) の結果が得られ、それは前のステップでチェックポイントラベルを受け取ります。

会話を続行します

最終的に、PutSession API 呼び出しを発行し、OrderWindows でユーザーが離れた場所で続行する会話の次のステップを設定します。以下のコード例は、GetSessionの詳細をリストします。


GetSession Request:  Filtering on 'windowSelection' CheckpointLabel

--- GetSession Request with filter: ---
 
response = client.get_session(
	botName='HomeImprovementBot',
	botAlias='Prod',
	userId='abc123',
	checkpointLabelFilter='windowSelection'
)

--- Filtered GetSession Response: --- 
{
  "recentIntentSummaryView": [
    {
      "intentName": "OrderWindows",
      "slots": {
        "windowSize": "large",
        "windowStyle": "None"
      },
      "confirmationStatus": "None",
      "dialogActionType": "ElicitSlot",
      "slotToElicit": "windowStyle",
      "checkpointLabel": "windowSelection"
    }
  ],
  "sessionAttributes": {},
  "sessionId": "XXX",
  "dialogAction": {
    "type": "ElicitSlot",
    "intentName": "OrderCurtains",
    "slots": {
      "curtainSize": "None",
      "curtainStyle": "None"
    },
    "slotToElicit": "curtainSize"
  }
}

セッション API チェックポイントで開始します

この投稿では、セッション API チェックポイントを使用して、複数の脱線を管理する方法を学びました。AWS SDK を使用して、セッション API チェックポイントを定義できます。この投稿の会話の ボットスキーマ をダウンロードして、簡単なアプリケーションを実装できます。詳細については、 Amazon Lex のドキュメント をご参照ください。


著者について

Shahab Shekari は、Amazon AI のソフトウェア開発エンジニアです。彼は、スケール自在な分散型システムを担当し、Lex ユーザーのエクスペリエンスを向上させています。仕事以外では、太平洋岸北西部で彼の犬と友人、家族と旅行したり、楽しんだりしています。