私は華和梨。あなたは? ぐにゅう。食べられません。 ……………おい。
「華和梨」は、ユーザーが作成した辞書データ(単語帳&ネタ帳)をもとに、外部プログラムからの要求に応じて文章を生成し、それを外部プログラムに渡すエンジンです。外部プログラムとのやりとりには、デスクトップマスコットプログラム「伺か。」の偽AIエンジン仕様である、「SHIORI」仕様を採用しています。
小難しい言い方をしましたが、いったい何ができるのかというと、
のです。(SHIORI仕様に準拠したやりとりのできるプログラムとしては「Kinoko」などがあります。また、Perl版華和梨なども開発が行われていますので、近い将来、CGI上でAIトークエンジンを利用するなんてこともできるようになるかもしれません。)
今のところ、ゴーストのおしゃべり台本を用意するために使用するのが、華和梨の用途の99%以上だと思います。このWWWページをご覧の皆様も、ゴーストを作る方法を知りたくていらっしゃった方がほとんどでしょう。
さて、「ゴーストを作るのは初めて」という人も多いと思いますので、ここで「伺か。」本体とAI("shiori"、"shori.dll"、"shioriコア"などとも呼ばれる)のやりとりがどのように行われているのか、概念だけ簡単に説明しておきます。(技術的な背景や具体的な仕様が必要な場合は、「伺か。」の仕様書などをご覧ください)
「伺か。」本体のプログラムとAIプログラムは明確に役割を分担しています。「伺か。」本体のプログラムとAIプログラムは、内部でお互いに頻繁に会話をしています(SHIORI仕様)。
「伺か。」本体プログラムの仕事は以下のとおりです。
これに対して、AIプログラム(Shiori)の仕事は以下のとおりです。
このように、「伺か。」本体のプログラムは、動作中、常時ユーザーの使用状況や時間経過などをチェックしています。そして、使用状況の変化や各種動作(ヘッドラインセンスやネットワーク更新など)の結果、あるいは時間の変化といったものを、逐次AI側に知らせてきます(「イベント通知」)。
AI側は、本体からの知らせを受け、内容を解釈し、しゃべるかしゃべらないかを決めます。そして、しゃべることにした場合、そのしゃべる内容を本体側に伝えます(「イベント反応」)。
本体側は、AIからしゃべる内容を受け取ると、その文章を実際にキャラクターの吹き出しに入れて表示します。
ユーザーが何もしないでいるときにキャラクターが勝手にしゃべり出す「ランダムトーク」も、「1秒経過」「1分経過」といったイベントに対する反応としてAIプログラムに組み込みます。
ユーザーがキャラクターに話しかけたり、本体を複数起動して他のキャラクターをデスクトップで同時動作させたりしたときも、本体プログラムは、誰からどんなメッセージを受け取ったかをAIに知らせてきます。
AI側はその知らせを受け、返事をするかどうか、どんな返事やコメントをするか決め、しゃべる内容(と相手)を本体側に伝えます(「コミュニケート反応」)。
本体側はそれらの情報を受けて、コメントをしゃべったり、他のキャラクターに返事を返したりします。
華和梨の本質はすごく単純です。
ユーザーが自由に設定した項目ごとにいくつもの単語を登録する
→項目を呼び出すと、その項目に登録しておいた単語のうちどれか一つがランダムに呼び出される
これだけです。
実際に実験してみましょう。いきなりゴーストを動かすには約束事が多く面倒なので、「幸水」を使います。「幸水」は、華和梨と同じエンジンを内蔵した、辞書テスト用コンソールプログラム(DOSプロンプトのアプリケーション)です。華和梨の配布書庫ファイル中におまけで付属しています。
まず、適当なフォルダを作り、そこに「幸水」の本体"kosui.exe"を入れます。
次に、実験的に辞書ファイルを作ってみましょう。今作成したフォルダと同じフォルダに、適当な名称のテキストファイルを作り(ここでは"test.txt"とする)、中身に次のように書いてみてください。(コロンは半角です。)
なまえ : さくら
しょくぎょう : ゴースト
ともだち : うにゅう
コロンの左側が項目名で、右側が登録する単語です。(これは例ですので好きに書き換えてもらって構いません。)
そして、辞書ファイルを使う設定をします。同じフォルダに、設定用に"kawari.ini"というテキストファイルを作り(違う名前はいけません)、おまじないと思って次の内容を書き込みます。
dict : test.txt
コロンの右側は先ほど作成した辞書ファイル名です。(辞書ファイルを別のファイル名にした場合は記述を変えてください)
ここまでできたら、「伺か。」や互換プログラムが動いていないことを確認して、"kosui.exe"を実行してみます。味も素っ気もないプロンプト画面が表示されたと思います。
K O S U I -- Kawari cOnSole Use Interpritor --
2001 Programed by NAKAUE.T (Meister)
[0] : インタープリタモード
Kernel version KAWARI.kpcg/7.0.1
「.」でモード切替
echo-mode >
ここで、次の文字列(太字部分)を入力し、エンターキーを押します。
echo-mode > ${なまえ}
すると、
K O S U I -- Kawari cOnSole Use Interpritor --
2001 Programed by NAKAUE.T (Meister)
[0] : インタープリタモード
Kernel version KAWARI.kpcg/7.0.1
「.」でモード切替
echo-mode > ${なまえ}
さくら
echo-mode >
と華和梨が言葉を返してきたのがわかるでしょうか。(赤字部分。実際の動作では色は変わりません)
もっと他の事も聞いてみましょう。"${しょくぎょう}"や"${ともだち}"と入力してみてください。
echo-mode > ${しょくぎょう}
ゴースト
echo-mode > ${ともだち}
うにゅう
echo-mode >
このように、ある項目について"${項目名}"という書式で問い合わせると、華和梨は、辞書に登録されている単語を返して来ることがわかります。
では、さらに一歩進んで
echo-mode > 私は${なまえ}。${しょくぎょう}やってます。相方は${ともだち}だよ。
と入力してみましょう。すると、
echo-mode > 私は${なまえ}。${しょくぎょう}やってます。相方は${ともだち}だよ。
私はさくら。ゴーストやってます。相方はうにゅうだよ。
echo-mode >
と、このように返してきます。入力文字列の中にある"${項目名}"の部分を、自分の持っている辞書データをもとに変換してきているのがわかりますね。
ではいったん「幸水」を終了して(ウィンドウを閉じればOKです)、辞書を少しいじってみましょう。
辞書ファイル"test.txt"を次のように変更してみます。(コロン、カンマは半角です)
なまえ : さくら , ふたば
しょくぎょう : ゴースト , デスクトップマスコット
ともだち : うにゅう , ただきちさん
批評 : 私から言わせれば${なまえ}って、${しょくぎょう}やってる場合じゃないと思うの。
批評 : 私、${なまえ}は嫌いだけど${ともだち}って好きだな。
セーブしたら、再びkosui.exeを実行して実験です。まず、
echo-mode > ${なまえ}
と何回か入れてみましょう。すると、返答が"さくら"と"ふたば"どちらかがランダムに出てくるのがわかると思います。
同じように"${しょくぎょう}"や"${ともだち}"も、それぞれ、"ゴースト"と"デスクトップマスコット"、"うにゅう"と"ただきちさん"のどちらかが出てきます。
そして、
echo-mode > ${批評}
と入力してみましょう。すると、例えばこんな風に答えてくるはずです。
echo-mode > ${批評}
私から言わせればさくらって、デスクトップマスコットやってる場合じゃないと思うの。
echo-mode >
あるいは
echo-mode > ${批評}
私、ふたばは嫌いだけどうにゅうって好きだな。
echo-mode >
と答えるかもしれません。赤字の部分も、ランダムに組み合わせが変化します。(下の画面は実行例です。)
つまり、ひとつの項目にいくつもの単語が登録された場合、華和梨は、その項目が呼び出されたとき単語を1つランダムに選んで使用する、ということがわかりました。
また、単語を登録するときに、単語の中に"${項目名}"という書式で華和梨自身の辞書単語を使うことができる、ということもわかったと思います。
(幸水のもっと詳しい使い方は付属のマニュアルを参照してください。)
この「項目」のことを、華和梨では「エントリ」と呼びます。
エントリ名には約束事があります。
まず最初に、
エントリ名に使える文字は、英数字(A〜Za〜z0〜9)、ピリオド(.)、アンダーバー(_)、各種全角文字のみ
というものです。これは、そのほかの各種半角記号は華和梨の制御に使われているからです。(一部は使われていませんが、将来使うことを予定しています)
次に、華和梨側であらかじめ用意されている特殊なエントリ名があります。特殊なエントリには、すべて名前に接頭辞がついています。(特に最初はおぼえる必要はありません。)
接頭辞 | 意味 |
system.〜 | 華和梨の持つ各種情報や、「伺か。」本体から送られてくる情報などを格納するエントリ。 |
event.〜 | 「伺か。」本体のイベント反応をするためのエントリ。 |
compatible.〜 | さくらスクリプトの名詞メタ文字列(%ms, %mzなど)に単語を登録するエントリ。 |
resource.〜 | 「伺か。」本体にネットワーク更新URLやおすすめURLの情報を渡すためのエントリ。 |
sentence | 「伺か。」動作中に、ゴーストが勝手にしゃべるトークのネタ用のエントリとして(慣習的に)使う。 |
最後に、標準的なエントリ名のガイドライン(第2章、第3章)があります。これは特に守る必要はありませんが、他の人と辞書データをやりとりする場合、ガイドラインに沿って作成しておくほうが、辞書の組み込みが簡単になります。
具体的な辞書の作り方は、後で解説します。
このページは、偽Meisterが作成しています。