ほとんど「机上の空論」、「ベイパーウェア」の域を出ていなかった「えせNewton」が、構成部品の相次ぐ登場によってにわかに現実味を帯びてきました。
そこで、現時点でそろっている部品、いない部品を使って「えせNewton」を実現したらどうなるか、モックアップよろしくイメージレベルのものを作ってみました。
仮に実装してみた姿から、幾分の軌道修正なども行ってみることとしましょう。
Wordをシェルに割り当てる
前回の検証の結果、Wordの日本語パーサー機能がAppleScript側でまともに利用できることが分かりました。
そこで、文字入力ベースのコマンド受け付けプログラム……言葉がふさわしいかどうか疑問ですが、この「コマンドシェル」をWordにやらせてしまいましょう。

コマンド解釈プログラムは別に常駐していて、一定間隔(1秒インタバル?)でフロントエンドにあるWordの文章を走査します。
Wordは単に文字入力と「えせNewton」プログラム本体の出力メッセージを表示するだけです。
VBScriptでWordのメニューに大幅に手を加え、最低限の機能以外はメニューからアクセスできないように手を加えることも検討しています。そういう意味では、Wordは非常にシェルにしやすいプログラムといえるかもしれません。
ユーザーからのコマンド入力と「えせNewton」からのメッセージ出力は色分けして表示することにしてみましょう。

だんだん、チャットのようなイメージで作動する雰囲気になってきました。いっそのこと、「えせNewton」システムからのメッセージ出力は「Mac:」のようにチャット風に表示してみるとよいかもしれません。メッセージに顔文字を入れると、さらに「それっぽい」感じがするかもしれません。
では、その内容をシミュレートしてみましょう。
Mac:えせNewtonシステムVersion 0.98(Build 1P17)が起動しました。MARoさん、命令をよろしくどうぞ。
河原課長と来週火曜日にミーティング。
Mac:開始時刻と終了時刻を教えてください。
午後3時から4時まで。
Mac:場所は前回と同じ「オペラシティ48階」でよろしいですか?
おっけー。
Mac:Entourageにスケジュールを登録しました。1時間前にお知らせします。
新着メールを10件表示。
Mac:別ウィンドウに表示しました。うち、高松様からの急ぎのメールが1通来ています。
急ぎのメールを要約して表示。
高松様より:先日の電話の件で至急連絡されたし。
「了解しました、戻り次第お電話します」と返信。
Mac:Eudoraで送信しました。
新着メールをプリンタに印刷。
Mac:いつものプリンタに印刷しました。
今日のスケジュールを表示。
Mac:午後3時からシステムの打ち合わせです。ほかにはありません。
「MACお宝鑑定団」を要約。
Mac:まだ更新されていないようです。
石井さんに電話。
Mac:○○社(東京都港区)の石井△▲さんでよろしいですか?
おっけー。
Mac:電話をおつなぎします。会話内容はファイルに録音しておきます。電話が終わったら教えてください。
録音後、テキストにして。
Mac:受けたまわりました。電話が終わったら教えてください。
録音後、テキストにして。
Mac:その件であれば、すでに承っておりますが……?
わかった。
調子に乗って書いてみました。本当にこんなのができるのか、少々不安になってきましたが、仕様的に無理なところを解消していけば問題は解決されていくでしょう。
河原課長と来週火曜日にミーティング。
Mac:開始時刻と終了時刻を教えてください。
午後3時から4時まで。
Mac:場所は前回と同じ「オペラシティ48階」でよろしいですか?
おっけー。
Mac:Entourageにスケジュールを登録しました。1時間前にお知らせします。
1行目の「ミーティング」というコマンドで、この命令がミーティング設定のためのリクエストであることを認識します。
次に、「河原」という人をコンタクトリストDBから検索し、過去にも会っているフラグと過去1か月以内にコンタクトしているフラグを確認し、複数の「河原」氏がいれば、重み付けでソートを行い最優先のものを対象とします。
「来週火曜日」という日付を特定する文字列を検出し、スケジュール設定の日付をカレンダーアプリケーションで確認します(休みの日にぶつからないか、という確認もここで行われます)。
しかし、ここで場所と時刻の指定がないため、順次ユーザーに聞くことになります。「午後3時から4時まで」といったラフな記述を受け付けられるのか微妙ですが、まあよしとしましょう(短縮記述もサポートしないとキレる人たちも出てきそうですが)。
ちなみに、コマンドは句読点「。」までを1行とし、複数のコマンドを1行に納めることは考慮していません。
場所の確認に対し了解の意を伝えるフレーズは、それぞれユーザー定義できるよう考えています。「おっけー」という、くだけた調子になっていますが、入力のキーストロークが少ないものがよいと判断したからです。
「えせNewton」システムは、各種アプリケーションをAppleScriptで駆動させて動くものなので、最後の行のようにメッセージ送信先のアプリケーション名を明示してユーザーに返すようになっています。このあたりは、Newtonのスマートさとはかけ離れた世界ですが……普通のMacOS Xアプリを完全に隠蔽するレベルは考えていないので、こんなものでよいでしょう。
ほかにも、メールの要約やWebからの情報収集などを短いフレーズで行うことを考えてみました。Webの情報収集については、ブックマークをデータベースに常時取り込んで重み付けを行ったり、Webブラウザの履歴から「毎日見ているサイト」といった優先順位を自動判別するとインテリジェントな感じがするでしょうか。
モードの問題
シミュレーションを行ってみて、少々アタマを抱えてしまったのが「モード」の問題です。
プログラムでは人間が何を考えてどのようなアクションを起こそうとしているのか、知る手だてがないので(マウスカーソルの座標から判断するというアイデアはなくもないですが)、一続きの意味の会話を行っている時には「スケジュール予約中の会話である」といった明確なモード設定・認識が必要になります(Macの世界ではモーダルな動作は極力行わないことをアプリケーションおよびシステムに課していますが、Windowsの世界ではいまだにモーダルなアプリケーションのオンパレードですね……)。
しかし、シミュレーションレベルの「えせNewton」ではモード分けについてどこにも明確な設定がありません。
前回受け付けたコマンドからの時間を計測して、一定以上の時間が経過したらモードを解除する……といったことも考えなくもなかったのですが、そうした反応の違いは個人差が非常に大きい部分なので、時間ベースのモード判断はあまり得策ではないと思われます。
そこで思いついたのが、別ウィンドウを開いて「スケジュール設定」ならそれ関連のコマンドのやりとりを行わせるように明示的にGUIで(この場合はWord)表示すればよいのではないか、ということでした。
複数のコマンドが別々のウィンドウで解釈・実行されれば、スケジュールの話とメールの確認の話がごっちゃになってプログラムが混乱することも少なくなるでしょう。
ありもののWordアプリケーションを使うことで、ウィンドウの管理などもWordまかせ。Wordが同時に開けるウィンドウ(文章)の数に限界がないか、そのあたりは未知数ですが……それほどハードな使用を行わないことを、初期「えせNewton」の実行条件と考えています。簡単なデモが行えれば、それで十分でしょう。
現時点で存在していないソリューション
過去においては、Macintosh自体を留守番電話にする「GeoPortテレコムアダプター」(と、海外で添付されていたMacPhoneというソフト?)のような革新的なソリューションも存在したのですが、現時点でそれに近いソリューションは……探しているものの、日本語環境できちんと動作が確認されているものはほとんどないようです。
http://www.pure-mac.com/telephony.html
のあたりをチェックしていますが、どれも日本で販売されているものはありません。内蔵モデムを使って留守番電話ができたら、けっこう凄い感じです。簡易CTIのシステムは組んだことがあるので、コンタクトリストに登録のある人からのメッセージを「○○さんからのメッセージを読み上げます」といったように、明示的にユーザーに返せると「かしこぃ」雰囲気がすることでしょう。
また、録音した音声をテキストにしてくれるプログラム(自動レベル補正をしながら認識エンジンに渡すような)も、やがて必要となるものでしょう。現時点ではViaVoiceが一番近いところにいる感じでしょうか。
ユーザーのリアルタイムの音声を限られた時間内で認識するというのがViaVoiceの真骨頂ですが、電話のような音声レベルがある程度しっかりした音源から録音し、あとでバックグラウンドで音声認識して自動変換するようなソリューションも画期的かつ魅力的なものとなるでしょう。
市場規模がどの程度あるか分かりませんが、そういう認識技術とか文章の要約技術(すでにOSに実装されていますが)というのも、徐々に生活のあちこちで見かけられるように?
一番のポイントは「学習」
先の、スケジュール予約の例で見られるように、過去の履歴から行動パターンを類推して、純粋に統計処理によってアシストを行うというのが、現時点で考えている「学習」のレベルです。
行動履歴データはファイルメーカーProのデータベースに納めることを考えていますが、これとて無尽蔵にふくらむデータをため込めば動作速度の低下を招きますし、まして「えせNewton」はデータベースへの問い合わせが非常に多くなるシステムなので、なるべく余分なデータは参照しないようにしたいものです。
純粋な行動履歴データは1日ないしは1週間単位でデータベース上からパージしてしまい、そのかわりに履歴データから評価値を計算し、「○○さんへのコンタクト可能性は50パーセント」、「スケジュールが重複した場合に優先するコンタクト先はここ」といった形で評価テーブルに値を戻すのが理想的です。
効果的な学習と適当な忘却。このあたりが、使っていてしっくりなじむかどうかの大きなポイントでしょう。Newtonの偉大なる思想、いまだ遠く追いつけずといったところでしょうか。