システム・エンティティー
すぐに使用できる IBM 提供のシステム・エンティティーについて説明します。 アシスタントで、これらの組み込みユーティリティー・エンティティーを使用して、顧客が会話の中でよく使用する用語や参照 (数値や日付など) を認識することができます。
ダイアログにシステムエンティティを追加する方法については 、「エンティティの作成」 を参照してください。
@sys-currency エンティティー
@sys-currency システム・エンティティーは、ユーザー入力に含まれている通貨値についての言及を検出します。 通貨は、通貨記号または通貨固有の用語を使用して表現されることがあります。 どちらの場合も、数値が返されます。
認識される形式
- 20 cents
- Five dollars
- $10
属性
.literal: 通貨についての言及として解釈された入力内の正確なフレーズ。.numeric_value: 基本単位での整数またはダブルの標準数値。.location: 通貨についての言及として解釈されたフレーズのテキスト文字列の最初の文字と最後の文字の位置を示すインデックス要素値をリストします。.unit:3文字のISO通貨コードとして指定されている通貨の基本単位。 例えば、USDまたはEURなどです。
以下の表は、各属性がユーザー入力から取り込む情報を示しています。
| 属性 | タイプ | 例 (入力 = twenty dollars) |
例 (入力 = $1,234.56) |
|---|---|---|---|
| @sys-currency | ストリング | 20 |
1234.56 |
| @sys-currency.literal | ストリング | twenty dollars |
$1,234.56 |
| @sys-currency.numeric_value | number | 20 |
1234.56 |
| @sys-currency.location | 配列 | [0,14] |
[0,9] |
| @sys-currency.unit | ストリング | USD |
USD |
入力用 veinte euro (スペイン語では twenty euro ) または €1.234,56 に対して、@sys-currency は以下の値を返します
| 属性 | タイプ | 入力が veinte euro |
入力が €1.234,56 |
|---|---|---|---|
| @sys-currency | ストリング | 20 | 1234.56 |
| @sys-currency.literal | ストリング | veinte euro | €1.234、56 |
| @sys-currency.numeric_value | number | 20 | 1234.56 |
| @sys-currency.location | 配列 | [0,11] | [0,9] |
| @sys-currency.unit | ストリング | EUR | EUR |
サポートされる他の言語および各国通貨についても、同じような結果が返されます。
@sys-currency 使用のヒント
ノード条件として @sys-currency エンティティーを使用している場合に、ユーザーが値として $0 を指定すると、値は通貨として適切に認識されますが、条件は通貨のゼロではなく数値のゼロとして評価されます。 その結果、条件内の null は false と評価され、ノードは処理されません。 ゼロが適切に処理される方法で通貨値をチェックするには、代わりに、ノード条件に式 @sys-currency OR @sys-currency == 0 を使用します。
言語ごとに認識される通貨について詳しくは、「現行性サポート」を参照してください。
@sys-date
@sys-date システム・エンティティーは、ユーザー入力に含まれている日付についての言及を検出します。 日付の値は、yyyy-MM-dd の形式で文字列として保管されます。 例えば、「May 8」という言及は "2020-05-08" として保管されます。 日付の欠落した要素 (「"May 8"」に対する年など)
は現在日付値を使用してシステムによって拡張されます。
ユーザー入力に無効な日付を入力すると、 @sys-date システムエンティティはその日付を認識せず、 Invalid date エラーが表示されます。
言語として英語を選択した場合、システムでは米国英語( en-us )がロケールとして使用されます。 米国英語ロケールの場合のみ、日付の形式は MM/DD/YYYY になります。 最初の 2 文字の数値が 12 より大きい場合にのみ、日付の形式は DD/MM/YYYY に変更されます。 保管される値の形式は yyyy-MM-dd です。
認識される形式
- 金曜日
- 今日
- 5 月 8 日
属性
.alternatives: 入力がさまざまに解釈できる場合に、代替日付の値を保存します。 通常、@sys-date値としては将来の日付が返されます。 不明確な場合に、過去の日付が代替日付として保存されます。 例えば、「in January」という入力では、将来の日付が返されます。 ただし、現在が 2 月である (今年の 1 月が過ぎた) 場合は、過去の 1 月が代替日付として返されます。 修飾語を付けずに曜日が指定された場合にも、代替日付が提供されます。 例えば、「Are you open Wednesday?」という入力では、将来の日付が保存されますが、前の水曜日の日付に設定された代替日付も作成されます。 代替日付は、next、this、lastなどの修飾語を含むフレーズに対しても作成されます。これらのフレーズは、ロケールによって意味が異なる場合があるからです。 watsonx Assistant サービスでは、last日およびnext日を、直近の最後の日および直近の次の日を指すものとして扱います。その日は同じ週の場合もあれば前の週の場合もあります。 一部の修飾語では、今日の曜日に応じて、代替日付が作成されるかどうかが決まります。 例えば、入力に「this Wednesday」が含まれているとします。 今日が月曜日であれば、将来の日付が保管され、代替日付は作成されません。 しかし、今日が水曜日であれば、来週の水曜日を指す日付と想定されますが、今日の日付も代替日付として保管されます。 代替日付は、日付ごとに、値と信頼度が入った 1 つのオブジェクトとして保存されます。 代替日付オブジェクトは JSON 配列として保管されます。 代替値を取得するには、構文@sys-date.alternativeを使用します。.calendar_type: 使用中のタイムゾーンのカレンダーの種類を指定します。GREGORIANのみがサポートされています。.datetime_link: 日付と時刻についての言及を参照してください。.day: 日付に含まれている日を返すヘルパー・メソッド。.day_of_week: 日付に含まれている曜日を小文字の文字列として返します。.festival: ロケール固有の祝日名を認識し、近づきつつある祝日 (Thanksgiving、Christmas、Halloweenなど) の日付を返します。 条件 (@sys-date.festival == 'thanksgiving'など) に休日の名前を指定する必要がある場合は、すべて小文字を使用してください。認められている休日について詳しくは、 祝日を参照してください。.granularity: 時間フレームについての言及を認識します。 オプションは、day、weekend、week、fortnight、month、quarter、yearです。.interpretation: アシスタントによって返されるオブジェクトで、システムエンティティ分類器の精度を高める新しいフィールドが含まれています。 各フィールドを参照するために使用する式からは、interpretationを省略できます。 例えば、festivalフィールドの値にアクセスするには、ショートハンド構文<? @sys-date.festival ?>を使用します。.literal: 日付として解釈された入力内の正確なフレーズ。.location: 日付として解釈されたフレーズのテキスト文字列の最初の文字と最後の文字の位置を示すインデックス要素値。.month: 日付に含まれている月を返すヘルパー・メソッド。.range_link: 存在する場合は、日付の範囲がユーザー入力に含まれていることを示します。 日付範囲が入った文字列の開始位置と終了位置を示すインデックス値が、リンク名の一部として保存されます。 各@sys-dateが範囲の関係で果たしている役割などの詳しい情報が入っています。 例えば、開始日の役割タイプはdate_from、終了日の役割タイプdate_toです。 役割の値を確認するには、@sys-date.role?.type == 'date_from'構文を使用します。 ユーザー入力に範囲が示されていても日付が 1 つしか表されていない場合は、range_linkプロパティーは返されずに、役割タイプが 1 つ返されます。 例えば、ユーザーがHave you been open since yesterdayと尋ねた場合。 昨日の日付が@sys-date言及として認識され、その日付の役割タイプdate_fromが返されます。 範囲の識別をトリガーした入力内の語を示すrange_modifierも返されます。 この例では、修飾子はsinceです。.relative_{timeframe}: ユーザー入力に含まれている相対的な日付の値の言及を認識して取り込みます。 今日の日付と指定された日付の間の単位数を示す数値を返します。 {time frame}の単位は、year、month、week、weekend、またはdayです。.specific_{timeframe}: ユーザー入力に含まれている具体的な日付単位についての言及を認識して取り込みます。 {time frame}の単位は、year、quarter、month、day、またはday_of_weekです。.year: 日付に含まれている年を返すヘルパー・メソッド。
以下の表は、各属性がユーザー入力から取り込む情報を示しています。
| 属性 | タイプ | 例 |
|---|---|---|
| @sys-date | ストリング | 入力が「May 13, 2020」の場合は、2020-05-13 を返します。 |
| @sys-date.alternatives | 配列 | 例えば、今日の日付が 10 March 2019 で、ユーザーが on March 1 と入力した場合、来年の 1stは @sys-date ( 2020-03-01 )として保存されます。しかし、ユーザーが意図しているのは 1stかもしれません。 システムは、他に取り得る日付値として今年の日付 (2019-03-01) も保存します。
もう 1 つの例として、今日が火曜日の場合にユーザーが this Tuesday または next Tuesday と入力すると、翌週の火曜日の日付が @sys-date に設定され、代替日付は生成されません。 |
| @sys-date.calendar_type | ストリング | あらゆる日付の言及について、GREGORIAN を返します。 |
| @sys-date.datetime_link | ストリング | 該当なし |
| @sys-date.day | ストリング | 入力が「13 May 2020」の場合は、13 を返します。 |
| @sys-date.day_of_week | ストリング | 入力が「13 May 2020」の場合、その日が水曜日であれば、wednesday を返します。 |
| @sys-date.festival | ストリング | 入力に「Thanksgiving Day」が含まれている場合、2020-11-26 を返します。 |
| @sys-date.granularity | ストリング | 入力が「next year」について言及している場合、year を返します。 |
| @sys-date.literal | ストリング | 入力が「I plan to leave on Saturday.」の場合、「on Saturday」を返します。 |
| @sys-date.location | 配列 | 入力が「My vacation starts tomorrow.」の場合は、[19, 27] を返します。 |
| @sys-date.month | ストリング | 入力が「13 May 2020」の場合は、5 を返します。 |
| @sys-date.range_link | ストリング | 例えば、「I will travel from March 15 to March 22」という入力があるとします。 検出された各 @sys-date エンティティーの出力に、range_link (日付範囲のテキストの位置が date_range_14_39) という名前の [14,39] プロパティーがあります。 開始日 (2020-05-15)
の役割タイプは date_from です。 終了日 (2020-05-22) の役割タイプは date_to です。 |
| @sys-date.relative_{timeframe} | number | 入力が「two weeks ago」の場合は、relative_week = -2 を返します。 入力が「this weekend」の場合、「relative_weekend = 0」を返します。 入力が today の場合、「relative_day = 0」を返します。 |
| @sys-date.specific_{timeframe} | ストリング | 2020 に対して「specific_year = 2020」を返します。 「Q2 2020」または「second quarter 2020」に対して「specific_quarter = 2」を返します。 March に対して「specific_month = 3」を返します。 Monday に対して「specific_day_of_week = monday」を返します。 「May 3rd」に対して「specific_day = 3」を返します。 |
| @sys-date.year | ストリング | 入力が「13 May 2020」の場合は、2020 を返します。 |
@sys-time
@sys-time システム・エンティティーは、ユーザー入力に含まれている時刻についての言及を検出します。 ユーザー入力で指定された時刻を HH:mm:ss の形式で返します。 例えば、"13:00:00" に対しては 1pm を返します。
認識される形式
- 2pm
- at 4
- 15:30
属性
.alternatives:@sys-timeの値として保存されたもの以外の時間を取得します。時間が明確に示されていない場合、ユーザーが意図する可能性がある値です。 代替時刻ごとに、値と信頼度が入った JSON 配列形式のオブジェクトが保存されます。 代替値を取得するには、構文@sys-time.alternativeを使用します。.calendar_type: 使用中のタイムゾーンのカレンダーの種類を指定します。GREGORIANのみがサポートされています。.granularity: 時間フレームについての言及を認識します。 オプションは、hour、minute、second、instantです。.hour: 時刻の中で指定された時間を数値として返すヘルパー・メソッド。.interpretation: アシスタントによって返されるオブジェクトで、システムエンティティ分類器の精度を高める新しいフィールドが含まれています。 各フィールドを参照するために使用する式からは、interpretationを省略できます。 例えば、granularityフィールドの値にアクセスするには、ショートハンド構文<? @sys-time.granularity ?>を使用します。.literal: 入力に含まれる正確なフレーズで、時刻と解釈されるもの。.location: 時刻の言及として解釈されたフレーズのテキスト文字列の最初の文字と最後の文字の位置を示すインデックス要素値をリストします。.minute: 時刻の中で指定された分の値を返すヘルパー・メソッド。.part_of_day:morning、afternoon、evening、night、nowなどの時間帯を表す語を認識します。 各時間帯の時刻範囲も設定します。 応答には、時刻範囲の開始時刻と終了時刻を表す 2 つの@sys-time値が含まれます。 エンティティー配列には、range_link役割タイプとtime-from役割タイプを持つtime-toオブジェクトが含まれます。 さまざまな時間帯を表す時刻範囲は、ロケールによって異なる場合があります。 米国英語の場合、午前は6:00:00to12:00:00です。 afternoon は12:00:00から18:00:00までです。 evening は18:00:00から22:00:00までです。 night は22:00:00から23:59:59までです。 午前零時の直前に night が終わるのは、そうしないと、@sys-dateで判断される新しい日とオーバーラップするからです。.range_link: 存在する場合は、時刻範囲がユーザー入力に含まれていることを示します。 時刻範囲が入った文字列の開始位置と終了位置を示すインデックス値が、リンク名の一部として保存されます。 各@sys-timeが範囲の関係で果たしている役割などの詳しい情報が入っています。 例えば、開始時刻の役割タイプはtime_from、終了時刻の役割タイプはtime_toです。 役割の値を確認するには、@sys-time.role?.type == 'time_from'構文を使用します。 ユーザー入力に範囲が示されていても時刻が 1 つしか表されていない場合は、range_linkプロパティーは返されずに、役割タイプが 1 つ返されます。 範囲の識別をトリガーした入力内の語を示すrange_modifierも返されます。.relative_{timeframe}: 相対的な時刻についての言及を認識し、現在の時刻と指定された時刻の間の単位数を示す数値を返します。 {timeframe} の単位は、hour、minute、またはsecondになります。.second: 時刻の中で指定された秒の値を返すヘルパー・メソッド。.specific_{timeframe}: ユーザー入力に含まれている具体的な時刻単位についての言及を認識して取り込みます。 {timeframe} の単位は、hour、minute、またはsecondになります。
以下の表は、各属性がユーザー入力から取り込む情報を示しています。
| 属性 | タイプ | 例 |
|---|---|---|
| @sys-time | ストリング | 入力が「6:30 PM」の場合、18:30:00 を返します。 |
| @sys-time.alternatives | 配列 | ユーザーが「The meeting is at 5」と言った場合、システムはその時刻を 5:00:00 つまり 5 AM と判断し、@sys-time として保存します。 しかし、ユーザーは 17:00:00 または 5 PM を意味しているかもしれません。 システムは、後者の時刻も代替の時刻値として保存します。
ユーザーが「The meeting is at 5pm」と入力した場合は、@sys-time は 17:00:00 に設定され、代替値は生成されません。午前と午後を混同することはないからです。 |
| @sys-time.calendar_type | ストリング | あらゆる時刻の言及について、GREGORIAN を返します。 |
| @sys-time.granularity | ストリング | 入力が「now」の場合は、instant を返します。 「3 o'clock」や「noon」に対しては、hour を返します。 17:00:00 に対して「second」を返します。 |
| @sys-time.hour | number | 入力に「5:30:10 PM」が含まれている場合、午後 5 時を表す 17 を返します。 |
| @sys-time.literal | ストリング | 入力が「The store closes at 8PM」の場合、「at 8PM」を返します。 |
| @sys-time.location | 配列 | 入力が「The store closes at 8PM」の場合、「[17, 23]」を返します。 |
| @sys-time.minute | number | 入力に「5:30:10 PM」という時刻の言及が含まれている場合、30 を返します。 分が表されていない場合、このヘルパーは 0 を返します。 |
| @sys-time.part_of_day | ストリング | 入力が「this morning」の場合、2 つの @sys-time 値、6:00:00 と 12:00:00 を返します。 また、range_link 役割タイプと time-from 役割タイプの time-to オブジェクトも返します。 |
| @sys-time.range_link | ストリング | 入力が「Are you open from 9AM to 11AM」の場合、2 つの @sys-time エンティティーが検出されます。 検出された @sys-time エンティティーの出力に、range_link プロパティーが含まれています。 範囲が暗示されていても、時刻値が 1 つしか提供されなかった場合は、@sys-time 値は 1 つしか返されません。 入力が「Are you open until 9PM」の場合、9PM が @sys-time 言及として認識され、役割タイプ time_to が返されます。 この例の range_modifier は until です。 |
| @sys-time.relative_{timeframe} | number | 5 hours ago に対して「relative_hour = -5」を返します。 「in two minutes」の場合は、「relative_minute = 2」を返します。 「in a second」の場合は、「relative_second = 1」を返します。 |
| @sys-time.second | number | 入力に「5:30:10 PM」という時刻の言及が含まれている場合、10 を返します。 秒の値が表されていない場合、このヘルパーは 0 を返します。 |
| @sys-time.specific_{timeframe} | ストリング | at 5 o'clock に対して「specific_hour = 5」を返します。 「at 2:30」の場合は、「specific_minute = 30」を返します。 「23:30:22」の場合は、「specific_second = 22」を返します。 |
日付と時刻についての言及
ユーザー入力に日付と時刻の両方の情報が含まれることがあります。 アシスタントは両方の値を取り込み、@sys-date と @sys-time という 2 つの別々のエンティティーの言及として保存します。
日付値と時刻値の関係は、以下の 2 つの方法で設定されます。
- 関係にかかわる各エンティティーに、同じ
datetime_link属性が含まれます。 - 入力で日付と時刻が一緒に言及された場合は、両方のエンティティーに、日付と時刻のすべての言及を含む同じリテラル文字列が設定されます。 その位置の情報が、
datetime_linkの名前に付加されます。
認識される形式
- now
- 今から 2 時間
- 月曜日の午後 4 時
属性
.datetime_link: 存在する場合、これはユーザーの入力に日付と時刻が一緒に記載されていることを示し、日付と時刻が互いに関連していることを意味します。 日付と時刻が入った文字列の開始と終了のインデックス値が、リンク名の一部として保存されます。
以下の表は、各属性がユーザー入力から取り込む情報を示しています。
| 属性 | タイプ | 例 |
|---|---|---|
@sys-date.datetime_link および @sys-time.datetime_link |
ストリング | 入力が Are you open today at 5? の場合、 today は [13,18] の位置で日付の記載( 2020-05-21 )として認識され、 at 5 は [19,23] の位置で時刻の記載( 05:00:00 )として認識されます。 生成される [13,23] には、この日付と時刻の両方の言及を含む位置の値 datetime_link が追加されます。 リンクは datetime_link_13_23 という名前になり、この関係に加わっている @sys-date と @sys-time のエンティティーの出力に含められます。 |
タイムゾーン
現在時刻を基準とする日付や時刻についての言及は、選択されているタイム・ゾーンで解決されます。 デフォルトでは、タイム・ゾーンはグリニッジ標準時です。 したがって、入力で「now」が言及されると、さまざまなタイム・ゾーンに配置されている REST API クライアントが協定世界時の現在時刻を取得します。
オプションで、REST API クライアントは、コンテキスト変数 $timezone としてローカル・タイム・ゾーンを追加できます。 このコンテキスト変数は、すべてのクライアント要求で送信する必要があります。 例えば、$timezone 値は、America/Los_Angeles、EST、UTC などにすることができます。 サポートされるタイム・ゾーンの完全なリストについては、
サポートされるタイム・ゾーンを参照してください。
$timezone 変数が提供された場合、相対的な @sys-date および @sys-time の言及の値は、協定世界時ではなくクライアントのタイムゾーンに基づいて計算されます。
日付と時刻の値の処理については、日付と時刻のメソッドのリファレンスを参照してください。
@sys-number エンティティー
@sys-number システム・エンティティーは、ユーザー入力に含まれている数値についての言及を検出します。 数値は、数字で表されることも単語で表されることもあります。 どちらの場合も、数値が返されます。
認識される形式
- 21
- twenty one
- 3.13
属性
.literal: 数値として解釈された入力内の正確なフレーズ。.location: 数値として解釈されたフレーズのテキスト文字列の最初の文字と最後の文字の位置を示すインデックス要素値。.numeric_value: 整数またはダブルの標準数値。.range_link: 存在する場合は、数値範囲がユーザー入力に含まれていることを示します。 この範囲を示しているテキストの位置の値が、リンク名に付加されます。 各@sys-numberが範囲の関係で果たしている役割などの詳しい情報が入っています。 例えば、開始数値の役割タイプはnumber_from、終了数値の役割タイプはnumber_toです。 役割の値を確認するには、@sys-number.role?.type == 'number_from'構文を使用します。
以下の表は、各属性がユーザー入力から取り込む情報を示しています。
| 属性 | タイプ | 例 |
|---|---|---|
| @sys-number | ストリング | 入力が「twenty」の場合は、20 を返します。 入力が「1,234.56」の場合、「1234.56」を返します。 |
| @sys-number.literal | ストリング | 入力が「twenty」の場合、twenty を返します。 入力が「1,234.56」の場合、1,234.56 を返します。 |
| @sys-number.location | 配列 | 入力が twenty の場合、[0,6] を返します。 入力が 1,234.56 の場合、[0,8] を返します。 |
| @sys-number.numeric_value | number | 入力が「twenty」の場合は、20 を返します。 入力が「1,234.56」の場合、「1234.56」を返します。 |
| @sys-number.range_link | ストリング | 入力が「I'm interested in 5 to 7.」であるとします。 検出される 2 つの @sys-number システム・エンティティーの両方の出力に、「range_link」の number_range_18_24 が含まれます。 最初の @sys-number エンティティー (5) の役割タイプは
number_from です。 最後の @sys-number エンティティー (7) の役割タイプは number_to です。 |
@sys-number 使用のヒント
-
ノード条件として @sys-number エンティティーを使用している場合に、ユーザーが値としてゼロを指定すると、値 0 は数値として適切に認識されます。 ただし、条件では 0 は
null値として解釈されるので、ノードが処理されなくなります。 ゼロが適切に処理される方法で数値をチェックするには、ノード条件に式@sys-number == 0も使用してください。 使用する完全な式は、@sys-number OR @sys-number == 0になります。 -
条件で数値を比較するために @sys-number を使用する場合、必ず数値自体の存在のチェックを別に組み込んでください。 数値が検出されない場合、@sys-number はヌルと評価されます。 数値が存在しない場合でも、比較が true に評価されることがあります。
例えば、
@sys-number<4を単独で使用しないでください。数値が見つからない場合、@sys-numberは NULL に評価されます。 ヌルは 4 より小さいので、数値が存在しないにもかかわらず、条件は真と評価されます。代わりに
(@sys-number OR @sys-number == 0) AND @sys-number < 4を使用してください。 数値が存在しない場合、最初の条件は偽と評価されます。 その結果、条件全体が false と評価されます。
数値の処理について詳しくは、数値のメソッドのリファレンスを参照してください。
@sys-percentage エンティティー
@sys-percentage システム・エンティティーは、ユーザー入力に含まれているパーセンテージについての言及を検出します。 パーセンテージは、発話内でパーセント記号を使用して表されることも、percent という単語を使用して表されることもあります。 どちらの場合も、数値が返されます。
認識される形式
- 15%
- 10 percent
属性
.literal: パーセンテージとして解釈された入力内の正確なフレーズ。.location: パーセンテージについての言及として解釈されたフレーズのテキスト文字列の最初の文字と最後の文字の位置を示すインデックス要素値。.numeric_value: 整数またはダブルの標準数値.range_link: 存在する場合は、「from 2 to 3 percent」などの範囲がユーザー入力に含まれていることを示します。 この範囲を示しているテキストの位置の値が、リンク名に付加されます。 各@sys-percentageが範囲の関係で果たしている役割などの詳しい情報が入っています。 例えば、開始数値の役割タイプはnumber_from、終了数値の役割タイプはnumber_toです。 役割の値を確認するには、@sys-percentage.role?.type == 'number_from'構文を使用します。
以下の表は、各属性がユーザー入力から取り込む情報を示しています。
| 属性 | タイプ | 例 |
|---|---|---|
| @sys-percentage | ストリング | 入力に「1,234.56% 」が含まれている場合、1234.56 を返します。 |
| @sys-percentage.literal | ストリング | 入力に「50 percent」が含まれている場合、「50 percent」を返します。 |
| @sys-percentage.location | 配列 | 入力に「from 2 to 3 percent 」が含まれている場合、[0,19] を返します。 |
| @sys-percentage.numeric_value | number | 入力に「50 percent」が含まれている場合、50 を返します。 |
| @sys-percentage.range_link | ストリング | 入力に「from 2 to 3 percent 」が含まれている場合、number_range_0_19 を返します。 |
@sys-percentage 使用のヒント
-
@sys-percentage エンティティーをノード条件として使用し、ユーザーが
0%を値として指定した場合、値はパーセンテージとして適切に認識されますが、条件はパーセンテージ 0% ではなく数値 0 に評価されます。 その結果、条件内のnullは false と評価され、ノードは処理されません。 ゼロのパーセンテージが適切に処理される方法でパーセンテージをチェックするには、代わりに、ノード条件に式@sys-percentage OR @sys-percentage == 0を使用します。 -
1-2%のような値を入力すると、システム・エンティティーとして値1%と2%が返されます。
条件内でのシステム・エンティティーの使用
#Customer_Care_Store_Hours インテントを条件とするノードで、新しいシステム・エンティティーのプロパティーを使用して、ユーザーの質問に応じて微妙に異なる方法で店の営業時間を答える条件付き応答を追加できます。
おそらく、実際のダイアログでは、これらの条件付き応答のすべてを使用することはありません。ここでは、単に実行できることを説明するためだけに記載しています。
| 条件付き応答の条件の構文 | 説明 | 応答テキストの例 |
|---|---|---|
@sys-date.festival == 'thanksgiving' |
お客様が特に感謝祭の日の営業時間について尋ねているかどうかを検査します。 | 感謝祭には、困っている人のために無料の食事を提供いたします。 |
@sys-date.festival |
お客様が祝日の営業時間について尋ねているかどうかを検査します。 | クリスマス、7 月 4 日、大統領の誕生日はお休みです。 その他の祝日は、午前 10 時から午後 5 時まで営業いたします。 |
@sys-time.part_of_day == 'night' |
ユーザー入力に、時間帯として夜に言及する語が含まれているかどうかを検査します。 | 深夜は営業していません。ほとんどの日は午後 9 時に営業を終了します。 |
@sys-date.datetime_link && input.text.contains('today') && now().sameOrAfter(@sys-time) |
入力に today at 8 などの句が含まれているかどうかを検査します。 また、検出された @sys-time が現在時刻より前であるかどうかも検査します。 値が <? @sys-time.plusHours(12) ?> の $new_time 変数を作成する条件付き応答に、コンテキスト変数を追加することができます。 この方法を使用すると、正午に
Are you open today at 8 と尋ねるユーザーによって意図された、より可能性の高い時刻をキャプチャーする日付変数を作成できます。 システムは、ユーザー 8PM ではなく 8AM を意味していると想定しています。 |
今日の $new_time で、よろしいですか? |
@sys-time.range_link && entities[0].role?.type == 'time_from' && entities[1].role?.type == 'time_to' |
入力に時間範囲が含まれているかどうかを検査します。 この条件により、エンティティ配列にリストされた最初の @sys-time システムエンティティが開始時間となり、2番目のものが終了時間となることが確認され、それらがレスポンスに含まれる前に処理されます。 |
<? entities[0] ?> と <? entities[1] ?> の間が開いているかどうかを確認します。これは正しいですか? |
@sys-time && entities.size() < 2 && entities[0].role?.type == 'time_to' |
入力に、役割タイプが @sys-time である time_to 言及が 1 つ含まれているかどうかを検査します。 ユーザー入力がこの条件に一致した場合は、ユーザーが営業時間の範囲の終了時刻を表したことを意味します。 例えば、 Are you open until 9pm? という入力によって応答がトリガーされます。 この入力が一致する理由は、時間範囲に含まれる時刻を 1 つだけ表し、time_to 役割を持つ言及であるからです。 |
今 (<? now().reformatDateTime('h:mm a') ?>) から <? @sys-time.reformatDateTime('h:mm a') ?> までですか? |
@sys-date.day_of_week == 'sunday' |
ユーザーが尋ねている具体的な日付が日曜日にあたるかどうかを検査します。 | 日曜日は営業していません。 |
@sys-date.specific_day_of_week == 'monday' && @sys-date.alternative |
ユーザーが質問の中で平日の Monday に言及したかどうかを検査します。 例えば、Are you open Monday です。 この条件は、代替日付が保存されたかどうかも検査しています。 ユーザーが意図した月曜日がどの月曜日かをアシスタントが明確に理解できなければ、代替日付が生成され、月曜日として他に取り得る日付が一緒に保存されます。 ユーザーが平日を表した場合、アシスタントは、将来の曜日 (次の月曜日) を意図していると想定します。
検出された代替値を使用して、意図された日付をダブルチェックする応答を追加できます。 この場合、代替日付は前の月曜日の日付です。 |
@sys-date と @sys-date.alternative のどちらですか? |
true |
店の営業時間に関するその他の要求に応答します。 | 月曜日から土曜日の午前 9 時から午後 9 時まで営業しております。 |