「とぼっち」はMac用のIRCクライアントIrcle上で動作する、AppleScriptで書かれた人工無能です。
Gimiteさんのロイディがいる「#reudyroom:*.jp」チャンネルに常駐してますのでよかったら会話してみてください。
wide系のチャンネルでしたらinviteしてもらって構いません。nickは「tobocchi」。要らなくなったらkickもしくは切断コマンド「切断:(チャンネル名)」してください。
とぼっちのbot機能は行中に「とぼっち」の文字列を検出すると確実に作動します。 ただし、登録処理、接続切断処理には不要です。
※カギカッコ内の文字列がコマンドです。 コマンドに用いるのは2バイト「:」です。
チャットログを溜め込み、それを知識とするタイプの人工無能です。
コマンド処理を定型辞書で判断している性質上、一対多数の定型文辞書も保持しこれを発言にも流用しています。
ユザーの名前、乱数、キーワード等の置き換え、語尾、一人称等の置き換えの為に変換辞書も扱っています。
人間らしい自然言語、辞書だけでは表現出来ない発想の飛躍、テーマに沿った会話等々、チャットログを辞書に持つ利点は大きい。60万行に及ぶログ辞書は、いわば会話の為に完成されたカードデッキのようなもの。
ここからいかにノイズを除去するか、話題の飛躍についてゆくか、様々な文章に統一感を持たせるか、カードを引きコンボを完成させるにはどうすべきか、伏せたカード(定型文の辞書)をいかに効果的に使うか、を考えて改良しています。
相手は一人か、相手はこちらに注目しているか、キーワード固定を持続すべきか、引いたカードはノイズではないか、コンボ形成すべきか。 こういった事を「チャットログを記憶に見立ててそこらから適切な返事を導き出す」という戦略です。
tobocchi's...memo?(tobocchiによる日記)
日記形式で雑文を書かせてみました。毎日20時に自動更新。メインとしているチャンネルの最終発言とその時点での話題としてのキーワードから生成します。その他気が向いた時に見出し文を送り込んで書かせる事もあります。
日々のメモページであるMaro's...memo?のログより、人工無脳に関するネタをピックアップ。
1999年の初頭にIRC上で知り合いのmadokaスクリプトを見たのが最初だと思う。webチャット上の人工無能のバカさ加減に飽き飽きしてた私は人間の会話に割り込むbotの何気ない一言にかなり感動してしまった。この茶々入れ、という限定条件であれば「人間らしさ」を出すのにさほど苦労は要らない 。
そしてuzuraの存在を知った時にまた、学習する人工無能としてのその可能性に感動してしまったのですよ。「辞書作りは人の会話をよく観察すること」なら、bot自身に人の会話を覚えさせればよいのだと。
しっかし、プログラム組むのはド素人だし、その場の思い付きで改良してゆくので記録が殆ど残ってません。(^^; まぁ、今残ってるファイルのタイムスタンプと内容から履歴のようなものを起こしてみます。
ファイル名にv2とあります。たぶん実際に動作させた最初のスクリプト。OP権限配りと単純な1対複数の辞書による会話機能、その機能のオンオフが付いてます。基本となったもの。
v3。でんごん機能追加。でもこれはのちに削除。辞書への登録削除機能追加。
v5。コマンド処理に使うキーワードも、定型文の辞書を使うように改良。それまではスクリプトに直書きだったようだ......
v7。どうやらスクリプトの見直しと不要な機能を削除したバージョン。
bot5。やはりスクリプトの見直しとたぶん辞書の効率化。ほとんど進化してません。
bot1。突然、ニュースサイト取得機能(この頃はMac関係ニュース)、国語辞書機能、検索機能と単純なログ参照機能を装備。でもこの時期に一気に改善された模様。
RbBot。フロントエンドもエンジンもすべてREALbasicに移植したバージョン。でも全てのエンジンをこいつで書くと遅すぎて使い物にならなかった模様。
RbBot5。これ以降REALbasic版は残ってないので挫折したようだ。(w
bot。この時点でほぼ現在の状態に。発言を分解し、定型文辞書、ログ辞書を装備し、変換辞書にて文章生成してます。各botコマンドもサブルチン化されてメンテを容易に改良。
bot1。ユーザ発言の保持、自分の発言の保持、要するに話題の持続性の為の改良のようだ。
bot。複数チャンネルに対応、ログ辞書へ重点を置くように改造、複数回のマッチング操作等、人工無能としての改良。
bot。タイマー動作による連続発言のコントロール、疑問、断定形の発言に対する信頼性の向上、等々。
bot1。無能同士の会話をしていると定型文の辞書が頻繁に呼び出されるので整理した。キーワードからの連鎖で文章生成と発言内の名詞スワップの機能を付けるも、殆どの場合おバカになるのでどうしようか考え中。とりあえず今まで不適切として発言していなかったシチュエーションにてこの機能を使ってみる事に。
bot1。今まで実験用のチャンネルと常駐チャンネルとで挙動を変えてたのを、一対一での会話と二人以上喋ってる場合とでわけてみた。二人目が発言した時点で切り替えるが約30分でクリアして常駐者対策。 定型文辞書は、bot名を呼ばれるか一対一の時にしか使わないように変更。
bot1。ほとんどが発言頻度の微調整。「全開」「だまれ」ではほとんど言うこと聞かなくなった。(わらい)細かい部分でチャンネルごとの区分がなされてなかった点をきちんと分けるように改良。挙動等は変更なし。
チャンネルごとの区分を追加。これで辞書以外のほとんどは独立した。flood対策にスクリプト自体を止めて対処してきたのをコマンドの半分をタイマー動作へ割り振って速度向上。
スクリプトファイルを2つにわけた。(AppleScriptエディタの32k制限回避)文字列置換を強化。関係の薄いログから拾うときにキーワードを置換埋め込みする等の処理を追加。 ステータスコマンド追加。
日記自動筆記、日記コマンド、翻訳コマンドの追加。
gooラボ自然文検索機能、RSS取得機能追加。ログ辞書検索に文末文字列も利用するように改良。
gooラボ自然文検索がサービス終了したのでgoogle検索結果から文の生成機能を付けた。でもイマイチ。
google検索結果から文の抜き出し改良。これって意外にイケるかも。
計算機能追加。単にgoogle丸投げ。でもchatしてる時にこれ、要らんのよね... 消すかも。
はげしく環境依存のAppleScriptなので動かしてみるのは至難の技かも。とりあえず
2003/5/1現在のスクリプト、とぼっちスクリプトtextファイルだけ置いておきます。
(要Mac。OS8.5〜OS9/Ircle3.03JP、URLAccess、Tanaka's osax 2.0、Sherlock、Jedit。)
参考になればいいのですが...
人工無能とぼっちはprvmsgとnoticeを使い分けて発言します。
一般にIRC上のbotはnoticeを利用しましょうという暗黙の了解というか何がなんでもnoticeで出力しないと間違いだと書かれている人が大勢います。しかしRFCで規定されているものは以下の通りです。
RFC1459 Internet Relay Chat Protocol 4.4.2 NOTICEメッセージ
NOTICEメッセージはPRIVMSGと同じように使用します。 NOTICEとPRIVMSGの間で異なる点は、 NOTICEメッセージを受け取った場合、それに対してなにも反応して送信してはいけません。 この規定はサーバに対しても適用されます。NOTICEメッセージを受け取ったクライアントにエラーリプライすら返信する必要はありません。 この規定の目的は、メッセージに対して自動的になにかを送信するクライアントとの間のループを避けることです。 これは典型的なオートマトン(クライアントはAIまたは人間が操作する会話的なプログラムです)によって使用されます。すなわち、他のオートマトンとのリプライのループが切りたいオートマトンが使用します。
したがって、notice同士で会話している人工無能にこそ違和感を感じます。
人工無能とぼっちは自然会話に似せる努力をし、決してループしない会話としての出力はprvmsg、機械的にコマンド入力に対して出力されるいわゆるbotとしての機能はnoticeを利用しています。
IRC Scripters Guildあたりにリファレンスがあります。本家サイトからも色々なスクリプト配付ページへのリンクがありますので参考になるかと思います。ただ、日本語で書かれたものって少ないんですよね。
基本的には用意されたハンドラを元に記述し、Ircleからload命令でスクリプトを読み込ませれば動作します。
IRC自体のコマンドも簡易IRCコマンド一覧のようなページで見つかりますのでOP保持用のbot等は簡単に書けると思います。
一応、簡単に解説したファイルを置いておこうかなと思います。本当に基本中の基本しか書きませんが、無脳制作の助けになれば幸いです。