この Rust バイナリは、初期の「チャットボット」プログラムELIZAの実装です。オリジナルのプログラムは、1964 年から 1966 年にかけて、MIT 人工知能研究所で Joseph Weizenbaum によって開発されました。
ELIZA は、パターン マッチングと、プログラム側で理解しているとユーザーに錯覚させる置換手法を実装することで会話をシミュレートします。入力を処理する方法に関する指示は「スクリプト」(元々は MAD-Slip で書かれていましたが、現在は JSON で書かれています)によって提供され、これにより ELIZA はスクリプト ルールに従って会話に参加できるようになります。ワイゼンバウムの意図は、人間と機械の間のコミュニケーションが表面的なものであることを実証することでした。最も有名なスクリプトである DOCTOR は、ロジャー派の心理療法士をシミュレートしています。
Weizenbaum, J. (1996)、 ELIZA - 人間と機械の間の自然言語コミュニケーションを研究するためのコンピューター プログラム、Communications of the ACM、第 9 巻、第 1 号
この Rust バイナリをインストールするには、ソースまたは crates.io からインストールできます。どちらの場合も、Rust コンパイラとカーゴをシステムにインストールする必要があります。
crates.io からeliza
をインストールするのは、cargo を使用すると非常に簡単です。
user@foo(~)$ cargo install eliza
このプロジェクトをフォークしてローカル マシンに複製した後、プロジェクト ディレクトリに移動して次を実行します。
user@foo(eliza-rs)$ cargo build
オプションで単体テストを実行して、ELIZA が期待どおりに動作していることを確認することもできます。
user@foo(eliza-rs)$ cargo test
ELIZA セッションを開始するには、バイナリに ELIZA スクリプトへのパスを指定する必要があります。このスクリプトはjson
ファイルの形式をとります。ソースからインストールし、有名な DOCTOR プログラムを実行したいと仮定すると、プロジェクト ルートから実行するコマンドは次のようになります。
user@foo(eliza-rs)$ cargo run scripts/doctor.json
...
代わりに crates.io からインストールした場合、 doctor.json
の場所は異なります。便宜上、 doctor.json
スクリプトを crates.io の eliza バイナリにバンドルすることにしました。ユーザーごとに、クレート レジストリ内での場所が若干異なるため、実行する前に、より覚えやすい場所に移動することをお勧めします。
user@foo(~)$ cp .cargo/registry/src/[some_hash]/eliza-[ver]/scripts/doctor.json .
user@foo(~)$ eliza doctor.json
...
eliza をカーゴで開始してセッションを終了する
ELIZA のデザイン方法論の美しさは、プログラマーと劇作家の役割が分離されていることを意味します。 ELIZA の重要な特性は、スクリプトがデータであるということです。スクリプトはプログラム自体の一部ではありません。したがって、ELIZA は特定の認識パターンや応答のセットに制限されず、実際には特定の言語にも制限されません。
そのため、貢献者は、元のdoctor.json
スクリプトを改良するか、完全に独自のスクリプトをゼロから作成するかを決定することができます。海賊版スクリプトの簡単な例が含まれており、きちんとしたものを作成するのにどれだけの準備が必要かを示しています。
スクリプトの構造の詳細については、doc.rs のscript
モジュールのドキュメントを参照してください。
ELIZA にはある程度決定的な性質があるため、単体テストを作成してスクリプト ルールを評価できます。たとえば、 tests/conversation_test.rs
に次の内容を追加できます。
# [ test ]
fn your_test ( ) {
let mut e = Eliza :: new ( "scripts/your_script.json" ) . unwrap ( ) ;
assert_eq ! ( "bar" , e.respond ( "foo" ) ) ;
}
ここで、「foo」は ELIZA へのユーザー入力、「bar」は応答です。
ELIZA はログ出力を生成することに注意することも重要です。プログラムの実行中にこれらのログを観察するには、環境変数RUST_LOG=eliza
を使用してバイナリを開始します。