Diese Rust-Binärdatei ist eine Implementierung des frühen „Chatbot“-Programms ELIZA . Das ursprüngliche Programm wurde von 1964 bis 1966 am MIT Artificial Intelligence Laboratory von Joseph Weizenbaum entwickelt.
ELIZA simuliert Konversationen durch die Implementierung von Mustervergleichen und einer Substitutionsmethode , die den Benutzern die Illusion vermittelt, dass das Programm sie versteht. Anweisungen zur Verarbeitung von Eingaben werden durch „Skripte“ bereitgestellt (ursprünglich in MAD-Slip geschrieben, jetzt in JSON), die es ELIZA ermöglichen, sich an einem Diskurs zu beteiligen, indem sie den Skriptregeln folgen. Weizenbaum wollte zeigen, dass die Kommunikation zwischen Mensch und Maschine oberflächlich ist. Das berühmteste Drehbuch, DOCTOR, simuliert einen Rogerianischen Psychotherapeuten.
Weizenbaum, J. (1996), ELIZA – Ein Computerprogramm zur Untersuchung der Kommunikation in natürlicher Sprache zwischen Mensch und Maschine , Communications of the ACM, Bd. 9, Ausgabe 1
Um diese Rust-Binärdatei zu installieren, kann man dies von der Quelle oder von crates.io aus tun. In jedem Fall müssen der Rust-Compiler und die Ladung auf Ihrem System installiert sein.
Die Installation von eliza
über crates.io ist mit Cargo ganz einfach:
user@foo(~)$ cargo install eliza
Nachdem Sie dieses Projekt geforkt und auf Ihren lokalen Computer geklont haben, navigieren Sie zum Projektverzeichnis und führen Sie Folgendes aus:
user@foo(eliza-rs)$ cargo build
Möglicherweise möchten Sie optional auch die Komponententests ausführen, um sicherzustellen, dass ELIZA sich wie erwartet verhält:
user@foo(eliza-rs)$ cargo test
Um eine ELIZA-Sitzung zu starten, müssen Sie der Binärdatei einen Pfad zu einem ELIZA-Skript bereitstellen. Dieses Skript hat die Form einer json
Datei. Angenommen, Sie haben von der Quelle installiert und möchten das berühmte DOCTOR-Programm ausführen, dann würde der Befehl, den Sie im Projektstammverzeichnis ausführen würden, etwa so aussehen:
user@foo(eliza-rs)$ cargo run scripts/doctor.json
...
Wenn Sie stattdessen von crates.io aus installiert haben, ist der Speicherort von doctor.json
ein anderer. Aus Bequemlichkeitsgründen habe ich beschlossen, das Skript doctor.json
mit der Binärdatei eliza auf crates.io zu bündeln. Für jeden Benutzer wird der Speicherort in der Crates-Registrierung leicht unterschiedlich sein, daher würde ich vorschlagen, ihn vor der Ausführung an einen einprägsameren Ort zu verschieben:
user@foo(~)$ cp .cargo/registry/src/[some_hash]/eliza-[ver]/scripts/doctor.json .
user@foo(~)$ eliza doctor.json
...
Eliza beginnt mit der Ladung und verlässt dann die Sitzung
Das Schöne an ELIZAs Designmethodik ist, dass die Rollen des Programmierers und des Dramatikers getrennt sind. Eine wichtige Eigenschaft von ELIZA ist, dass es sich bei einem Skript um Daten handelt – es ist nicht Teil des Programms selbst. Daher ist ELIZA nicht auf einen bestimmten Satz von Erkennungsmustern oder Reaktionen beschränkt, ja nicht einmal auf eine bestimmte Sprache.
Daher können Mitwirkende entscheiden, das ursprüngliche doctor.json
-Skript zu verbessern oder ihr eigenes Skript von Grund auf zu erstellen. Ein einfaches Beispiel eines Piratenskripts wurde eingefügt, um zu zeigen, wie wenig nötig ist, um etwas Schönes zu erstellen.
Weitere Informationen zum Aufbau eines Skripts finden Sie in der Dokumentation zum script
auf doc.rs.
Aufgrund der etwas deterministischen Natur von ELIZA können Sie Komponententests schreiben, um Skriptregeln auszuwerten. Beispielsweise könnten Sie in tests/conversation_test.rs
Folgendes hinzufügen:
# [ test ]
fn your_test ( ) {
let mut e = Eliza :: new ( "scripts/your_script.json" ) . unwrap ( ) ;
assert_eq ! ( "bar" , e.respond ( "foo" ) ) ;
}
Dabei ist „foo“ die Benutzereingabe in ELIZA und „bar“ die Antwort.
Es ist auch wichtig zu beachten, dass ELIZA eine Protokollierungsausgabe erzeugt. Um diese Protokolle während der Programmausführung zu beobachten, starten Sie die Binärdatei mit der Umgebungsvariablen RUST_LOG=eliza
.