Windows Live Agents SDKでボット体験

TechCollab2008-06-08


先日LiveSDKのドキュメント日本語化というプレスリリースがされていたこともあり、久しぶりにLive SDKについて軽くサーベイしてみた*1。Live SDKViral Feedでも色々と使っている(Messenger API, Live ID API, Virautl Earth API)が、今日は先月末にSDKが公開されたLive Agentsについて書いてみようと思う*2

Live Agents とは?

Windows Live Agents are chatterbot agents for Windows Live Messenger that is part of Microsoft's Windows Live services. They provide users the ability to interact with the agents through Windows Live Messenger to get more information about specific topics.

Wikipediaからの抜粋。ここにあるとおり、Live Agentsとは人工知能分野の成果としてのチャットボットエージェントサービスである。ここからVisual Studioプラグインをダウンロードし、インストールすることでLive Agentsの開発を行うことができる。

Live Agents SDKを使ってみる

プラグインインストール後Live Agents開発用のテンプレートが追加され、これをベースにLive Agentsの開発を行う。

プロジェクトを開始するとデフォルト状態においても様々なファイルが展開される。各ファイルのフォーマットと用途についてはこちらを参照のこと。

この状態で手を加えず早速エージェントをデバッグ実行してみると、次のようなConversionコントロールとComprehension Infoコントロールがアクティブになりエージェントと会話してみることができる。

このエージェントはよくできていて、英語に限らず日本語、中国語など様々な言語に対応している。下記の通りなかなか面白い(笑える)会話が楽しめる(太字がエージェントの回答)。

>Hi!
What's up?
>Who r u?
I'm change_me_agent! I'm a smart computer that you can chat with about all kinds of things.
Type "?" to see what I can do.

>What's your name?
change_me_agent.
>How old are you?
I'm an adult. I don't like to talk about my age.
>oops..
What's wrong?
>No, good.
I'll get over it.
>bye. see you.
OK. Later!

>こんにちは
こんにちは。
>名前は何ですか
すみませんが、言っていることが理解できません。
>今何をしているのですか
日本語はまだよく話せません。
>年齢は?
日本語は好きですが、まだよく話せません。
>一、二、さんっ、四
すみませんが、言っていることが理解できません
>世界のなべあつ
日本語は好きですが、まだよく話せません。
>さようなら
日本語はまだよく話せません。

>晩上好
我?出生,跟我??可不可以??一点,不要那???。下次?再跟我聊,就会??我??的了。
>謝謝
我可不可以不回答?因?...因?我不会回答。

Agentをカスタマイズする

カスタマイズしなくても十分に楽しめるがSDKという以上実装方式を抑えておく。Live Agensのカスタマイズは基本的にBuddyScriptという独自言語により実装していく。BuddyScriptシンタックスこちらを参照。試しに追加してみたBuddyScriptと実行結果は下の通り。ここですばらしいことはBuddyScriptで定義した文章の意味を解釈して判断してくれるということ。例えば"Who are you?"を"Who r u?"としても同じアクションをしてくれる。

##
## Customized BuddyScript
##
? Who are you?
 - Sosuke Hirayama. Software Developer and Saxophone Player. Nice to meet you!
 
? How old are you?
 - Sorry, it's secret.

? What's your favorite?
 - I live music very much, especially Jazz. I play the Saxophone!

>Who are you?
Sosuke Hirayama. Software Developer and Saxophone Player. Nice to meet you!
>who r u?
Sosuke Hirayama. Software Developer and Saxophone Player. Nice to meet you!
>how old are you?
I'm an adult. I don't like to talk about my age.
>what's your favorite?
I live music very much, especially Jazz. I play the Saxophone!
>good!
Excellent!

BuddyScriptは上のような単純なものだけでなく、様々なアクションを記述することができる。以下はhttp://windowsliveagents.spaces.live.com/からの抜粋。

  • BussyScript Sample 1
###
### Play Trivia
###
? Play trivia
  - Let's play trivia
    in what year was the Eiffel Tower built ?
    in 1889 {action=Right()}
    in 1943 {action=Wrong()}
    in 2001 {action=Wrong()}
    You have 30 seconds to answer
  NID = notify in 30 seconds: action TimeOut()
  ? 1889
  action Right()
    - That is correct!
  ? 1943
  ? 2001
  action Wrong()
    - Nope, the correct answer is 1889.
  action TimeOut()
    - Too late, the correct answer is 1889. 
  • BussyScript Sample 2
###
### Kitchen Timer
###
declare procedure Ring()
variable KITCHEN_TIMER_NOTIFICATION = ""
? Kitchen timer
  - Ok, I'm setting up the time, how many minutes do you want ?
  ? DELAY=Integer
    - Alright, I will notify you in DELAY minutes
    KITCHEN_TIMER_NOTIFICATION = notify in DELAY minutes: Ring()

? Cancel Kitchen timer
  if KITCHEN_TIMER_NOTIFICATION = ""
    - What timer ?
  else
    cancel notify KITCHEN_TIMER_NOTIFICATION
    KITCHEN_TIMER_NOTIFICATION = ""
    - Done.

procedure Ring()
  - DRRRRRRRING !!!!!
    Your time is up!

  KITCHEN_TIMER_NOTIFICATION = ""
  if SYS.Conversation = SYS.User.Conversation
    // This is the user conversation
    - Do you want to snooze ?
    ? Yes
      KITCHEN_TIMER_NOTIFICATION = notify in 5 minutes: Ring()
      - Will ring again in 5 minutes.
    ? No
      - Fine.
  else
    SAVED_USER_CONV = SYS.User.Conversation
    set user conversation
    - To give an extra 5 minutes, type "snooze"
    ? Snooze
      KITCHEN_TIMER_NOTIFICATION = notify in 5 minutes: Ring()
      - Will ring again in 5 minutes.
    ? =AnythingRaw
      forward query SAVED_USER_CONV
    set user conversation SAVED_USER_CONV 
Agentsサービスをデプロイする

作成したエージェントサービスはPartner Hosting Infrastructure(PHI)によりMicrosoftのインフラ上で展開することができる。サービスの登録はこちらから。しかし登録したらすぐ展開されるというものではなく、審査を行った後に公開が可能になるようだ。また、Live Agentsのサービスは様々なプロトコル(AIM/ICQ, Yahoo, IMIP, Jabber, XMPP, RVP, etc...)上に展開することが可能なようで、Live Mssengerでのボットサービスに限定されたものではないようだ。つまり、Live Agents SDKで作ったボットサービスをXMPPで展開しGoogle Talkから利用するということも可能であるようだ。

感想

いやー、技術は確実に進歩していますね。

おまけ

かなりかっこいいオンラインプレゼンテーション作成サービスがあるのを知ったのでここでご紹介(サンプルはこちら)。
http://280slides.com/ via ブログ | 株式会社クリーム | グラフィック & Webデザイン

*1:そろそろMSネタじゃない、溜まってきたネタを書きたいのだが。。。

*2:軽いサーベイした結果の基づいて書いているので間違いがあった場合はすいません。あったら指摘をよろしくです。