xAIMLとはドコモの自然対話プラットフォームで、チャットボットの対話シナリオを記述する際に使用する言語です。
xAIMLは、AIML(Artificial Intelligence Markup Language)をベースにドコモが機能拡張した記述言語であり、”x”には、ExtendedやExpressiveの意味が含まれています。
AIMLとは、自然言語ソフトウェアエージェント構築のためのXMLを応用した記述言語です。フリーソフトウェアコミュニティによって開発されました。
xAIML記述方法
xAIMLにおける対話シナリオの記述方法についてご説明します。
このページの内容と、SUNABAで提供しているTipsやxAIMLリファレンスの内容を組み合わせることで、多種多様な対話シナリオを作成することができます。基本の対話シナリオ
「ユーザ発話」に対して「システム発話」を定義し、対話シナリオを記述する方法です。
xAIMLにおける対話シナリオの最小構成です。
xAIML
1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="UTF-8"?> <aiml version="xaiml1.0.0" xmlns="http://www.nttdocomo.com/aiml/schema" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nttdocomo.com/aiml/schema/AIML.xsd"> <category> <pattern>こんにちは</pattern> <template>こんにちは!元気ですか?</template> </category> </aiml> |
(タグ解説:<category>
対話の単位、<pattern>
ユーザ発話、<template>
システム発話)
動作結果
1 2 |
user > こんにちは bot > こんにちは!元気ですか? |
複数往復の対話シナリオ
「直前のシステム発話」と「ユーザ発話」の組み合わせに対して、「システム発話」を定義し、対話シナリオを記述する方法です。
数往復にまたがる対話や、条件分岐を含むフローチャートなどの複雑な対話シナリオを作成することができます。
xAIML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?xml version="1.0" encoding="UTF-8"?> <aiml version="xaiml1.0.0" xmlns="http://www.nttdocomo.com/aiml/schema" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nttdocomo.com/aiml/schema/AIML.xsd"> <category> <pattern>init</pattern> <template> はじめまして。元気ですか? </template> </category> <category> <pattern>元気</pattern> <pattern>はい</pattern> <that>はじめまして。元気ですか?</that> <template> 元気そうでよかったです! </template> </category> </aiml> |
(タグ解説:<category>
対話の単位、<pattern>
ユーザ発話、<that>
直前のシステム発話、<template>
システム発話)
動作結果
1 2 3 |
bot > はじめまして。元気ですか? user > 元気 bot > 元気そうでよかったです! |
デフォルトの対話シナリオ(UDC)
デフォルトの対話シナリオとは、どの<pattern>
にもマッチしないユーザ発話が最終的にマッチする<category>
です。
xAIMLにおいてはUDC(Ultimate Default Category)と呼び、UDCが存在しない場合は、「NO MATCH」が返ります。
一般的に以下のような発話や、ユーザに別の言葉での発話を促すような内容を返します。
1 2 3 4 |
<category> <pattern>*</pattern> <template>すみません、わかりません</template> </category> |
Predicate(変数)
ボット上で使用できる変数のことをPredicateと呼びます。
Predicateは<get>
や<set>
で使用できます。
また、Predicateにはシステムによって自動設定されるものや、特別な動作をするものがあります。
詳細は後述をご覧ください。
システムPredicate
Predicateのうち、ユーザ発話などのタイミングでシステムが自動設定するものを、システムPredicateと呼びます。
システムPredicateには、発話の時間帯や親密度などがあり、自然な対話シナリオを作成するのに役立ちます。
※システムPredicateは参照のみ可能となっており、内容は変更できません。
Predicate名 | 設定内容 |
---|---|
input |
ユーザ発話の全文を取得できます。 |
that |
直前のシステム発話を取得できます。 |
id |
直前のシステム発話IDを取得できます。 |
count:xxx |
システム発話ID毎に、発話の回数を取得できます。 xxxの部分に、回数を取得したいシステム発話IDを設定します。 |
total_access |
利用回数を取得できます。 |
days_from_last_access |
最終利用日からの経過日数を取得できます。 |
days_from_first_acess |
初回利用日からの経過日数を取得できます。 |
intimacy |
親密度を取得できます。 親密度の内容と設定条件は、親密度設定条件をご覧ください。 |
season |
季節を取得できます。 季節の内容と設定条件は、季節設定条件をご覧ください。 |
time_period |
時間帯を取得できます。 時間帯の内容と設定条件は、時間帯設定条件をご覧ください。 |
dialog_status |
対話ステータス(JSON文字列)を取得できます。 |
srai_count |
再帰呼び出し回数を取得できます。 |
appId |
リクエストのappIDを取得できます。 |
language |
リクエストの言語コードを取得できます。 |
frontBot |
リクエストのフロントエンドボットIDを取得できます。 |
callerBot |
リクエスト呼び出し元ボットIDを取得できます。 |
親密度設定条件
値 | 設定条件 |
はじめて | 初回利用日からの経過日数が0日。 |
知り合い | 初回利用日からの経過日数が1〜6日かつ利用回数が10回未満 または、利用回数が5回未満。 |
友達 | 初回利用日からの経過日数が1〜6日かつ利用回数が10回以上 または、利用回数が6〜20回。 |
仲良し | 利用回数が21〜150回。 |
とても仲良し | 上記以外。 |
季節設定条件
値 | 設定条件 |
春 | 3月〜5月 |
夏 | 6月〜8月 |
秋 | 9月〜11月 |
冬 | 12月〜2月 |
時間設定条件
値 | 設定条件 |
早朝 | 4時〜5時 |
朝 | 6時〜10時 |
昼 | 11時〜15時 |
夕方 | 16時〜18時 |
夜 | 19時〜22時 |
深夜 | 23時〜3時 |
固有表現抽出
固有表現とは、人名や場所そして日付などのことを指し、自然対話プラットフォームでは<get>
タグなどで、ユーザ発話から固有表現を抽出することができます。
固有表現の種類や使用方法については、こちらをご覧ください。
xAIML
1 2 3 4 5 6 |
<category> <pattern>*</pattern> <template> <get name="_namelister_ne"/> </template> </category> |
実行結果
1 2 |
user > 私の名前は砂場太郎で、出身地は東京です。 bot > 砂場太郎 |
クライアント情報取得
シナリオ対話APIで送信したクライアント情報を<get>
タグなどで取得することができます。
クライアント情報取得の使用方法については、こちらをご覧ください。
xAIML
1 2 3 |
<template> <get name="_client_personal_name"/> </template> |
実行結果
送信したクライアント情報
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ …省略… "clientData":{ "personal" : { "name": "山田太郎", "hobby": "ドライブ" }, "result":{ "funcName" : "searchAddress" "hitCount": "1", } } } |
取得内容
1 |
山田太郎 |