Galatea アーキテクチャとプロトコルの概要

  • 設計のねらい
    • 複数のモジュールを複数のマシンで分散・連携させる
    • シェルスクリプトのような可読性
  • 規約と慣習
    • モジュール名 @SRM @SSM @AM-MCL など
    • メッセージの例 to @SRM set Run = START
    • inq (Name) に対して rep (value) という返信を行う
    • 単なる情報発信は From @xxx tell (msg)
    • ブロードキャスト
      • 受け手を指定せずに送信されたメッセージを扱う
      • 各モジュールからの出力 (From @xxx)
        • From @xxx to @yyy であれば yyy に送る
        • From @xxx to @yyy,zzz であれば yyy,zzz に送る
        • to がない場合は broadcastされる
      • bloadcast を受信するモジュールは am.conf で指定する
      • 注:galatea-linux-ipa から仕様変更され AgentManager-gdm.pl で実装
    • プロパティ設定 prop : ログの切り替えなど

Galatea Dialog Studio (DS)におけるモジュールの実装

DS 自身が @DM モジュールとして振る舞い、さらに仮想モジュールを提供できる。

  • 外部サブモジュール
    • AgentManager-gdm.pl と通信する。AMThread がラッパー。
  • Java クラス族
    • DS の内部で Java クラスとして実装されている。
    • 例:@SIM @SND
  • ワンショットプロセス族
    • 例:@GRM
    • ある機能が使用されるごとに DS がサブプロセスを駆動する。ファイルI/Oで通信。
    • サブプロセスは Galatea プロトコルに準拠していない。
  • 常駐プロセス族(プロトコル変換なし)
    • 例:Windows モードでの @SSM の実装
    • gtalk をサブプロセスとして駆動する。gtalk は動き続ける。
    • gtalk は Galatea プロトコルで標準入出力と通信する。
  • 常駐プロセス族(プロトコル変換あり)
    • 例:@SRM (Dialog Studio 2.2.4)
    • julius をサブプロセスとして駆動する。julius は動き続ける。
    • julius はサーバモードで駆動する。
    • julius サーバ に対応する socket クライアントは Java クラスとして実装される。
    • julius サーバモードの入出力を独自に Galatea プロトコルに変換する。

対話制御系のアーキテクチャ

  • DocLoader
    • HTTP またはローカルファイルを fetch して DOM パーザに渡す
    • HTTP は Java 6 の CookieManager を用いてセッション対応
  • Doc 族:VoiceXML を StateMap 形式に変換する。
    • VoiceXML のパーザは Relaxer で実装
    • Relaxer の Visitor デザインパターンで StateMap に変換
  • IC (InteractionController) :StateMap のインタプリタ。
    • 変数管理や分岐処理は JavaScript (Rhino) インスタンスに委譲。
    • モダリティからの入力は SIM で前処理され Rhino が解釈可能な記述として受け取る。
    • 入力および出力のイベントキューを管理する
    • 出力を開始してから完了するまで待機、といった状態モデルを管理する
  • Command 族 : StateMap の各状態で実行されるコマンドのクラス
  • OutItem 族 : 出力 Command 族が出力すべき内容を保持するクラス
    • NativeOutItem を使えば to @XXX set XXX 形式で任意のコマンドを送信できる
    • 出力内容は Rhino で評価されて送られる
    • BreakOutItem は「一定時間待つ」という疑似出力
    • GrammarOutItem は @GRM に「文法コンパイラを駆動せよ」と命令する疑似出力
  • DeviceManager : @XXX との通信を仮想モジュールに振り分ける
    • Chain of Responsibility デザインパターンによる実装