人工無能・太郎 取扱説明書

 

動作条件

・PHP v4.1.0以降。日本語(マルチバイト)対応版でないとエラーが出ます。
・PostgreSQLが利用できること。

よくわからない場合はサーバ管理者に問い合わせてください。



利用条件

・無断での商用利用禁止。プログラムの改造は自由ですが、再配布する場合は事前に作者の了解を得てください。辞書や話題スクリプト(後述)は自由に公開・再配布可能です。

・このプログラムが原因で生じたいかなる損害、トラブル等に対しても、作者、リンク先サイトの関係者は一切の謝罪、補償をいたしません。 このプログラムの利用は各自の自責にてお願いいたします。



人工無能・太郎について

 人間と会話するというコンセプトのプログラムは、パソコンがまだ8ビットだった時代から多くの人によって作られ、一般的にそれらは『人工無能』と呼ばれてきました。
基本的には、あらかじめキーワードとそれに対応する返答パターンを用意しておき、人間の発言の中にそのキーワードが現れたらオウム返しのように使うという原理です。
 ただのオウム返しでは会話がマンネリになってしまうので、このCGIでは次のような工夫をしています。

 まず基本辞書というものを用意し、キーワード(単語)と、その返答例、そして、そのキーワードが所属するカテゴリー(話題)を定義しています。
例えばキーワードが「雨」だったら返答例は「雨の日は憂鬱だね」、カテゴリーは「天気」となります。
人間との会話の中で「雨」という言葉が出てきた時は「雨の日は憂鬱だね」と返答し、同時に、現在の話題が「天気」であることを判断します。また、人間の発言は全て要素ごとに分解してデータベースに記憶します。キーワードに定義していない言葉が出てきた時には、過去の人間の発言の中から最も近い文章、又は同じ話題の文章を探し出して返答する仕組みになっています。
 さらに、『話題スクリプト』というものを用意し、簡単なクイズや心理テスト、小話などをランダムで言うようにしています。


設置方法/実行方法

setting.phpをエディタ等で開き、PostgreSQLを利用するためのID、パスワード、データベース名、
人工無能の名前、辞書ツール管理用パスワードなどを設定してください。

例)

//データベース接続用ID
$database_user = "hogehoge";

//データベース接続用パスワード
$database_pass = "abcd1234";

//データベース名
$database_name = "my_database"
;

//人工知能の名前
$ai_name = "太郎";

//辞書ツール管理用パスワード
$password = "pass";

(以下略)

 次にFTPソフト等を使って各ファイルをサーバにアップロードします。サーバ上での各ファイルのパーミッションは次のようになります。

/(設置ディレクトリ) [755]
 |
 |-- /data[777]
 |
 |-- ai.php [755]
 |-- ChatClass.php [755]
 |-- dic-tool.php [755]
 |-- frame_top.php [755]
 |-- setting.php [755]
 |-- index.html [644]
 |-- basic_dic.csv [644]
 |-- query_dic.csv [644]
 |-- wadai.txt [644]
 |-- create_db.sql [644]

※ dataは、チャットのログなどを保存するための空ディレクトリ


 アップロードが終わったらブラウザからdic-tool.php(辞書管理ツール)を呼び出します。そして「データベースを作成」「データベースにデータを登録」の順番に実行します。データの登録には数分かかることがあります。 無事に終わったら、index.htmlを呼び出してください。



辞書の構造

このCGIは次の3つのテーブルをデータベース上に作成します。

ai_basic_dic ・・・ 基本辞書
ai_ext_dic ・・・ 拡張辞書
ai_query_dic ・・・ 補助辞書

 

基本辞書と補助辞書には、設置時にコピーされる初期設定ファイルと、人間との会話を通じて学習した情報の両方が記録されます。拡張辞書は学習した情報だけが記録されます。

付属ファイルのbasic_dic.csvが基本辞書に、query_dic.csvが補助辞書に初期登録される内容を記述したものです。どちらもコンマ区切りのCSVファイルなのでエクセル等で編集できますし、テキストエディタで直接、編集しても構いません。

basic_dic.csvには"キーワード"、"カテゴリー"、そのキーワードに対する"返答例"をコンマ区切りで一行ずつ定義します。"返答例"は空欄のままでも可です。

例)

牛丼,食べ物,牛丼一筋300年♪

 

query_dic.csvには"カテゴリー"と、そのカテゴリーに対する"返答例"をコンマ区切りで一行ずつ定義します。

例)

食べ物,美味しいものが食べたいなぁ〜



話題スクリプトについて

 wadai.txtが話題スクリプトを定義したファイルです。スクリプトと言っても作成方法は簡単です。原則として一行に一命令で、命令以外の文はそのまま発言します。 基本的に、制御命令の頭には ':' が付きます。

<命令一覧>

:start と :end 話題は何個でも書けますが、一つの話題は :start と :end の間に記述します。
// 行頭に // を書くとコメント文と見なし、無視されます。
@ラベル名 @に続けて英字の名前を書くとラベルとして認識します(if文やgoto文で使用する)。
:wait(n) n秒間、待機する
:if(キーワード) 返答文 人間の発言の中にキーワードが含まれていた時、返答文を出力します。
if(キーワード1|キーワード2|キーワード3|・・・) と書けば、複数のキーワードに対応できます。
返答文も 返答文1|返答文2|返答文3|・・・ と記述できます。 この場合は返答文を
ランダムに選んで出力します。
:if() 返答文 キーワードを指定しない場合は () と記述します。この場合、ユーザーが何を
入力しても返答文を出力します。
:if(キーワード) @ラベル名 キーワードを言われたら、指定のラベルにジャンプします
:goto @ラベル名 指定のラベルにジャンプします
:exit 話題スクリプトを終了します

※ifの後にはwaitで待機時間を設けないと機能しません。
※テストをするには、チャット画面で :wadai番号 と打てば実行できます。( 例 :wadai8 )

(記述例)

:start
あなたの今日の運勢を占ってみましょうか
うーーーーーーーーん
:if() 大吉!|中吉!|末吉!|凶・・・!|大凶・・・!
:wait(10)
:end

:start
あなたは犬と猫、どっちが好きですか?
:if(犬|いぬ) 私も犬が好きです
:if(猫|ねこ) 私も猫が好きです
:if(嫌) 動物は嫌い?
:if(好き) 私も好きです
:if()ふむふむふむ
:wait(6)
何か飼ってるの?
:if(はい|うん|飼ってる) へー。
:if(いや|いいえ|飼ってない) もしかして動物は苦手とか?
:wait(6)
:end

 



余談

 本当を言うと、この程度のCGIなら、やろうと思えばデータファイルを直接操作して処理する事も可能だったのですが、勉強をしたかったのと、プログラム開発が楽になるのでデータベースを利用することにしました。PostgreSQLを選んだことには特に理由がありません。特殊なSQL命令は使っていないので、少し修正するだけでMySQLやオラクルでも動作するでしょう。

 それと、辞書設定ファイルを見ていただけるとわかるのですが、登録単語の少ない、かなりしょぼい辞書です。
どなたか、ちゃんとした辞書と話題スクリプトを作ってください・・・ (^^;



困った時は

○PHPのバージョンの確認
 レンタルサーバー等では未だにv4.1.0以前の古いバージョンを使っている所がありますが、そのような場合はサーバー管理者にお願いしてバージョンアップしてもらいましょう。最新版のv4.3.0ならば標準でGDライブラリが使用できます。
  PHPのバージョンは、次のスクリプトで調べることができます。適当なファイル名(test.phpなど)を付けてサーバーにアップロードし実行してください。

<?php
phpinfo();
?>

このスクリプトを実行すると、画面の一番上にPHPのバージョンが表示されます。
そして、上から3段目あたりにある 'Configure Command' という項目の中に '--with-gd'が入っていればGDライブラリを使用できます。これが'--without-gd'になっていると使用不可です。
'--with-gd'も'--without-gd'も書いてない時は、サーバー管理者に確認してみるか、とりあえずカウンターを設置して試してみる手があります。

PHPのバージョンもGDライブラリも問題が無いのに動作しない時は、各ファイル・ディレクトリのパーミッションを確認してください。

○エディタでPHPファイルを開くと文字化けする
 EUCに対応しているエディタで開いてください(秀丸エディタなど)。
 ちなみに、秀丸エディタの場合は設定を次のように変更してください。メニューの「その他」から「動作環境」の画面を表示して、その左側にある「編集」を選択し、「文字コードの自動認識をする」をオンにしてください。


人工無能・太郎 v1.0 CGI配布元 ぷらねっとぐりーん