ALDialog/QiChat
に可能性を感じたのでメモです
#ALDialog/QiChat
の概要
ChoregrapheにDialogボックスを配置すると、
QiChat
というスクリプトによってPepperくんの会話などを制御出来る。
良く使う基本的なQiChat
のシンタックスをメモ。
##concept
会話のパターンを宣言するのに使用。
変数として会話のパターンを入れておくイメージ。
例:
スクリプト
...
concept:(yes) [はい いいですよ]
u:(~yes) やったー
...
**[]
**の中に入れることによって複数パターンを登録できる。
~
を付けると、concept
の内容を持ってくる。
結果
Human: はい (100%)
Robot: やったー
Human: いいですよ (100%)
Robot: やったー
##proposal
Pepperくんに喋らせる言葉を関数化出来るシンタックス。
以下のように扱う。
proposal: %hoge Pepperです、こんにちは
(%
の後にタグ名でタグを付けることが出来る)
###^nextProposal
次のproposal
を持ってくる。
例:
スクリプト
...
proposal: 1番目
proposal: 2番目
proposal: 3番目
u:(こんにちは) ^nextProposal
...
結果
Human: こんにちは (100%)
Robot: 1番目
Human: こんにちは (100%)
Robot: 2番目
Human: こんにちは (100%)
Robot: 3番目
###^previousProposal
一個前のproposal
を持ってくる。
(注:^nextProposal
のように前に行く動作ではない。)
例:
スクリプト
...
proposal: 1番目
proposal: 2番目
proposal: 3番目
u:(こんにちは) ^nextProposal
u:(こんばんは) ^previousProposal
...
結果
Human: こんにちは (100%)
Robot: 1番目
Human: こんにちは (100%)
Robot: 2番目
Human: こんばんは (100%)
Robot: 1番目
Human: こんばんは (100%)
Robot: 2番目
Human: こんばんは (100%)
Robot: 1番目
###^sameProposal
先ほどと同じproposal
を持ってくる。
例:
スクリプト
...
proposal: 1番目
proposal: 2番目
proposal: 3番目
u:(こんにちは) ^nextProposal
u:(こんばんは) ^previousProposal
u:(おはよう) ^sameProposal
...
結果
Human: こんにちは (100%)
Robot: 1番目
Human: おはよう (100%)
Robot: 1番目
Human: おはよう (100%)
Robot: 1番目
###^activate(タグ名), ^deactivate(タグ名)
タグを付けたproposal
の有効化と無効化を行う。
例:
スクリプト
...
proposal: こんにちは
proposal: %hoge おはよう
proposal: こんばんは
u:(こんにちは) ^nextProposal
u:(おはよう) ^deactivate(hoge) 今は朝では無いですよね
...
結果
Human: こんにちは (100%)
Robot: こんにちは
Human: おはよう (100%)
Robot: 今は朝では無いですよね
Human: こんにちは (100%)
Robot: こんばんは
###^goto(タグ名), ^gotoReactive(タグ名)
%
によってタグを付けた文章を持ってくる。
(注:^goto
は一度のみ。)
例:
スクリプト
...
proposal: %hoge Pepperです
u:(こんにちは) こんにちは ^goto(hoge)
u:(おはよう) おはよう ^gotoReactive(hoge)
...
結果
Human: こんにちは (100%)
Robot: こんにちはPepperです
Human: こんにちは (100%)
Robot: こんにちは
Human: おはよう (100%)
Robot: おはようPepperです
Human: おはよう (100%)
Robot: おはようPepperです
###^gotoRandom(タグ名)
同じタグが付いた文章をランダムに持ってくる。
(注:こちらも一度持ってきた文章は持ってこない)
例:
スクリプト
...
proposal: %hoge Pepper1です
proposal: %hoge Pepper2です
proposal: %hoge Pepper3です
u:(こんにちは) こんにちは ^gotoRandom(hoge)
...
結果
Human: こんにちは (100%)
Robot: こんにちはPepper3です
Human: こんにちは (100%)
Robot: こんにちはPepper1です
Human: こんにちは (100%)
Robot: こんにちはPepper2です
Human: こんにちは (100%)
Robot: こんにちは
##include
外部のトピックファイルを持ってくる。
整理できてとても便利。
例:
スクリプト
...
proposal: Pepperです
proposal: 百万馬力ですよ!
...
...
include: hoge_jpj.top
u:(こんにちは) ^nextProposal
...
結果
Human: こんにちは (100%)
Robot: Pepperです
Human: こんにちは (100%)
Robot: 百万馬力ですよ!
##サブルール
例:
スクリプト
u:(こんにちは) こんにちは、今日の体調はどうですか?
u1:(~good) それは良かったです。
u1:(~bad) お気の毒に、どこが悪いですか?
u2:(e:Dialog/NotUnderstood) $Dialog/LastInput が悪いのですか。
$Dialog/LastInput が良くなる情報を表示します。
$health=$Dialog/LastInput
結果
Human: こんにちは (100%)
Robot: こんにちは、今日の体調はどうですか?
Human: 辛いです (100%)
Robot: お気の毒に、どこが悪いですか?
Human: 頭 (100%)
Robot: 頭が悪いのですか。頭が良くなる情報を表示します。
上記の例のように**u:
だけではなく、
u1:
,u2:
のようにuの後に数字を追加する**ことにより
会話の条件分岐を行えたり、自然な会話の流れを実現出来る。
proposal: 今日の体調はどうですか?
u1:(~good) それは良かったです。
u1:(~bad) お気の毒に。
上記のようにproposal
の後にも使える。
スクリプトの一番下の行のように変数に会話の内容を入れることにより、Dialog
ボックスの
次のボックスに値を受け渡すことが可能。
値を受け渡してその内容によって処理を行える。
(参考:会話入門 (Pepper TechFes技術セッション)/ボックスからの出力)
#所感
proposal
辺りとconcept
変数を使えば一連の会話の流れは簡単に出来そう。
結構癖のあるスクリプトなので、テストを繰り返しながらの実装になりそう...
まだ細かいところに手が届きそうなシンタックスがあるので勉強次第更新します。
#参考
会話入門 (Pepper TechFes技術セッション)
QiChat
を使って会話と連動してモーションを動かす方法など
Dialogとメモリイベント (Dialog応用)
Dialog
のメモリイベントや、QiChat
内でメモリイベントを持ってくる方法など
pepperとの会話を進化させるQiChat-Syntaxまとめ(自分用メモ)
日本語版公式ドキュメントと言って良いシンタックスの紹介量です。
QiChat - Table of Content
QiChat
公式ドキュメント(英語)