対話シナリオ (.fst)

状態遷移モデルによる対話・インタラクションシナリオの定義

.fst は、対話・インタラクションの内容を定義する対話シナリオの定義ファイルです。シナリオは状態遷移モデルである FST (finite state transducer) で表現され、音声認識結果やタイマー等の各種イベントメッセージに対してアクション(出力メッセージ)を出力します。

以下は、「こんにちは」と認識されたときお辞儀をして「よろしくお願いします」と発声する単純な FST の例です。RECOG_EVENT_STOP|こんにちは というイベントメッセージに対してモーション再生開始と音声合成開始のメッセージを発行します。<eps> は空語であり、入力無しでの遷移、あるいは出力無しを表します。第1カラムが遷移元の状態番号、第2カラムが遷移先の状態番号、第3カラムが条件(入力メッセージ)、第4カラムが出力メッセージです。以下の例には含まれませんが第5カラムを追加して変数代入を記述することもできます。

# example of .fst file
 0     10    RECOG_EVENT_STOP|こんにちは   <eps>
10     11    <eps>                    MOTION_ADD|mei|greet|greet.vmd
11     12    <eps>                    SYNTH_START|mei|normal|よろしくお願いします。
12      0    SYNTH_EVENT_STOP|mei     <eps>

この他にも、ローカル変数、KeyValue値の参照、正規表現による条件記述、ブロック単位の状態定義等が行えます。詳細は対話シナリオの書き方のページをご覧ください。

ファイル名

対話コンテンツの実行には少なくとも1つの .fst ファイルが必要です。.fst ファイルは スタートアップ・設定ファイル(.mdf)と同じ名前で作成します. 例えば、foobar.mdf というスタートアップ・設定ファイルがコンテンツトップにあるとき、.fst ファイルの名前は以下のように foobar.fst である必要があります。

  foobar.mdf
  foobar.fst

サブFST

上記のメインのFST以外に、複数の .fst を用意して並列に走らせることができます。これらは「サブFST」と呼ばれます。サブFSTはメインと同様に、MMDAgent-EXの内部メッセージを受け取り、また出力することができます。複数のFSTは全て並列・非同期に実行されます。

サブFSTを使うメリットは、複数の事象を扱うシナリオを書くことが容易になることです。例えば、エージェントとユーザが会話しつつも、一定時間ごとにベルを鳴らす、という動作をさせるとき、「ユーザとの会話を扱う」シナリオと「一定時間が経過したらベル音を鳴らす」処理のシナリオは、互いに独立ですので、それぞれをメイン、サブとして別々の .fst で書くことで、それぞれ独立して記述と実行ができます。

サブFSTは、メイン FST のファイル名の後ろに任意の文字列をつけた名前で置きます。例えば以下のような名前付けです。

  • FooBar.fst (これがメイン)
  • FooBar.fst.1 (サブ)
  • FooBar.fst.hogehoge.fst (サブ)

MMDAgent は起動時に .mdf と同じ名前の .fst ファイルを見つけ、それをメインFSTとして起動します。それと同時に、その .fst ファイル名をプレフィックスとする全てのファイルをカレントディレクトリから検索し、見つかったものをサブFSTとして起動します。

書き方

FSTの具体的な書き方は「対話シナリオを書く」をご覧ください。


最終更新 2021.01.15: updating ja doc till ojt (72effa3)